diff --git a/src/cdist-changelog.rst b/src/cdist-changelog.rst index 5a282635..ac96c53e 100644 --- a/src/cdist-changelog.rst +++ b/src/cdist-changelog.rst @@ -1,6 +1,26 @@ Changelog --------- +6.7.0: 2020-07-28 +~~~~~~~~~~~~~~~~~ + * Delete deprecated type: __pf_apply (Darko Poljak) + * New type: __download (Ander Punnar) + * Type __locale_system: Add devuan support (Dennis Camera) + * Type __package_opkg: Add locking (Dennis Camera) + * Type __hosts: Add --alias parameter (Dennis Camera) + * Type __user: Fix shadow explorer for OpenBSD (Dennis Camera) + * Core: Make emulator-part code consistent; remove faulty warning (Darko Poljak) + * Types __file, __directory: Support setuid, setguid, sticky bits (Dennis Camera) + * Type __postfix_master: Fix --option parameter and option expansion (Daniel Fancsali) + * Type __user: Install user packages on OpenWrt (Dennis Camera) + * Type __openldap_server: Add Alpine support (Timothée Floure) + * Type __package_apt: Fix for legacy APT versions that do not support --no-install-recommends (Dennis Camera) + * Type __key_value: Get awk from POSIX PATH (Dennis Camera) + * New type: __unpack (Ander Punnar) + * Type __locale_system: Support more OSes (Dennis Camera) + * Explorers cpu_cores, disks, memory: Fix for NetBSD (Dennis Camera) + * Type __sysctl: Fix for NetBSD (Dennis Camera) + 6.6.0: 2020-06-17 ~~~~~~~~~~~~~~~~~ * Type __ssh_authorized_keys: Add option for removing undefined keys (Ander Punnar) diff --git a/src/cdist-manual.rst b/src/cdist-manual.rst index 46a38d3b..1e82d69a 100644 --- a/src/cdist-manual.rst +++ b/src/cdist-manual.rst @@ -8,6 +8,7 @@ cdist manual **All versions** +* `6.7.0 `_ * `6.6.0 `_ * `6.5.6 `_ * `6.5.5 `_ diff --git a/src/extra/manual/6.7.0/.buildinfo b/src/extra/manual/6.7.0/.buildinfo new file mode 100644 index 00000000..464b6221 --- /dev/null +++ b/src/extra/manual/6.7.0/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 3b6447d0c969c5815e4f1311bd746bfb +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/src/extra/manual/6.7.0/_sources/cdist-best-practice.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-best-practice.rst.txt new file mode 100644 index 00000000..39ec453e --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-best-practice.rst.txt @@ -0,0 +1,278 @@ +Best practice +============= +Practices used in real environments + +Passwordless connections +------------------------ +It is recommended to run cdist with public key authentication. +This requires a private/public key pair and the entry +"PermitRootLogin without-password" in the sshd server. +See sshd_config(5) and ssh-keygen(1). + + +Speeding up ssh connections +--------------------------- +When connecting to a new host, the initial delay with ssh connections +is pretty big. As cdist makes many connections to each host successive +connections can be sped up by "sharing of multiple sessions over a single +network connection" (quote from ssh_config(5)). This is also called "connection +multiplexing". + +Cdist implements this since v4.0.0 by executing ssh with the appropriate +options (`-o ControlMaster=auto -o ControlPath=/tmp//s -o +ControlPersist=2h`). + +Note that the sshd_config on the server can configure the maximum number of +parallel multiplexed connections this with `MaxSessions N` (N defaults to 10 +for OpenSSH v7.4). + + +Speeding up shell execution +---------------------------- +On the source host, ensure that /bin/sh is *not* bash: bash is quite slow for +script execution. Instead, you could use dash after installing it:: + + ln -sf /bin/dash /bin/sh + + +Multi master or environment setups +---------------------------------- +If you plan to distribute cdist among servers or use different +environments, you can do so easily with the included version +control git. For instance if you plan to use the typical three +environments production, integration and development, you can +realise this with git branches:: + + # Go to cdist checkout + cd /path/to/cdist + + # Create branches + git branch development + git branch integration + git branch production + + # Make use of a branch, for instance production + git checkout production + +Similar if you want to have cdist checked out at multiple machines, +you can clone it multiple times:: + + machine-a % git clone git://your-git-server/cdist + machine-b % git clone git://your-git-server/cdist + + +Separating work by groups +------------------------- +If you are working with different groups on one cdist-configuration, +you can delegate to other manifests and have the groups edit only +their manifests. You can use the following snippet in +**conf/manifests/init**:: + + # Include other groups + sh -e "$__manifest/systems" + + sh -e "$__manifest/cbrg" + + +Maintaining multiple configurations +----------------------------------- +When you need to manage multiple sites with cdist, like company_a, company_b +and private for instance, you can easily use git for this purpose. +Including a possible common base that is reused across the different sites:: + + # create branches + git branch company_a company_b common private + + # make stuff for company a + git checkout company_a + # work, commit, etc. + + # make stuff for company b + git checkout company_b + # work, commit, etc. + + # make stuff relevant for all sites + git checkout common + # work, commit, etc. + + # change to private and include latest common stuff + git checkout private + git merge common + + +The following **.git/config** is taken from a real world scenario:: + + # Track upstream, merge from time to time + [remote "upstream"] + url = git://git.schottelius.org/cdist + fetch = +refs/heads/*:refs/remotes/upstream/* + + # Same as upstream, but works when being offline + [remote "local"] + fetch = +refs/heads/*:refs/remotes/local/* + url = /home/users/nico/p/cdist + + # Remote containing various ETH internal branches + [remote "eth"] + url = sans.ethz.ch:/home/services/sans/git/cdist-eth + fetch = +refs/heads/*:refs/remotes/eth/* + + # Public remote that contains my private changes to cdist upstream + [remote "nico"] + url = git.schottelius.org:/home/services/git/cdist-nico + fetch = +refs/heads/*:refs/remotes/nico/* + + # The "nico" branch will be synced with the remote nico, branch master + [branch "nico"] + remote = nico + merge = refs/heads/master + + # ETH stable contains rock solid configurations used in various places + [branch "eth-stable"] + remote = eth + merge = refs/heads/stable + +Have a look at git-remote(1) to adjust the remote configuration, which allows + + +Multiple developers with different trust +---------------------------------------- +If you are working in an environment that requires different people to +work on the same configuration, but having different privileges, you can +implement this scenario with a gateway host and sudo: + +- Create a dedicated user (for instance **cdist**) +- Setup the ssh-pubkey for this user that has the right to configure all hosts +- Create a wrapper to update the cdist configuration in ~cdist/cdist +- Allow every developer to execute this script via sudo as the user cdist +- Allow run of cdist as user cdist on specific hosts on a per user/group basis. + + - f.i. nico ALL=(ALL) NOPASSWD: /home/cdist/bin/cdist config hostabc + +For more details consult sudoers(5) + + +Templating +---------- +* create directory files/ in your type (convention) +* create the template as an executable file like files/basic.conf.sh, it will output text using shell variables for the values + +.. code-block:: sh + + #!/bin/sh + # in the template, use cat << eof (here document) to output the text + # and use standard shell variables in the template + # output everything in the template script to stdout + cat << EOF + server { + listen 80; + server_name $SERVERNAME; + root $ROOT; + + access_log /var/log/nginx/$SERVERNAME_access.log + error_log /var/log/nginx/$SERVERNAME_error.log + } + EOF + +* in the manifest, export the relevant variables and add the following lines to your manifest: + +.. code-block:: console + + # export variables needed for the template + export SERVERNAME='test" + export ROOT='/var/www/test' + # render the template + mkdir -p "$__object/files" + "$__type/files/basic.conf.sh" > "$__object/files/basic.conf" + # send the rendered template + __file /etc/nginx/sites-available/test.conf \ + --state present + --source "$__object/files/basic.conf" + + +Testing a new type +------------------ +If you want to test a new type on a node, you can tell cdist to only use an +object of this type: Use the '--initial-manifest' parameter +with - (stdin) as argument and feed object into stdin +of cdist: + +.. code-block:: sh + + # Singleton type without parameter + echo __ungleich_munin_server | cdist --initial-manifest - munin.panter.ch + + # Singleton type with parameter + echo __ungleich_munin_node --allow 1.2.3.4 | \ + cdist --initial-manifest - rails-19.panter.ch + + # Normal type + echo __file /tmp/stdintest --mode 0644 | \ + cdist --initial-manifest - cdist-dev-01.ungleich.ch + + +Other content in cdist repository +--------------------------------- +Usually the cdist repository contains all configuration +items. Sometimes you may have additional resources that +you would like to store in your central configuration +repository (like password files from KeepassX, +Libreoffice diagrams, etc.). + +It is recommended to use a subfolder named "non-cdist" +in the repository for such content: It allows you to +easily distinguish what is used by cdist and what is not +and also to store all important files in one +repository. + + +Notes on CDIST_ORDER_DEPENDENCY +------------------------------- +With CDIST_ORDER_DEPENDENCY all types are executed in the order in which they +are created in the manifest. The current created object automatically depends +on the previously created object. + +It essentially helps you to build up blocks of code that build upon each other +(like first creating the directory xyz than the file below the directory). + +This can be helpful, but one must be aware of its side effects. + + +CDIST_ORDER_DEPENDENCY kills parallelization +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Suppose you have defined CDIST_ORDER_DEPENDENCY and then, among other things, +you specify creation of three, by nature independent, files. + +**init** + +.. code-block:: sh + + CDIST_ORDER_DEPENDENCY=1 + export CDIST_ORDER_DEPENDENCY + + ... + __file /tmp/file1 + __file /tmp/file2 + __file /tmp/file3 + ... + +Due to defined CDIST_ORDER_DEPENDENCY cdist will execute them in specified order. +It is better to use CDIST_ORDER_DEPENDENCY in well defined blocks: + +**init** + +.. code-block:: sh + + CDIST_ORDER_DEPENDENCY=1 + export CDIST_ORDER_DEPENDENCY + ... + unset CDIST_ORDER_DEPENDENCY + + __file /tmp/file1 + __file /tmp/file2 + __file /tmp/file3 + + CDIST_ORDER_DEPENDENCY=1 + export CDIST_ORDER_DEPENDENCY + ... + unset CDIST_ORDER_DEPENDENCY diff --git a/src/extra/manual/6.7.0/_sources/cdist-bootstrap.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-bootstrap.rst.txt new file mode 100644 index 00000000..10f86c5a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-bootstrap.rst.txt @@ -0,0 +1,118 @@ +Bootstrap +========= +This document describes the usual steps recommended for a new +cdist setup. It is recommended that you have read and understood +`cdist quickstart `_ before digging into this. + + +Location +--------- +First of all, you should think about where to store your configuration +database and who will be accessing or changing it. Secondly you have to +think about where to configure your hosts from, which may be a different +location. + +For starters, having cdist (which includes the configuration database) on +your notebook should be fine. +Additionally an external copy of the git repository the configuration +relies on is recommended, for use as backup as well as to allow easy collaboration +with others. + +For more sophisticated setups developing cdist configurations with multiple +people, have a look at `cdist best practice `_. + + +Setup working directory and branch +---------------------------------- +I assume you have a fresh copy of the cdist tree in ~/cdist, cloned from +one of the official URLs (see `cdist quickstart `_ if you don't). +Entering the command "git branch" should show you "* master", which indicates +you are on the **master** branch. + +The master branch reflects the latest development of cdist. As this is the +development branch, it may or may not work. There are also version branches +available, which are kept in a stable state. Let's use **git branch -r** +to list all branches:: + + cdist% git branch -r + origin/1.0 + origin/1.1 + origin/1.2 + origin/1.3 + origin/1.4 + origin/1.5 + origin/1.6 + origin/1.7 + origin/2.0 + origin/HEAD -> origin/master + origin/archive_shell_function_approach + origin/master + +So **2.0** is the latest version branch in this example. +All versions (2.0.x) within one version branch (2.0) are compatible to each +other and won't break your configuration when updating. + +It's up to you to decide which branch you want to base your own work on: +master contains more recent changes, newer types, but may also break. +The version branches are stable, but may lack the latest features. +Your decision can be changed later on, but may result in merge conflicts, +which you will need to solve. + +Let's assume you want latest stuff and select the master branch as base for +your own work. Now it's time to create your branch, which contains your +local changes. I usually name it by the company/area I am working for: +ethz-systems, localch, customerX, ... But this is pretty much up to you. + +In this tutorial I use the branch **mycompany**:: + + cdist% git checkout -b mycompany origin/master + Branch mycompany set up to track remote branch master from origin. + Switched to a new branch 'mycompany' + cdist-user% git branch + master + * mycompany + +From now on, you can use git as usual to commit your changes in your own branch. + + +Publishing the configuration +---------------------------- +Usually a development machine like a notebook should be considered +temporary only. For this reason and to enable shareability, the configuration +should be published to another device as early as possible. The following +example shows how to publish the configuration to another host that is +reachable via ssh and has git installed:: + + # Create bare git repository on the host named "loch" + cdist% ssh loch "GIT_DIR=/home/nutzer/cdist git init" + Initialized empty Git repository in /home/nutzer/cdist/ + + # Add remote git repo to git config + cdist% git remote add loch loch:/home/nutzer/cdist + + # Configure the mycompany branch to push to loch + cdist% git config branch.mycompany.remote loch + + # Configure mycompany branch to push into remote master branch + cdist% git config branch.mycompany.merge refs/heads/master + + # Push mycompany branch to remote branch master initially + cdist% git push loch mycompany:refs/heads/master + +Now you have setup the git repository to synchronise the **mycompany** +branch with the **master** branch on the host **loch**. Thus you can commit +as usual in your branch and push out changes by entering **git push**. + + +Updating from origin +-------------------- +Whenever you want to update your cdist installation, you can use git to do so:: + + # Update git repository with latest changes from origin + cdist% git fetch origin + + # Update current branch with master branch from origin + cdist% git merge origin/master + + # Alternative: Update current branch with 2.0 branch from origin + cdist% git merge origin/2.0 diff --git a/src/extra/manual/6.7.0/_sources/cdist-cache.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-cache.rst.txt new file mode 100644 index 00000000..d2d2d56c --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-cache.rst.txt @@ -0,0 +1,98 @@ +Local cache overview +==================== + +Description +----------- +While executing, cdist stores data to local cache. Currently this feature is +one way only. That means that cdist does not use stored data for future runs. +Anyway, those data can be used for debugging cdist, debugging types and +debugging after host configuration fails. + +Local cache is saved under $HOME/.cdist/cache directory, one directory entry +for each host. Subdirectory path is specified by +:strong:`-C/--cache-path-pattern` option, :strong:`cache_path_pattern` +configuration option or by using :strong:`CDIST_CACHE_PATH_PATTERN` +environment variable. + +For more info on cache path pattern see :strong:`CACHE PATH PATTERN FORMAT` +section in cdist man page. + + +Cache overview +-------------- +As noted above each configured host has got its subdirectory in local cache. +Entries in host's cache directory are as follows. + +bin + directory with cdist type emulators + +conf + dynamically determined cdist conf directory, union of all specified + conf directories + +explorer + directory containing global explorer named files containing explorer output + after running on target host + +messages + file containing messages + +object + directory containing subdirectory for each cdist object + +object_marker + object marker for this particular cdist run + +stderr + directory containing init manifest and remote stderr stream output + +stdout + directory containing init manifest and remote stdout stream output + +target_host + file containing target host of this cdist run, as specified when running + cdist + +typeorder + file containing types in order of execution. + + +Object cache overview +~~~~~~~~~~~~~~~~~~~~~ +Each object under :strong:`object` directory has its own structure. + +code-local + code generated from gencode-local, present only if something is + generated + +code-remote + code generated from gencode-remote, present only if something is + generated + +explorer + directory containing type explorer named files containing explorer output + after running on target host + +files + directory with object files created during type execution + +parameter + directory containing type parameter named files containing parameter + values + +source + this type's source (init manifest) + +state + this type execution state ('done' when finished) + +stderr + directory containing type's manifest, gencode-* and code-* stderr stream + outputs + +stdin + this type stdin content + +stdout + directory containing type's manifest, gencode-* and code-* stdout stream + outputs. diff --git a/src/extra/manual/6.7.0/_sources/cdist-configuration.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-configuration.rst.txt new file mode 100644 index 00000000..a2024584 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-configuration.rst.txt @@ -0,0 +1,41 @@ +Configuration +============= + +Description +----------- +cdist obtains configuration data from the following sources in the following +order: + + #. command-line options + #. configuration file specified at command-line using -g command line option + #. configuration file specified in CDIST_CONFIG_FILE environment variable + #. environment variables + #. user's configuration file (first one found of ~/.cdist.cfg, $XDG_CONFIG_HOME/cdist/cdist.cfg, in specified order) + #. in-distribution configuration file (cdist/conf/cdist.cfg) + #. system-wide configuration file (/etc/cdist.cfg) + +if one exists. + +Configuration source with lower ordering number from above has a higher +precedence. Configuration option value read from source with higher +precedence will overwrite option value, if exists, read from source with +lower precedence. That means that command-line option wins them all. + +Users can decide on the local configuration file location. It can be either +~/.cdist.cfg or $XDG_CONFIG_HOME/cdist/cdist.cfg. Note that, if both exist, +then ~/.cdist.cfg is used. + +For a per-project configuration, particular environment variables or better, +CDIST_CONFIG_FILE environment variable or -g CONFIG_FILE command line option, +can be used. + +Config file format +------------------ + +cdist configuration file is in the INI file format. Currently it supports +only [GLOBAL] section. + +Here you can find configuration file skeleton: + +.. literalinclude:: cdist.cfg.skeleton + :language: ini diff --git a/src/extra/manual/6.7.0/_sources/cdist-explorer.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-explorer.rst.txt new file mode 100644 index 00000000..a3c4f490 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-explorer.rst.txt @@ -0,0 +1,54 @@ +Explorer +======== + +Description +----------- +Explorers are small shell scripts, which will be executed on the target +host. The aim of each explorer is to give hints to types on how to act on the +target system. An explorer outputs the result to stdout, which is usually +a one liner, but may be empty or multi line especially in the case of +type explorers. + +There are general explorers, which are run in an early stage, and +type explorers. Both work almost exactly the same way, with the difference +that the values of the general explorers are stored in a general location and +the type specific below the object. + +Explorers can reuse other explorers on the target system by calling + +:: + + $__explorer/ (general and type explorer) + +or + +:: + + $__type_explorer/ (type explorer). + +In case of significant errors, the explorer may exit non-zero and return an +error message on stderr, which will cause cdist to abort. + +You can also use stderr for debugging purposes while developing a new +explorer. + +Examples +-------- +A very simple explorer may look like this:: + + hostname + +Which is in practise the **hostname** explorer. + +A type explorer, which could check for the status of a package may look like this: + +.. code-block:: sh + + if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" + else + name="$__object_id" + fi + + # Expect dpkg failing, if package is not known / installed + dpkg -s "$name" 2>/dev/null || exit 0 diff --git a/src/extra/manual/6.7.0/_sources/cdist-features.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-features.rst.txt new file mode 100644 index 00000000..be56fa22 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-features.rst.txt @@ -0,0 +1,48 @@ +Features +======== + +But cdist ticks differently, here is the feature set that makes it unique: + +Simplicity + There is only one type to extend cdist called **type** + +Design + + Type and core cleanly separated + + Sticks completely to the KISS (keep it simple and stupid) paradigm + + Meaningful error messages - do not lose time debugging error messages + + Consistency in behaviour, naming and documentation + + No surprise factor: Only do what is obviously clear, no magic + + Define target state, do not focus on methods or scripts + + Push architecture: Instantly apply your changes + +Small core + cdist's core is very small - less code, less bugs + +Fast development + Focus on straightforwardness of type creation is a main development objective + Batteries included: A lot of requirements can be solved using standard types + +Modern Programming Language + cdist is written in Python + +Requirements, Scalability + No central server needed, cdist operates in push mode and can be run from any computer + +Requirements, Scalability, Upgrade + cdist only needs to be updated on the master, not on the target hosts + +Requirements, Security + Uses well-know `SSH `_ as transport protocol + +Requirements, Simplicity + Requires only shell and SSH server on the target + +UNIX + Reuse of existing tools like cat, find, mv, ... + +UNIX, familiar environment, documentation + Is available as manpages and HTML + +UNIX, simplicity, familiar environment + cdist is configured in POSIX shell + diff --git a/src/extra/manual/6.7.0/_sources/cdist-hacker.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-hacker.rst.txt new file mode 100644 index 00000000..e4252e19 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-hacker.rst.txt @@ -0,0 +1,145 @@ +Hacking +======= + +Welcome +------- +Welcome dear hacker! I invite you to a tour of pointers to +get into the usable configuration management system, cdist. + +The first thing to know is probably that cdist is brought to +you by people who care about how code looks like and who think +twice before merging or implementing a feature: Less features +with good usability are far better than the opposite. + + +Reporting bugs +-------------- +If you believe you've found a bug and verified that it is +in the latest version, drop a mail to the cdist mailing list, +subject prefixed with "[BUG] " or create an issue on code.ungleich.ch. + + +Coding conventions (everywhere) +------------------------------- +If something should be improved or needs to be fixed, add the word FIXME +nearby, so grepping for FIXME gives all positions that need to be fixed. + +Indentation is 4 spaces (welcome to the python world). + + +How to submit stuff for inclusion into upstream cdist +----------------------------------------------------- +If you did some cool changes to cdist, which you think might be of benefit to other +cdist users, you're welcome to propose inclusion into upstream. + +There are some requirements to ensure your changes don't break other peoples +work nor kill the authors brain: + +- All files should contain the usual header (Author, Copying, etc.) +- Code submission must be done via git +- Do not add cdist/conf/manifest/init - This file should only be touched in your + private branch! +- Code to be included should be branched of the upstream "master" branch + + - Exception: Bugfixes to a version branch + +- On a merge request, always name the branch I should pull from +- Always ensure **all** manpages build. Use **./build man** to test. +- If you developed more than **one** feature, consider submitting them in + separate branches. This way one feature can already be included, even if + the other needs to be improved. + +As soon as your work meets these requirements, write a mail +for inclusion to the mailinglist **cdist-configuration-management at googlegroups.com** +or open a merge request at https://code.ungleich.ch/ungleich-public/cdist. + + +How to submit a new type +------------------------ +For detailed information about types, see `cdist type `_. + +Submitting a type works as described above, with the additional requirement +that a corresponding manpage named man.rst in ReSTructured text format with +the manpage-name "cdist-type__NAME" is included in the type directory +AND the manpage builds (`make man`). + +Warning: Submitting "exec" or "run" types that simply echo their parameter in +**gencode** will not be accepted, because they are of no use. Every type can output +code and thus such a type introduces redundant functionality that is given by +core cdist already. + + +Example git workflow +--------------------- +The following workflow works fine for most developers + +.. code-block:: sh + + # get latest upstream master branch + git clone https://code.ungleich.ch/ungleich-public/cdist.git + + # update if already existing + cd cdist; git fetch -v; git merge origin/master + + # create a new branch for your feature/bugfix + cd cdist # if you haven't done before + git checkout -b documentation_cleanup + + # *hack* + *hack* + + # clone the cdist repository on code.ungleich.ch if you haven't done so + + # configure your repo to know about your clone (only once) + git remote add ungleich git@code.ungleich.ch:YOURUSERNAME/cdist.git + + # push the new branch to ungleich gitlab + git push ungleich documentation_cleanup + + # (or everything) + git push --mirror ungleich + + # create a merge request at ungleich gitlab (use a browser) + # *fixthingsbecausequalityassurancefoundissuesinourpatch* + *hack* + + # push code to ungleich gitlab again + git push ... # like above + + # add comment that everything should be green now (use a browser) + + # go back to master branch + git checkout master + + # update master branch that includes your changes now + git fetch -v origin + git diff master..origin/master + git merge origin/master + +If at any point you want to go back to the original master branch, you can +use **git stash** to stash your changes away:: + +.. code-block:: sh + + # assume you are on documentation_cleanup + git stash + + # change to master and update to most recent upstream version + git checkout master + git fetch -v origin + git merge origin/master + +Similarly when you want to develop another new feature, you go back +to the master branch and create another branch based on it:: + +.. code-block:: sh + + # change to master and update to most recent upstream version + git checkout master + git fetch -v origin + git merge origin/master + + git checkout -b another_feature + +(you can repeat the code above for as many features as you want to develop +in parallel) diff --git a/src/extra/manual/6.7.0/_sources/cdist-install.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-install.rst.txt new file mode 100644 index 00000000..6f4f14d7 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-install.rst.txt @@ -0,0 +1,182 @@ +How to install cdist +==================== + +Requirements +------------- + +Source Host +~~~~~~~~~~~ + +This is the machine from which you will configure target hosts. + + * /bin/sh: A POSIX like shell (for instance bash, dash, zsh) + * Python >= 3.5 + * SSH client + * sphinx (for building html docs and/or the man pages) + +Target Hosts +~~~~~~~~~~~~ + + * /bin/sh: A POSIX like shell (for instance bash, dash, zsh) + * SSH server + +Install cdist +------------- + +From git +~~~~~~~~ + +Cloning cdist from git gives you the advantage of having +a version control in place for development of your own stuff +immediately. + +To install cdist, execute the following commands: + +.. code-block:: sh + + git clone https://code.ungleich.ch/ungleich-public/cdist.git + cd cdist + export PATH=$PATH:$(pwd -P)/bin + +From version 4.2.0 cdist tags and releases are signed. +You can get GPG public key used for signing `here <_static/pgp-key-EFD2AE4EC36B6901.asc>`_. +It is assumed that you are familiar with *git* ways of signing and verification. + +You can also get cdist from `github mirror `_. + +To install cdist with distutils from cloned repository, first you have to +create version.py: + +.. code-block:: sh + + ./bin/build-helper version + +Then you install it with: + +.. code-block:: sh + + make install + +or with: + +.. code-block:: sh + + make install-user + +to install it into user *site-packages* directory. +Or directly with distutils: + +.. code-block:: sh + + python setup.py install + +Note that `bin/build-helper` script is intended for cdist maintainers. + + +Available versions in git +^^^^^^^^^^^^^^^^^^^^^^^^^ + + * The active development takes place in the **master** branch + * The released versions can be found in the tags + +Other branches may be available for features or bugfixes, but they +may vanish at any point. To select a specific branch use + +.. code-block:: sh + + # Generic code + git checkout -b origin/ + +So for instance if you want to use and stay with version 4.1, you can use + +.. code-block:: sh + + git checkout -b 4.1 origin/4.1 + +Building and using documentation (man and html) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If you want to build and use the documentation, run: + +.. code-block:: sh + + make docs + +Documentation comes in two formats, man pages and full HTML +documentation. Documentation is built into distribution's +docs/dist directory. man pages are in docs/dist/man and +HTML documentation in docs/dist/html. + +If you want to use man pages, run: + +.. code-block:: sh + + export MANPATH=$MANPATH:$(pwd -P)/docs/dist/man + +Or you can move man pages from docs/dist/man directory to some +other directory and add it to MANPATH. + +Full HTML documentation can be accessed at docs/dist/html/index.html. + +You can also build only man pages or only html documentation, for +only man pages run: + +.. code-block:: sh + + make man + +for only html documentation run: + +.. code-block:: sh + + make html + +You can also build man pages for types in your ~/.cdist directory: + +.. code-block:: sh + + make dotman + +Built man pages are now in docs/dist/man directory. If you have +some other custom .cdist directory, e.g. /opt/cdist then use: + +.. code-block:: sh + + make DOT_CDIST_PATH=/opt/cdist dotman + +Note that `dotman`-target has to be built before a `make docs`-run, otherwise +the custom man-pages are not picked up. + +Python package +~~~~~~~~~~~~~~ + +Cdist is available as a python package at +`PyPi `_. You can install it using + +.. code-block:: sh + + pip install cdist + +Installing from source with signature verification +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If you want to install cdist from signed source and verify it, first you need to +download cdist archive and its detached signature. + +Get both, *cdist-x.y.z.tar.gz* and *cdist-x.y.z.tar.gz.asc* from release +notes of the desired tag *x.y.z* at +`cdist git repository `_. + +Get GPG public key used for signing `here <_static/pgp-key-EFD2AE4EC36B6901.asc>`_ +and import it into GPG. + +Now cdist source archive can be verified using `gpg`, e.g. to verify `cdist-6.2.0`: + +.. code-block:: sh + + $ gpg --verify cdist-6.2.0.tar.gz.asc cdist-6.2.0.targ.gz + gpg: Signature made Sat Nov 30 23:14:19 2019 CET + gpg: using RSA key 69767822F3ECC3C349C1EFFFEFD2AE4EC36B6901 + gpg: Good signature from "ungleich GmbH (ungleich FOSS) " [ultimate] + +Further steps are the same as for `installing from git `_. diff --git a/src/extra/manual/6.7.0/_sources/cdist-integration.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-integration.rst.txt new file mode 100644 index 00000000..13880cd3 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-integration.rst.txt @@ -0,0 +1,47 @@ +cdist integration / using cdist as library +========================================== + +Description +----------- + +cdist can be integrate with other applications by importing cdist and other +cdist modules and setting all by hand. There are also helper functions which +aim to ease this integration. Just import **cdist.integration** and use its +functions: + +* :strong:`cdist.integration.configure_hosts_simple` for configuration +* :strong:`cdist.integration.install_hosts_simple` for installation. + +Functions require `host` and `manifest` parameters. +`host` can be specified as a string representing host or as iterable +of hosts. `manifest` is a path to initial manifest. For other cdist +options default values will be used. `verbose` is a desired verbosity +level which defaults to VERBOSE_INFO. `cdist_path` parameter specifies +path to cdist executable, if it is `None` then functions will try to +find it first from local lib directory and then in PATH. + +In case of cdist error :strong:`cdist.Error` exception is raised. + +:strong:`WARNING`: cdist integration helper functions are not yet stable! + +Examples +-------- + +.. code-block:: sh + + # configure host from python interactive shell + >>> import cdist.integration + >>> cdist.integration.configure_hosts_simple('185.203.114.185', + ... '~/.cdist/manifest/init') + + # configure host from python interactive shell, specifying verbosity level + >>> import cdist.integration + >>> cdist.integration.configure_hosts_simple( + ... '185.203.114.185', '~/.cdist/manifest/init', + ... verbose=cdist.argparse.VERBOSE_TRACE) + + # configure specified dns hosts from python interactive shell + >>> import cdist.integration + >>> hosts = ('dns1.ungleich.ch', 'dns2.ungleich.ch', 'dns3.ungleich.ch', ) + >>> cdist.integration.configure_hosts_simple(hosts, + ... '~/.cdist/manifest/init') diff --git a/src/extra/manual/6.7.0/_sources/cdist-inventory.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-inventory.rst.txt new file mode 100644 index 00000000..106fcdb6 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-inventory.rst.txt @@ -0,0 +1,211 @@ +Inventory +========= + +Introduction +------------ + +cdist comes with simple built-in tag based inventory. It is a simple inventory +with list of hosts and a host has a list of tags. +Inventory functionality is still in **beta** so it can be used only if beta +command line flag is specified (-b, --beta) or setting CDIST_BETA env var. + +Description +----------- + +The idea is to have simple tagging inventory. There is a list of hosts and for +each host there are tags. Inventory database is a set of files under inventory +database base directory. Filename equals hostname. Each file contains tags for +hostname with each tag on its own line. + +Using inventory you can now configure hosts by selecting them by tags. + +Tags have no values, as tags are just tags. Tag name-value would in this +context mean that host has two tags and it is selected by specifying that both +tags are present. + +This inventory is **KISS** cdist built-in inventory database. You can maintain it +using cdist inventory interface or using standard UNIX tools. + +cdist inventory interface +------------------------- + +With cdist inventory interface you can list host(s) and tag(s), add host(s), +add tag(s), delete host(s) and delete tag(s). + +Configuring hosts using inventory +--------------------------------- + +config command now has new options, **-t**, **-a** and **-A**. + +**-A** means that all hosts in tag db is selected. + +**-a** means that selected hosts must contain ALL specified tags. + +**-t** means that host specifies tag - all hosts that have specified tags are +selected. + +Examples +-------- + +.. code-block:: sh + + # List inventory content + $ cdist inventory list -b + + # List inventory for specified host localhost + $ cdist inventory list -b localhost + + # List inventory for specified tag loadbalancer + $ cdist inventory list -b -t loadbalancer + + # Add hosts to inventory + $ cdist inventory add-host -b web1 web2 web3 + + # Delete hosts from file old-hosts from inventory + $ cdist inventory del-host -b -f old-hosts + + # Add tags to specified hosts + $ cdist inventory add-tag -b -t europe,croatia,web,static web1 web2 + + # Add tag to all hosts in inventory + $ cdist inventory add-tag -b -t vm + + # Delete all tags from specified host + $ cdist inventory del-tag -b -a localhost + + # Delete tags read from stdin from hosts specified by file hosts + $ cdist inventory del-tag -b -T - -f hosts + + # Configure hosts from inventory with any of specified tags + $ cdist config -b -t web dynamic + + # Configure hosts from inventory with all specified tags + $ cdist config -b -t -a web dynamic + + # Configure all hosts from inventory db + $ cdist config -b -A + +Example of manipulating database +-------------------------------- + +.. code-block:: sh + + $ python3 scripts/cdist inventory list -b + $ python3 scripts/cdist inventory add-host -b localhost + $ python3 scripts/cdist inventory add-host -b test.mycloud.net + $ python3 scripts/cdist inventory list -b + localhost + test.mycloud.net + $ python3 scripts/cdist inventory add-host -b web1.mycloud.net web2.mycloud.net shell1.mycloud.net shell2.mycloud.net + $ python3 scripts/cdist inventory list -b + localhost + test.mycloud.net + web1.mycloud.net + web2.mycloud.net + shell1.mycloud.net + shell2.mycloud.net + $ python3 scripts/cdist inventory add-tag -b -t web web1.mycloud.net web2.mycloud.net + $ python3 scripts/cdist inventory add-tag -b -t shell shell1.mycloud.net shell2.mycloud.net + $ python3 scripts/cdist inventory add-tag -b -t cloud + $ python3 scripts/cdist inventory list -b + localhost cloud + test.mycloud.net cloud + web1.mycloud.net cloud,web + web2.mycloud.net cloud,web + shell1.mycloud.net cloud,shell + shell2.mycloud.net cloud,shell + $ python3 scripts/cdist inventory add-tag -b -t test,web,shell test.mycloud.net + $ python3 scripts/cdist inventory list -b + localhost cloud + test.mycloud.net cloud,shell,test,web + web1.mycloud.net cloud,web + web2.mycloud.net cloud,web + shell1.mycloud.net cloud,shell + shell2.mycloud.net cloud,shell + $ python3 scripts/cdist inventory del-tag -b -t shell test.mycloud.net + $ python3 scripts/cdist inventory list -b + localhost cloud + test.mycloud.net cloud,test,web + web1.mycloud.net cloud,web + web2.mycloud.net cloud,web + shell1.mycloud.net cloud,shell + shell2.mycloud.net cloud,shell + $ python3 scripts/cdist inventory add-tag -b -t all + $ python3 scripts/cdist inventory add-tag -b -t mistake + $ python3 scripts/cdist inventory list -b + localhost all,cloud,mistake + test.mycloud.net all,cloud,mistake,test,web + web1.mycloud.net all,cloud,mistake,web + web2.mycloud.net all,cloud,mistake,web + shell1.mycloud.net all,cloud,mistake,shell + shell2.mycloud.net all,cloud,mistake,shell + $ python3 scripts/cdist inventory del-tag -b -t mistake + $ python3 scripts/cdist inventory list -b + localhost all,cloud + test.mycloud.net all,cloud,test,web + web1.mycloud.net all,cloud,web + web2.mycloud.net all,cloud,web + shell1.mycloud.net all,cloud,shell + shell2.mycloud.net all,cloud,shell + $ python3 scripts/cdist inventory del-host -b localhost + $ python3 scripts/cdist inventory list -b + test.mycloud.net all,cloud,test,web + web1.mycloud.net all,cloud,web + web2.mycloud.net all,cloud,web + shell1.mycloud.net all,cloud,shell + shell2.mycloud.net all,cloud,shell + $ python3 scripts/cdist inventory list -b -t web + test.mycloud.net all,cloud,test,web + web1.mycloud.net all,cloud,web + web2.mycloud.net all,cloud,web + $ python3 scripts/cdist inventory list -b -t -a web test + test.mycloud.net all,cloud,test,web + $ python3 scripts/cdist inventory list -b -t -a web all + test.mycloud.net all,cloud,test,web + web1.mycloud.net all,cloud,web + web2.mycloud.net all,cloud,web + $ python3 scripts/cdist inventory list -b -t web all + test.mycloud.net all,cloud,test,web + web1.mycloud.net all,cloud,web + web2.mycloud.net all,cloud,web + shell1.mycloud.net all,cloud,shell + shell2.mycloud.net all,cloud,shell + $ cd cdist/inventory + $ ls -1 + shell1.mycloud.net + shell2.mycloud.net + test.mycloud.net + web1.mycloud.net + web2.mycloud.net + $ ls -l + total 20 + -rw-r--r-- 1 darko darko 16 Jun 24 12:43 shell1.mycloud.net + -rw-r--r-- 1 darko darko 16 Jun 24 12:43 shell2.mycloud.net + -rw-r--r-- 1 darko darko 19 Jun 24 12:43 test.mycloud.net + -rw-r--r-- 1 darko darko 14 Jun 24 12:43 web1.mycloud.net + -rw-r--r-- 1 darko darko 14 Jun 24 12:43 web2.mycloud.net + $ cat test.mycloud.net + test + all + web + cloud + $ cat web2.mycloud.net + all + web + cloud + +For more info about inventory commands and options see `cdist `_\ (1). + +Using external inventory +------------------------ + +cdist can be used with any external inventory where external inventory is +some storage or database from which you can get a list of hosts to configure. +cdist can then be fed with this list of hosts through stdin or file using +**-f** option. For example, if your host list is stored in sqlite3 database +hosts.db and you want to select hosts which purpose is **django** then you +can use it with cdist like: + +.. code-block:: sh + + $ sqlite3 hosts.db "select hostname from hosts where purpose = 'django';" | cdist config diff --git a/src/extra/manual/6.7.0/_sources/cdist-manifest.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-manifest.rst.txt new file mode 100644 index 00000000..5dbca479 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-manifest.rst.txt @@ -0,0 +1,376 @@ +Manifest +======== + +Description +----------- +Manifests are used to define which objects to create. +Objects are instances of **types**, like in object oriented programming languages. +An object is represented by the combination of +**type + slash + object name**: **\__file/etc/cdist-configured** is an +object of the type **__file** with the name **etc/cdist-configured**. + +All available types can be found in the **cdist/conf/type/** directory, +use **ls cdist/conf/type** to get the list of available types. If you have +setup the MANPATH correctly, you can use **man cdist-reference** to access +the reference with pointers to the manpages. + + +Types in manifests are used like normal command line tools. Let's have a look +at an example:: + + # Create object of type __package with the parameter state = absent + __package apache2 --state absent + + # Same with the __directory type + __directory /tmp/cdist --state present + +These two lines create objects, which will later be used to realise the +configuration on the target host. + +Manifests are executed locally as a shell script using **/bin/sh -e**. +The resulting objects are stored in an internal database. + +The same object can be redefined in multiple different manifests as long as +the parameters are exactly the same. + +In general, manifests are used to define which types are used depending +on given conditions. + + +Initial and type manifests +-------------------------- +Cdist knows about two types of manifests: The initial manifest and type +manifests. The initial manifest is used to define, which configurations +to apply to which hosts. The type manifests are used to create objects +from types. More about manifests in types can be found in `cdist type `_. + + +Define state in the initial manifest +------------------------------------ +The **initial manifest** is the entry point for cdist to find out, which +**objects** to configure on the selected host. +Cdist expects the initial manifest at **cdist/conf/manifest/init**. + +Within this initial manifest you define which objects should be +created on which host. To distinguish between hosts, you can use the +environment variable **__target_host** and/or **__target_hostname** and/or +**__target_fqdn**. Let's have a look at a simple example:: + + __cdistmarker + + case "$__target_host" in + localhost) + __directory /home/services/kvm-vm --parents yes + ;; + esac + +This manifest says: Independent of the host, always use the type +**__cdistmarker**, which creates the file **/etc/cdist-configured**, +with the timestamp as content. +The directory **/home/services/kvm-vm**, including all parent directories, +is only created on the host **localhost**. + +As you can see, there is no magic involved, the manifest is simple shell code that +utilises cdist types. Every available type can be executed like a normal +command. + + +Splitting up the initial manifest +--------------------------------- +If you want to split up your initial manifest, you can create other shell +scripts in **cdist/conf/manifest/** and include them in **cdist/conf/manifest/init**. +Cdist provides the environment variable **__manifest** to reference +the directory containing the initial manifest (see `cdist reference `_). + +The following example would include every file with a **.sh** suffix:: + + # Include *.sh + for manifest in $__manifest/*.sh; do + # And source scripts into our shell environment + . "$manifest" + done + + +Dependencies +------------ +If you want to describe that something requires something else, just +setup the variable "require" to contain the requirements. Multiple +requirements can be added white space separated. + +:: + + 1 # No dependency + 2 __file /etc/cdist-configured + 3 + 4 # Require above object + 5 require="__file/etc/cdist-configured" __link /tmp/cdist-testfile \ + 6 --source /etc/cdist-configured --type symbolic + 7 + 8 # Require two objects + 9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \ + 10 __file /tmp/cdist-another-testfile + + +Above the "require" variable is only set for the command that is +immediately following it. Dependencies should always be declared that way. + +On line 4 you can see that the instantiation of a type "\__link" object needs +the object "__file/etc/cdist-configured" to be present, before it can proceed. + +This also means that the "\__link" command must make sure, that either +"\__file/etc/cdist-configured" already is present, or, if it's not, it needs +to be created. The task of cdist is to make sure, that the dependency will be +resolved appropriately and thus "\__file/etc/cdist-configured" be created +if necessary before "__link" proceeds (or to abort execution with an error). + +If you really need to make all types depend on a common dependency, you can +export the "require" variable as well. But then, if you need to add extra +dependencies to a specific type, you have to make sure that you append these +to the globally already defined one. + +:: + + # First of all, update the package index + __package_update_index + # Upgrade all the installed packages afterwards + require="__package_update_index" __package_upgrade_all + # Create a common dependency for all the next types so that they get to + # be executed only after the package upgrade has finished + export require="__package_upgrade_all" + + # Ensure that lighttpd is installed after we have upgraded all the packages + __package lighttpd --state present + # Ensure that munin is installed after lighttpd is present and after all + # the packages are upgraded + require="$require __package/lighttpd" __package munin --state present + + +All objects that are created in a type manifest are automatically required +from the type that is calling them. This is called "autorequirement" in +cdist jargon. + +You can find a more in depth description of the flow execution of manifests +in `cdist execution stages `_ and of how types work in `cdist type `_. + + +Create dependencies from execution order +----------------------------------------- +You can tell cdist to execute all types in the order in which they are created +in the manifest by setting up the variable CDIST_ORDER_DEPENDENCY. +When cdist sees that this variable is setup, the current created object +automatically depends on the previously created object. + +It essentially helps you to build up blocks of code that build upon each other +(like first creating the directory xyz than the file below the directory). + +Read also about `notes on CDIST_ORDER_DEPENDENCY `_. + +In version 6.2.0 semantic CDIST_ORDER_DEPENDENCY is finally fixed and well defined. + +CDIST_ORDER_DEPENDENCY defines type order dependency context. Order dependency context +starts when CDIST_ORDER_DEPENDENCY is set, and ends when it is unset. After each +manifest execution finishes, any existing order dependency context is automatically +unset. This ensures that CDIST_ORDER_DEPENDENCY is valid within the manifest where it +is used. When order dependency context is defined then cdist executes types in the +order in which they are created in the manifest inside order dependency context. + +Sometimes the best way to see how something works is to see examples. + +Suppose you have defined **initial manifest**: + +.. code-block:: sh + + __cycle1 cycle1 + export CDIST_ORDER_DEPENDENCY=1 + __cycle2 cycle2 + __cycle3 cycle3 + +with types **__cycle1**: + +.. code-block:: sh + + export CDIST_ORDER_DEPENDENCY=1 + __file /tmp/cycle11 + __file /tmp/cycle12 + __file /tmp/cycle13 + +**__cycle2**: + +.. code-block:: sh + + __file /tmp/cycle21 + export CDIST_ORDER_DEPENDENCY=1 + __file /tmp/cycle22 + __file /tmp/cycle23 + unset CDIST_ORDER_DEPENDENCY + __file /tmp/cycle24 + +**__cycle3**: + +.. code-block:: sh + + __file /tmp/cycle31 + __file /tmp/cycle32 + export CDIST_ORDER_DEPENDENCY=1 + __file /tmp/cycle33 + __file /tmp/cycle34 + +For the above config, cdist results in the following expected *dependency graph* +(type *__cycleX* is shown as *cX*, *__file/tmp/cycleXY* is shown as *fcXY*): + +:: + + c1---->fc11 + | /\ + | | + +----->fc12 + | /\ + | | + +----->fc13 + + c2--+--->fc21 + /\ | + | | + | +----->fc22 + | | /\ + | | | + | +----->fc23 + | | + | | + | +----->fc24 + | + | + c3---->fc31 + | + | + +----->fc32 + | + | + +----->fc33 + | /\ + | | + +----->fc34 + +Before version 6.2.0 the above configuration would result in cycle: + +:: + + ERROR: 185.203.112.26: Cycle detected in object dependencies: + __file/tmp/cycle11 -> __cycle3/cycle3 -> __cycle2/cycle2 -> __cycle1/cycle1 -> __file/tmp/cycle11! + +The following manifest shows an example for order dependency contexts: + +.. code-block:: sh + + __file /tmp/fileA + export CDIST_ORDER_DEPENDENCY=1 + __file /tmp/fileB + __file /tmp/fileC + __file /tmp/fileD + unset CDIST_ORDER_DEPENDENCY + __file /tmp/fileE + __file /tmp/fileF + export CDIST_ORDER_DEPENDENCY=1 + __file /tmp/fileG + __file /tmp/fileH + unset CDIST_ORDER_DEPENDENCY + __file /tmp/fileI + +This means: + +* C depends on B +* D depends on C +* H depends on G + +and there are no other dependencies from this manifest. + + +Overrides +--------- +In some special cases, you would like to create an already defined object +with different parameters. In normal situations this leads to an error in cdist. +If you wish, you can setup the environment variable CDIST_OVERRIDE +(any value or even empty is ok) to tell cdist, that this object override is +wanted and should be accepted. +ATTENTION: Only use this feature if you are 100% sure in which order +cdist encounters the affected objects, otherwise this results +in an undefined situation. + +If CDIST_OVERRIDE and CDIST_ORDER_DEPENDENCY are set for an object, +CDIST_ORDER_DEPENDENCY will be ignored, because adding a dependency in case of +overrides would result in circular dependencies, which is an error. + + +Examples +-------- +The initial manifest may for instance contain the following code: + +.. code-block:: sh + + # Always create this file, so other sysadmins know cdist is used. + __file /etc/cdist-configured + + case "$__target_host" in + my.server.name) + __directory /root/bin/ + __file /etc/issue.net --source "$__manifest/issue.net + ;; + esac + +The manifest of the type "nologin" may look like this: + +.. code-block:: sh + + __file /etc/nologin --source "$__type/files/default.nologin" + +This example makes use of dependencies: + +.. code-block:: sh + + # Ensure that lighttpd is installed + __package lighttpd --state present + # Ensure that munin makes use of lighttpd instead of the default webserver + # package as decided by the package manager + require="__package/lighttpd" __package munin --state present + +How to override objects: + +.. code-block:: sh + + # for example in the initial manifest + + # create user account foobar with some hash for password + __user foobar --password 'some_fancy_hash' --home /home/foobarexample + + # ... many statements and includes in the manifest later ... + # somewhere in a conditionally sourced manifest + # (e.g. for example only sourced if a special application is on the target host) + + # this leads to an error ... + __user foobar --password 'some_other_hash' + + # this tells cdist, that you know that this is an override and should be accepted + CDIST_OVERRIDE=yes __user foobar --password 'some_other_hash' + # it's only an override, means the parameter --home is not touched + # and stays at the original value of /home/foobarexample + +Dependencies defined by execution order work as following: + +.. code-block:: sh + + # Tells cdist to execute all types in the order in which they are created ... + export CDIST_ORDER_DEPENDENCY=on + __sample_type 1 + require="__some_type_somewhere/id" __sample_type 2 + __example_type 23 + # Now this types are executed in the creation order until the variable is unset + unset CDIST_ORDER_DEPENDENCY + # all now following types cdist makes the order .. + __not_in_order_type 42 + + # how it works : + # this lines above are translated to: + __sample_type 1 + require="__some_type_somewhere/id __sample_type/1" __sample_type 2 + require="__sample_type/2" __example_type 23 + __not_in_order_type 42 diff --git a/src/extra/manual/6.7.0/_sources/cdist-messaging.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-messaging.rst.txt new file mode 100644 index 00000000..ea35c404 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-messaging.rst.txt @@ -0,0 +1,94 @@ +Messaging +========= + +Description +----------- +cdist has a simple but powerful way of allowing communication between +the initial manifest and types as well as types and types. + +Whenever execution is passed from cdist to one of the +scripts described below, cdist generate 2 new temporary files +and exports the environment variables **__messages_in** and +**__messages_out** to point to them. + +Before handing over the control, the content of the global message +file is copied into the file referenced by **$__messages_in**. + +After cdist gained control back, the content of the file referenced +by **$__messages_out** is appended to the global message file. + +This way overwriting any of the two files by accident does not +interfere with other types. + +The order of execution is not defined unless you create dependencies +between the different objects (see `cdist manifest `_) and thus you +can only react reliably on messages by objects that you depend on. + + +Availability +------------ +Messaging is possible between all **local** scripts: + +- initial manifest +- type/manifest +- type/gencode-local +- type/gencode-remote + + +Examples +-------- +When you want to emit a message use: + +.. code-block:: sh + + echo "something" >> "$__messages_out" + +When you want to react on a message use: + +.. code-block:: sh + + if grep -q "^__your_type/object/id:something" "$__messages_in"; then + echo "I do something else" + fi + +Some real life examples: + +.. code-block:: sh + + # Reacting on changes from block for keepalive + if grep -q "^__block/keepalive-vrrp" "$__messages_in"; then + echo /etc/init.d/keepalived restart + fi + + # Reacting on changes of configuration files + if grep -q "^__file/etc/one" $__messages_in; then + echo 'for init in /etc/init.d/opennebula*; do $init restart; done' + fi + +Restart sshd on changes + +.. code-block:: sh + + os="$(cat "$__global/explorer/os")" + + case "$os" in + centos|redhat|suse) + restart="/etc/init.d/sshd restart" + ;; + debian|ubuntu) + restart="/etc/init.d/ssh restart" + ;; + *) + cat << eof >&2 + Unsupported os $os. + If you would like to have this type running on $os, + you can either develop the changes and send a pull + request or ask for a quote at www.ungleich.ch + eof + exit 1 + ;; + esac + + if grep -q "^__key_value/PermitRootLogin" "$__messages_in"; then + echo $restart + fi diff --git a/src/extra/manual/6.7.0/_sources/cdist-os.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-os.rst.txt new file mode 100644 index 00000000..a8e31226 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-os.rst.txt @@ -0,0 +1,19 @@ +Supported operating systems +=========================== + +cdist was tested or is know to run on at least + +* `Alpine Linux `_ +* `Archlinux `_ +* `CentOS `_ +* `Debian `_ +* `Devuan `_ +* `Fedora `_ +* `FreeBSD `_ +* `Gentoo `_ +* `Mac OS X `_ +* `NetBSD `_ +* `OpenBSD `_ +* `Redhat `_ +* `Ubuntu `_ +* `XenServer `_ diff --git a/src/extra/manual/6.7.0/_sources/cdist-parallelization.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-parallelization.rst.txt new file mode 100644 index 00000000..d458a128 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-parallelization.rst.txt @@ -0,0 +1,73 @@ +Parallelization +=============== + +Description +----------- +cdist has two modes of parallel operation. + +One of them is to operate on each host in separate process. This is enabled +with :strong:`-p/--parallel` option. + +The other way is to operate in parallel within one host where you specify +the number of jobs. This is enabled with :strong:`-j/--jobs` option where you +can specify the number of parallel jobs. By default, +:strong:`multiprocessing.cpu_count()` is used. For this mode global explorers, +object preparation and object run are supported. + +You can, of course, use those two options together. This means that each host +will be processed by its own process. Within each process cdist will operate +using specified number of parallel jobs. + +For more info on those options see :strong:`cdist`\ (1). + + +Examples +-------- + +.. code-block:: sh + + # Configure hosts read from file hosts.file in parallel + $ cdist config -p -f hosts.file + + # Configure hosts read from file hosts.file sequentially but using default + # number of parallel jobs + $ cdist config -j -f hosts.file + + # Configure hosts read from file hosts.file in parallel using 16 + # parallel jobs + $ cdist config -j 16 -p -f hosts.file + + +Caveats +------- +When operating in parallel, either by operating in parallel for each host +(-p/--parallel) or by parallel jobs within a host (-j/--jobs), and depending +on target SSH server and its configuration you may encounter connection drops. +This is controlled with sshd :strong:MaxStartups configuration options. +You may also encounter session open refusal. This happens with ssh multiplexing +when you reach maximum number of open sessions permitted per network +connection. In this case ssh will disable multiplexing. +This limit is controlled with sshd :strong:MaxSessions configuration +options. For more details refer to :strong:`sshd_config`\ (5). + +For example, if you reach :strong:`MaxSessions` sessions you may get the +following output: + +.. code-block:: sh + + $ cdist config -b -j 11 -v 78.47.116.244 + INFO: cdist: version 4.2.2-55-g640b7f9 + INFO: 78.47.116.244: Running global explorers + INFO: 78.47.116.244: Remote transfer in 11 parallel jobs + channel 22: open failed: administratively prohibited: open failed + mux_client_request_session: session request failed: Session open refused by peer + ControlSocket /tmp/tmpuah6fw_t/d886d4b7e4425a102a54bfaff4d2288b/ssh-control-path already exists, disabling multiplexing + INFO: 78.47.116.244: Running global explorers in 11 parallel jobs + channel 22: open failed: administratively prohibited: open failed + mux_client_request_session: session request failed: Session open refused by peer + ControlSocket /tmp/tmpuah6fw_t/d886d4b7e4425a102a54bfaff4d2288b/ssh-control-path already exists, disabling multiplexing + INFO: 78.47.116.244: Running initial manifest /tmp/tmpuah6fw_t/d886d4b7e4425a102a54bfaff4d2288b/data/conf/manifest/init + INFO: 78.47.116.244: Running manifest and explorers for __file/root/host.file + INFO: 78.47.116.244: Generating code for __file/root/host.file + INFO: 78.47.116.244: Finished successful run in 18.655028820037842 seconds + INFO: cdist: Total processing time for 1 host(s): 19.159148693084717 diff --git a/src/extra/manual/6.7.0/_sources/cdist-preos.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-preos.rst.txt new file mode 100644 index 00000000..9570bcfc --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-preos.rst.txt @@ -0,0 +1,129 @@ +PreOS +===== + +Description +----------- +With cdist you can install and configure new machines. You can use cdist to +create PreOS, minimal OS whose purpose is to boot a new machine. +After PreOS is booted, the machine is ready for installing the desired OS and +afterwards it is ready for configuration. + +PreOS creation +-------------- +With cdist you can create PreOS. +Currently supported PreOS-es include: + +* debian +* ubuntu +* devuan + +PreOS is created using the ``cdist preos`` command. +This command has subcommands that determine the desired PreOS. + +For example, to create an ubuntu PreOS: + +.. code-block:: sh + + $ cdist preos ubuntu /preos/preos-ubuntu -B -C \ + -k ~/.ssh/id_rsa.pub -p /preos/pxe-ubuntu + +For more info about the available options see the cdist manual page. + +This will bootstrap (``-B``) ubuntu PreOS in the ``/preos/preos-ubuntu`` +directory, it will be configured (``-C``) using default the built-in initial +manifest and with specified ssh authorized key (``-k``). +After bootstrapping and configuration, the PXE boot directory will be +created (``-p``) in ``/preos/pxe-ubuntu``. + +After PreOS is created, new machines can be booted using the created PXE +(after proper dhcp and tftp settings). + +Since PreOS is configured with ssh authorized key it can be accessed through +ssh, i.e. it can be further installed and configured with cdist. + +Implementing a new PreOS sub-command +------------------------------------ +preos command is implemented as a plugin system. This plugin system scans for +preos subcommands in the ``cdist/preos/`` distribution directory and also in +``~/.cdist/preos/`` directory if it exists. + +preos subcommand is a module or a class that satisfies the following: + +* it has the attribute ``_cdist_preos`` set to ``True`` +* it defines a function/method ``commandline``. + +For a module-based preos subcommand, the ``commandline`` function accepts a +module object as its first argument and the list of command line +arguments (``sys.argv[2:]``). + +For a class-based preos subcommand ``commandline`` method should be +static-method and must accept a class as its first argument and the +list of command line arguments (``sys.argv[2:]``). + +If preos scanning finds a module/class that has ``_cdist_preos`` set +to ``True`` and a function/method ``commandline`` then this module/class is +registered to preos subcommands. The name of the command is set to ``_preos_name`` +attribute if defined in the module/class, defaulting to the module/class name in lowercase. +When a registered preos subcommand is specified, ``commandline`` +will be called with the first argument set to module/class and the second +argument set to ``sys.argv[2:]``. + +Example of writing new dummy preos sub-command +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Module-based preos: +^^^^^^^^^^^^^^^^^^^ + +#. Create directory ``~/.cdist/preos/`` if it does not exist +#. Create ``~/.cdist/preos/netbsd.py`` with the following contents: + +.. code-block:: python + + _preos_name = 'netbsd' + _cdist_preos = True + + def commandline(cls, args): + print("NetBSD PreOS: {}".format(args)) + +When you try to run this new preos you will get: + +.. code-block:: sh + + $ cdist preos -L + Available PreOS-es: + - debian + - devuan + - netbsd + - ubuntu + $ cdist preos netbsd + NetBSD PreOS: [] + +Class based preos: +^^^^^^^^^^^^^^^^^^ + +#. Create directory ``~/.cdist/preos/`` if it does not exist +#. Create ``~/.cdist/preos/freebsd.py`` with the following contents: + +.. code-block:: python + + class FreeBSD(object): + _cdist_preos = True + + @classmethod + def commandline(cls, args): + print("FreeBSD dummy preos: {}".format(args)) + +When you try to run this new preos you will get: + +.. code-block:: sh + + $ cdist preos -h + Available PreOS-es: + - debian + - devuan + - freebsd + - ubuntu + $ cdist preos freebsd + FreeBSD dummy preos: [] + +In the ``commandline`` function/method you have all the freedom to actually create +a PreOS. diff --git a/src/extra/manual/6.7.0/_sources/cdist-quickstart.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-quickstart.rst.txt new file mode 100644 index 00000000..99af869f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-quickstart.rst.txt @@ -0,0 +1,77 @@ +Quickstart +========== + +This tutorial is aimed at people learning cdist and shows +typical approaches as well as gives an easy start into +the world of configuration management. + +For those who just want to configure a system with the +cdist configuration management and do not need (or want) +to understand everything. + +This tutorial assumes you are configuring **localhost**, because +it is always available. Just replace **localhost** with your target +host for real life usage. + +Cdist uses **ssh** for communication and transportation +and usually logs into the **target host** as the +**root** user. So you need to configure the **ssh server** +of the target host to allow root logins: Edit +the file **/etc/ssh/sshd_config** and add one of the following +lines:: + + # Allow login only via public key + PermitRootLogin without-password + + # Allow login via password and public key + PermitRootLogin yes + +As cdist uses ssh intensively, it is recommended to setup authentication +with public keys:: + + # Generate pubkey pair as a normal user + ssh-keygen + + # Copy pubkey over to target host + ssh-copy-id root@localhost + +Have a look at ssh-agent(1) and ssh-add(1) on how to cache the password for +your public key. Usually it looks like this:: + + # Start agent and export variables + eval `ssh-agent` + + # Add keys (requires password for every identity file) + ssh-add + +At this point you should be able to **ssh root@localhost** without +re-entering the password. If something failed until here, ensure that +all steps went successfully and you have read and understood the +documentation. + +As soon as you are able to login without password to localhost, +we can use cdist to configure it. You can copy and paste the following +code into your shell to get started and configure localhost:: + + # Get cdist + git clone git@code.ungleich.ch:ungleich-public/cdist.git + + # Create manifest (maps configuration to host(s) + cd cdist + echo '__file /etc/cdist-configured' > cdist/conf/manifest/init + + # Configure localhost in verbose mode + ./bin/cdist config -v localhost + + # Find out that cdist created /etc/cdist-configured + ls -l /etc/cdist-configured + +Note: cdist/conf is configuration directory shipped with cdist distribution. +If exists, ~/.cdist, is also automatically used as cdist configuration +directory. So in the above example you could create ~/.cdist directory, +then ~/.cdist/manifest sub-directory and create init manifest +~/.cdist/manifest/init. + +That's it, you've successfully used cdist to configure your first host! +Continue reading the next sections, to understand what you did and how +to create a more sophisticated configuration. diff --git a/src/extra/manual/6.7.0/_sources/cdist-real-world.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-real-world.rst.txt new file mode 100644 index 00000000..973dcd6d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-real-world.rst.txt @@ -0,0 +1,573 @@ +Dive into real world cdist +========================== + +Introduction +------------ + +This walkthrough shows real world cdist configuration example. + +Sample target host is named **test.ungleich.ch**. +Just replace **test.ungleich.ch** with your target hostname. + +Our goal is to configure python application hosting. For writing sample +application we will use `Bottle `_ WSGI micro web-framework. +It will use PostgreSQL database and it will list items from **items** table. +It will be served by uWSGI server. We will also use the Nginx web server +as a reverse proxy and we want HTTPS. +For HTTPS we will use Let's Encrypt certificate. + +For setting up hosting we want to use cdist so we will write a new type +for that. This type will: + +- install required packages +- create OS user, user home directory and application home directory +- create PostgreSQL database +- configure uWSGI +- configure Let's Encrypt certificate +- configure nginx. + +Our type will not create the actual python application. Its intention is only +to configure hosting for specified user and project. It is up to the user to +create his/her applications. + +So let's start. + +Creating type layout +-------------------- + +We will create a new custom type. Let's call it **__sample_bottle_hosting**. + +Go to **~/.cdist/type** directory (create it if it does not exist) and create +new type layout:: + + cd ~/.cdist/type + mkdir __sample_bottle_hosting + cd __sample_bottle_hosting + touch manifest gencode-remote + mkdir parameter + touch parameter/required + +Creating __sample_bottle_hosting type parameters +------------------------------------------------ + +Our type will be configurable through the means of parameters. Let's define +the following parameters: + +projectname + name for the project, needed for uWSGI ini file + +user + user name + +domain + target host domain, needed for Let's Encrypt certificate. + +We define parameters to make our type reusable for different projects, user and domain. + +Define required parameters:: + + printf "projectname\n" >> parameter/required + printf "user\n" >> parameter/required + printf "domain\n" >> parameter/required + +For details on type parameters see `Defining parameters `_. + +Creating __sample_bottle_hosting type manifest +---------------------------------------------- + +Next step is to define manifest (~/.cdist/type/__sample_bottle_hosting/manifest). +We also want our type to currently support only Devuan. So we will start by +checking target host OS. We will use `os `_ +global explorer:: + + os=$(cat "$__global/explorer/os") + + case "$os" in + devuan) + : + ;; + *) + echo "OS $os currently not supported" >&2 + exit 1 + ;; + esac + +If target host OS is not Devuan then we print error message to stderr +and exit. For other OS-es support we should check and change package names +we should install, because packages differ in different OS-es and in different +OS distributions like GNU/Linux distributions. There can also be a different +configuration locations (e.g. nginx config directory could be in /usr/local tree). +If we detected unsupported OS we should error out. cdist will stop configuration +process and output error message. + +Creating user and user directories +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Then we create user and his/her home directory and application home directory. +We will use existing cdist types `__user `_ and `__directory `_:: + + user="$(cat "$__object/parameter/user")" + home="/home/$user" + apphome="$home/app" + + # create user + __user "$user" --home "$home" --shell /bin/bash + # create user home dir + require="__user/$user" __directory "$home" \ + --owner "$user" --group "$user" --mode 0755 + # create app home dir + require="__user/$user __directory/$home" __directory "$apphome" \ + --state present --owner "$user" --group "$user" --mode 0755 + +First we define *user*, *home* and *apphome* variables. User is defined by type's +**user** parameter. Here we use **require** which is cdist's way to define dependencies. +User home directory should be created **after** user is created. And application +home directory is created **after** both user and user home directory are created. +For details on **require** see `Dependencies `_. + +Installing packages +~~~~~~~~~~~~~~~~~~~ + +Install required packages using existing `__package `_ type. +Before installing package we want to update apt package index using +`__apt_update_index `_:: + + # define packages that need to be installed + packages_to_install="nginx uwsgi-plugin-python3 python3-dev python3-pip postgresql postgresql-contrib libpq-dev python3-venv uwsgi python3-psycopg2" + + # update package index + __apt_update_index + # install packages + for package in $packages_to_install + do require="__apt_update_index" __package $package --state=present + done + +Here we use shell for loop. It executes **require="__apt_update_index" __package** +for each member in a list we define in **packages_to_install** variable. +This is much nicer then having as many **require="__apt_update_index" __package** +lines as there are packages we want to install. + +For python packages we use `__package_pip `_:: + + # install pip3 packages + for package in bottle bottle-pgsql; do + __package_pip --pip pip3 $package + done + +Creating PostgreSQL database +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Create PostgreSQL database using `__postgres_database `_ +and `__postgres_role `_ for creating database user:: + + #PostgreSQL db & user + postgres_server=postgresql + + # create PostgreSQL db user + require="__package/postgresql" __postgres_role $user --login --createdb + # create PostgreSQL db + require="__postgres_role/$user __package/postgresql" __postgres_database $user \ + --owner $user + +Configuring uWSGI +~~~~~~~~~~~~~~~~~ + +Configure uWSGI using `__file `_ type:: + + # configure uWSGI + projectname="$(cat "$__object/parameter/projectname")" + require="__package/uwsgi" __file /etc/uwsgi/apps-enabled/$user.ini \ + --owner root --group root --mode 0644 \ + --state present \ + --source - << EOF + [uwsgi] + socket = $apphome/uwsgi.sock + chdir = $apphome + wsgi-file = $projectname/wsgi.py + touch-reload = $projectname/wsgi.py + processes = 4 + threads = 2 + chmod-socket = 666 + daemonize=true + vacuum = true + uid = $user + gid = $user + EOF + +We require package uWSGI present in order to create **/etc/uwsgi/apps-enabled/$user.ini** file. +Installation of uWSGI also creates configuration layout: **/etc/uwsgi/apps-enabled**. +If this directory does not exist then **__file** type would error. +We also use stdin as file content source. For details see `Input from stdin `_. +For feeding stdin we use here-document (**<<** operator). It allows redirection of subsequent +lines read by the shell to the input of a command until a line containing only the delimiter +and a newline, with no blank characters in between (EOF in our case). + +Configuring nginx for Let's Encrypt and HTTPS redirection +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Next configure nginx for Let's Encrypt and for HTTP -> HTTPS redirection. For this +purpose we will create new type **__sample_nginx_http_letsencrypt_and_ssl_redirect** +and use it here:: + + domain="$(cat "$__object/parameter/domain")" + webroot="/var/www/html" + __sample_nginx_http_letsencrypt_and_ssl_redirect "$domain" --webroot "$webroot" + +Configuring certificate creation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +After HTTP nginx configuration we will create Let's Encrypt certificate using +`__letsencrypt_cert `_ type. +For Let's Encrypt cert configuration ensure that there is a DNS entry for your +domain. We assure that cert creation is applied after nginx HTTP is configured +for Let's Encrypt to work:: + + # create SSL cert + require="__package/nginx __sample_nginx_http_letsencrypt_and_ssl_redirect/$domain" \ + __letsencrypt_cert --admin-email admin@test.ungleich.ch \ + --webroot "$webroot" \ + --automatic-renewal \ + --renew-hook "service nginx reload" \ + --domain "$domain" \ + "$domain" + +Configuring nginx HTTPS server with uWSGI upstream +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Then we can configure nginx HTTPS server that will use created Let's Encrypt certificate:: + + # configure nginx + require="__package/nginx __letsencrypt_cert/$domain" \ + __file "/etc/nginx/sites-enabled/https-$domain" \ + --source - --mode 0644 << EOF + upstream _bottle { + server unix:$apphome/uwsgi.sock; + } + + server { + listen 443; + listen [::]:443; + + server_name $domain; + + access_log /var/log/nginx/access.log; + + ssl on; + ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem; + + client_max_body_size 256m; + + location / { + try_files \$uri @uwsgi; + } + + location @uwsgi { + include uwsgi_params; + uwsgi_pass _bottle; + } + } + EOF + +Now our manifest is finished. + +Complete __sample_bottle_hosting type manifest listing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Here is complete __sample_bottle_hosting type manifest listing, +located in ~/.cdist/type/__sample_bottle_hosting/manifest:: + + #!/bin/sh + + os=$(cat "$__global/explorer/os") + + case "$os" in + devuan) + : + ;; + *) + echo "OS $os currently not supported" >&2 + exit 1 + ;; + esac + + projectname="$(cat "$__object/parameter/projectname")" + user="$(cat "$__object/parameter/user")" + home="/home/$user" + apphome="$home/app" + domain="$(cat "$__object/parameter/domain")" + + # create user + __user "$user" --home "$home" --shell /bin/bash + # create user home dir + require="__user/$user" __directory "$home" \ + --owner "$user" --group "$user" --mode 0755 + # create app home dir + require="__user/$user __directory/$home" __directory "$apphome" \ + --state present --owner "$user" --group "$user" --mode 0755 + + # define packages that need to be installed + packages_to_install="nginx uwsgi-plugin-python3 python3-dev python3-pip postgresql postgresql-contrib libpq-dev python3-venv uwsgi python3-psycopg2" + + # update package index + __apt_update_index + # install packages + for package in $packages_to_install + do require="__apt_update_index" __package $package --state=present + done + # install pip3 packages + for package in bottle bottle-pgsql; do + __package_pip --pip pip3 $package + done + + #PostgreSQL db & user + postgres_server=postgresql + + # create PostgreSQL db user + require="__package/postgresql" __postgres_role $user --login --createdb + # create PostgreSQL db + require="__postgres_role/$user __package/postgresql" __postgres_database $user \ + --owner $user + # configure uWSGI + require="__package/uwsgi" __file /etc/uwsgi/apps-enabled/$user.ini \ + --owner root --group root --mode 0644 \ + --state present \ + --source - << EOF + [uwsgi] + socket = $apphome/uwsgi.sock + chdir = $apphome + wsgi-file = $projectname/wsgi.py + touch-reload = $projectname/wsgi.py + processes = 4 + threads = 2 + chmod-socket = 666 + daemonize=true + vacuum = true + uid = $user + gid = $user + EOF + + # setup nginx HTTP for Let's Encrypt and SSL redirect + domain="$(cat "$__object/parameter/domain")" + webroot="/var/www/html" + __sample_nginx_http_letsencrypt_and_ssl_redirect "$domain" --webroot "$webroot" + + # create SSL cert + require="__package/nginx __sample_nginx_http_letsencrypt_and_ssl_redirect/$domain" \ + __letsencrypt_cert --admin-email admin@test.ungleich.ch \ + --webroot "$webroot" \ + --automatic-renewal \ + --renew-hook "service nginx reload" \ + --domain "$domain" \ + "$domain" + + # configure nginx + require="__package/nginx __letsencrypt_cert/$domain" \ + __file "/etc/nginx/sites-enabled/https-$domain" \ + --source - --mode 0644 << EOF + upstream _bottle { + server unix:$apphome/uwsgi.sock; + } + + server { + listen 443; + listen [::]:443; + + server_name $domain; + + access_log /var/log/nginx/access.log; + + ssl on; + ssl_certificate /etc/letsencrypt/live/$domain/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/$domain/privkey.pem; + + client_max_body_size 256m; + + location / { + try_files \$uri @uwsgi; + } + + location @uwsgi { + include uwsgi_params; + uwsgi_pass _bottle; + } + } + EOF + +Creating __sample_bottle_hosting type gencode-remote +---------------------------------------------------- + +Now define **gencode-remote** script: ~/.cdist/type/__sample_bottle_hosting/gencode-remote. +After manifest is applied it should restart uWSGI and nginx services so that our +configuration is active. Our gencode-remote looks like the following:: + + echo "service uwsgi restart" + echo "service nginx restart" + +Our **__sample_bottle_hosting** type is now finished. + +Creating __sample_nginx_http_letsencrypt_and_ssl_redirect type +-------------------------------------------------------------- + +Let's now create **__sample_nginx_http_letsencrypt_and_ssl_redirect** type:: + + cd ~/.cdist/type + mkdir __sample_nginx_http_letsencrypt_and_ssl_redirect + cd __sample_nginx_http_letsencrypt_and_ssl_redirect + mkdir parameter + echo webroot > parameter/required + touch manifest + touch gencode-remote + +Edit manifest:: + + domain="$__object_id" + webroot="$(cat "$__object/parameter/webroot")" + # make sure we have nginx package + __package nginx + # setup Let's Encrypt HTTP acme challenge, redirect HTTP to HTTPS + require="__package/nginx" __file "/etc/nginx/sites-enabled/http-$domain" \ + --source - --mode 0644 << EOF + server { + listen *:80; + listen [::]:80; + + server_name $domain; + + # Let's Encrypt + location /.well-known/acme-challenge/ { + root $webroot; + } + + # Everything else -> SSL + location / { + return 301 https://\$host\$request_uri; + } + } + + EOF + +Edit gencode-remote:: + + echo "service nginx reload" + +Creating init manifest +---------------------- + +Next create init manifest:: + + cd ~/.cdist/manifest + printf "__sample_bottle_hosting --projectname sample --user app --domain \$__target_host sample\n" > sample + +Using this init manifest our target host will be configured using our **__sample_bottle_hosting** +type with projectname *sample*, user *app* and domain equal to **__target_host**. +Here the last positional argument *sample* is type's object id. For details on +**__target_host** and **__object_id** see +`Environment variables (for reading) `_ +reference. + +Configuring host +---------------- + +Finally configure test.ungleich.ch:: + + cdist config -v -i ~/.cdist/manifest/sample test.ungleich.ch + +After cdist configuration is successfully finished our host is ready. + +Creating python bottle application +---------------------------------- + +We now need to create Bottle application. As you remember from the beginning +of this walkthrough our type does not create the actual python application, +its intention is only to configure hosting for specified user and project. +It is up to the user to create his/her applications. + +Become app user:: + + su -l app + +Preparing database +~~~~~~~~~~~~~~~~~~ + +We need to prepare database for our application. Create table and +insert some items:: + + psql -c "create table items (item varchar(255));" + + psql -c "insert into items(item) values('spam');" + psql -c "insert into items(item) values('eggs');" + psql -c "insert into items(item) values('sausage');" + +Creating application +~~~~~~~~~~~~~~~~~~~~ + +Next create sample app:: + + cd /home/app/app + mkdir sample + cd sample + +Create app.py with the following content:: + + #!/usr/bin/env python3 + + import bottle + import bottle_pgsql + + app = application = bottle.Bottle() + plugin = bottle_pgsql.Plugin('dbname=app user=app password=') + app.install(plugin) + + @app.route('/') + def show_index(db): + db.execute('select * from items') + items = db.fetchall() or [] + rv = '

Items:

    ' + for item in items: + rv += '
  • ' + str(item['item']) + '
  • ' + rv += '
' + return rv + + if __name__ == '__main__': + bottle.run(app=app, host='0.0.0.0', port=8080) + +Create wsgi.py with the following content:: + + import os + + os.chdir(os.path.dirname(__file__)) + + import app + application = app.app + +We have configured uWSGI with **touch-reload = $projectname/wsgi.py** so after +we have changed our **wsgi.py** file uWSGI reloads the application. + +Our application selects and lists items from **items** table. + +Opening application +~~~~~~~~~~~~~~~~~~~~ + +Finally try the application:: + + http://test.ungleich.ch/ + +It should redirect to HTTPS and return: + +.. container:: highlight + + .. raw:: html + +

Items:

+ +
    +
  • spam
  • +
  • eggs
  • +
  • sausage
  • +
+ +What's next? +------------ + +Continue reading next sections ;) diff --git a/src/extra/manual/6.7.0/_sources/cdist-reference.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-reference.rst.txt new file mode 100644 index 00000000..5dce47fd --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-reference.rst.txt @@ -0,0 +1,496 @@ +Reference +========= +Variable, path and type reference for cdist + +Explorers +--------- +The following global explorers are available: + +- cpu_cores +- cpu_sockets +- disks +- hostname +- init +- interfaces +- is-freebsd-jail +- kernel_name +- lsb_codename +- lsb_description +- lsb_id +- lsb_release +- machine +- machine_type +- memory +- os +- os_release +- os_version +- runlevel + +Paths +----- +$HOME/.cdist + The standard cdist configuration directory relative to your home directory. + This is usually the place you want to store your site specific configuration. + +cdist/conf/ + The distribution configuration directory. + This contains types and explorers to be used. + +cdist/inventory/ + The distribution inventory directory. + This path is relative to cdist installation directory. + +cdist/preos/ + The distribution PreOS plugins directory. + +confdir + Cdist will use all available configuration directories and create + a temporary confdir containing links to the real configuration directories. + This way it is possible to merge configuration directories. + By default it consists of everything in $HOME/.cdist and cdist/conf/. + For more details see cdist(1). + +confdir/files/ + Cdist does not care about this directory besides providing access to it. + It is thought to be a general file storage area. + +confdir/manifest/init + This is the central entry point. + It is an executable (+x bit set) shell script that can use + values from the explorers to decide which configuration to create + for the specified target host. + Its intent is to used to define mapping from configurations to hosts. + +confdir/manifest/* + All other files in this directory are not directly used by cdist, but you + can separate configuration mappings, if you have a lot of code in the + conf/manifest/init file. This may also be helpful to have different admins + maintain different groups of hosts. + +confdir/explorer/ + Contains explorers to be run on the target hosts, see `cdist explorer `_. + +confdir/type/ + Contains all available types, which are used to provide + some kind of functionality. See `cdist type `_. + +confdir/type// + Home of the type . + This directory is referenced by the variable __type (see below). + +confdir/type//man.rst + Manpage in reStructuredText format (required for inclusion into upstream). + +confdir/type//manifest + Used to generate additional objects from a type. + +confdir/type//gencode-local + Used to generate code to be executed on the source host. + +confdir/type//gencode-remote + Used to generate code to be executed on the target host. + +confdir/type//parameter/required + Parameters required by type, \n separated list. + +confdir/type//parameter/optional + Parameters optionally accepted by type, \n separated list. + +confdir/type//parameter/default/* + Default values for optional parameters. + Assuming an optional parameter name of 'foo', it's default value would + be read from the file confdir/type//parameter/default/foo. + +confdir/type//parameter/boolean + Boolean parameters accepted by type, \n separated list. + +confdir/type//explorer + Location of the type specific explorers. + This directory is referenced by the variable __type_explorer (see below). + See `cdist explorer `_. + +confdir/type//files + This directory is reserved for user data and will not be used + by cdist at any time. It can be used for storing supplementary + files (like scripts to act as a template or configuration files). + +out/ + This directory contains output of cdist and is usually located + in a temporary directory and thus will be removed after the run. + This directory is referenced by the variable __global (see below). + +out/explorer + Output of general explorers. + +out/object + Objects created for the host. + +out/object/ + Contains all object specific information. + This directory is referenced by the variable __object (see below). + +out/object//explorers + Output of type specific explorers, per object. + +Types +----- +The following types are available: + +- __acl (`cdist-type__acl(7) `_) +- __apt_default_release (`cdist-type__apt_default_release(7) `_) +- __apt_key (`cdist-type__apt_key(7) `_) +- __apt_key_uri (`cdist-type__apt_key_uri(7) `_) +- __apt_mark (`cdist-type__apt_mark(7) `_) +- __apt_norecommends (`cdist-type__apt_norecommends(7) `_) +- __apt_ppa (`cdist-type__apt_ppa(7) `_) +- __apt_source (`cdist-type__apt_source(7) `_) +- __apt_unattended_upgrades (`cdist-type__apt_unattended_upgrades(7) `_) +- __apt_update_index (`cdist-type__apt_update_index(7) `_) +- __block (`cdist-type__block(7) `_) +- __ccollect_source (`cdist-type__ccollect_source(7) `_) +- __cdist (`cdist-type__cdist(7) `_) +- __cdistmarker (`cdist-type__cdistmarker(7) `_) +- __check_messages (`cdist-type__check_messages(7) `_) +- __chroot_mount (`cdist-type__chroot_mount(7) `_) +- __chroot_umount (`cdist-type__chroot_umount(7) `_) +- __clean_path (`cdist-type__clean_path(7) `_) +- __config_file (`cdist-type__config_file(7) `_) +- __consul (`cdist-type__consul(7) `_) +- __consul_agent (`cdist-type__consul_agent(7) `_) +- __consul_check (`cdist-type__consul_check(7) `_) +- __consul_reload (`cdist-type__consul_reload(7) `_) +- __consul_service (`cdist-type__consul_service(7) `_) +- __consul_template (`cdist-type__consul_template(7) `_) +- __consul_template_template (`cdist-type__consul_template_template(7) `_) +- __consul_watch_checks (`cdist-type__consul_watch_checks(7) `_) +- __consul_watch_event (`cdist-type__consul_watch_event(7) `_) +- __consul_watch_key (`cdist-type__consul_watch_key(7) `_) +- __consul_watch_keyprefix (`cdist-type__consul_watch_keyprefix(7) `_) +- __consul_watch_nodes (`cdist-type__consul_watch_nodes(7) `_) +- __consul_watch_service (`cdist-type__consul_watch_service(7) `_) +- __consul_watch_services (`cdist-type__consul_watch_services(7) `_) +- __cron (`cdist-type__cron(7) `_) +- __daemontools (`cdist-type__daemontools(7) `_) +- __daemontools_service (`cdist-type__daemontools_service(7) `_) +- __debconf_set_selections (`cdist-type__debconf_set_selections(7) `_) +- __directory (`cdist-type__directory(7) `_) +- __docker (`cdist-type__docker(7) `_) +- __docker_compose (`cdist-type__docker_compose(7) `_) +- __docker_config (`cdist-type__docker_config(7) `_) +- __docker_secret (`cdist-type__docker_secret(7) `_) +- __docker_stack (`cdist-type__docker_stack(7) `_) +- __docker_swarm (`cdist-type__docker_swarm(7) `_) +- __dog_vdi (`cdist-type__dog_vdi(7) `_) +- __dot_file (`cdist-type__dot_file(7) `_) +- __download (`cdist-type__download(7) `_) +- __file (`cdist-type__file(7) `_) +- __filesystem (`cdist-type__filesystem(7) `_) +- __firewalld_rule (`cdist-type__firewalld_rule(7) `_) +- __firewalld_start (`cdist-type__firewalld_start(7) `_) +- __git (`cdist-type__git(7) `_) +- __go_get (`cdist-type__go_get(7) `_) +- __golang_from_vendor (`cdist-type__golang_from_vendor(7) `_) +- __grafana_dashboard (`cdist-type__grafana_dashboard(7) `_) +- __group (`cdist-type__group(7) `_) +- __hostname (`cdist-type__hostname(7) `_) +- __hosts (`cdist-type__hosts(7) `_) +- __install_bootloader_grub (`cdist-type__install_bootloader_grub(7) `_) +- __install_chroot_mount (`cdist-type__install_chroot_mount(7) `_) +- __install_chroot_umount (`cdist-type__install_chroot_umount(7) `_) +- __install_config (`cdist-type__install_config(7) `_) +- __install_coreos (`cdist-type__install_coreos(7) `_) +- __install_directory (`cdist-type__install_directory(7) `_) +- __install_file (`cdist-type__install_file(7) `_) +- __install_fstab (`cdist-type__install_fstab(7) `_) +- __install_generate_fstab (`cdist-type__install_generate_fstab(7) `_) +- __install_mkfs (`cdist-type__install_mkfs(7) `_) +- __install_mount (`cdist-type__install_mount(7) `_) +- __install_partition_msdos (`cdist-type__install_partition_msdos(7) `_) +- __install_partition_msdos_apply (`cdist-type__install_partition_msdos_apply(7) `_) +- __install_reboot (`cdist-type__install_reboot(7) `_) +- __install_reset_disk (`cdist-type__install_reset_disk(7) `_) +- __install_stage (`cdist-type__install_stage(7) `_) +- __install_umount (`cdist-type__install_umount(7) `_) +- __iptables_apply (`cdist-type__iptables_apply(7) `_) +- __iptables_rule (`cdist-type__iptables_rule(7) `_) +- __issue (`cdist-type__issue(7) `_) +- __jail (`cdist-type__jail(7) `_) +- __jail_freebsd10 (`cdist-type__jail_freebsd10(7) `_) +- __jail_freebsd9 (`cdist-type__jail_freebsd9(7) `_) +- __key_value (`cdist-type__key_value(7) `_) +- __keyboard (`cdist-type__keyboard(7) `_) +- __letsencrypt_cert (`cdist-type__letsencrypt_cert(7) `_) +- __line (`cdist-type__line(7) `_) +- __link (`cdist-type__link(7) `_) +- __locale (`cdist-type__locale(7) `_) +- __locale_system (`cdist-type__locale_system(7) `_) +- __motd (`cdist-type__motd(7) `_) +- __mount (`cdist-type__mount(7) `_) +- __mysql_database (`cdist-type__mysql_database(7) `_) +- __mysql_privileges (`cdist-type__mysql_privileges(7) `_) +- __mysql_user (`cdist-type__mysql_user(7) `_) +- __openldap_server (`cdist-type__openldap_server(7) `_) +- __package (`cdist-type__package(7) `_) +- __package_apk (`cdist-type__package_apk(7) `_) +- __package_apt (`cdist-type__package_apt(7) `_) +- __package_dpkg (`cdist-type__package_dpkg(7) `_) +- __package_emerge (`cdist-type__package_emerge(7) `_) +- __package_emerge_dependencies (`cdist-type__package_emerge_dependencies(7) `_) +- __package_luarocks (`cdist-type__package_luarocks(7) `_) +- __package_opkg (`cdist-type__package_opkg(7) `_) +- __package_pacman (`cdist-type__package_pacman(7) `_) +- __package_pip (`cdist-type__package_pip(7) `_) +- __package_pkg_freebsd (`cdist-type__package_pkg_freebsd(7) `_) +- __package_pkg_openbsd (`cdist-type__package_pkg_openbsd(7) `_) +- __package_pkgng_freebsd (`cdist-type__package_pkgng_freebsd(7) `_) +- __package_rubygem (`cdist-type__package_rubygem(7) `_) +- __package_update_index (`cdist-type__package_update_index(7) `_) +- __package_upgrade_all (`cdist-type__package_upgrade_all(7) `_) +- __package_yum (`cdist-type__package_yum(7) `_) +- __package_zypper (`cdist-type__package_zypper(7) `_) +- __pacman_conf (`cdist-type__pacman_conf(7) `_) +- __pacman_conf_integrate (`cdist-type__pacman_conf_integrate(7) `_) +- __pf_apply_anchor (`cdist-type__pf_apply_anchor(7) `_) +- __pf_ruleset (`cdist-type__pf_ruleset(7) `_) +- __ping (`cdist-type__ping(7) `_) +- __postfix (`cdist-type__postfix(7) `_) +- __postfix_master (`cdist-type__postfix_master(7) `_) +- __postfix_postconf (`cdist-type__postfix_postconf(7) `_) +- __postfix_postmap (`cdist-type__postfix_postmap(7) `_) +- __postfix_reload (`cdist-type__postfix_reload(7) `_) +- __postgres_database (`cdist-type__postgres_database(7) `_) +- __postgres_extension (`cdist-type__postgres_extension(7) `_) +- __postgres_role (`cdist-type__postgres_role(7) `_) +- __process (`cdist-type__process(7) `_) +- __prometheus_alertmanager (`cdist-type__prometheus_alertmanager(7) `_) +- __prometheus_exporter (`cdist-type__prometheus_exporter(7) `_) +- __prometheus_server (`cdist-type__prometheus_server(7) `_) +- __pyvenv (`cdist-type__pyvenv(7) `_) +- __qemu_img (`cdist-type__qemu_img(7) `_) +- __rbenv (`cdist-type__rbenv(7) `_) +- __rsync (`cdist-type__rsync(7) `_) +- __rvm (`cdist-type__rvm(7) `_) +- __rvm_gem (`cdist-type__rvm_gem(7) `_) +- __rvm_gemset (`cdist-type__rvm_gemset(7) `_) +- __rvm_ruby (`cdist-type__rvm_ruby(7) `_) +- __sensible_editor (`cdist-type__sensible_editor(7) `_) +- __service (`cdist-type__service(7) `_) +- __ssh_authorized_key (`cdist-type__ssh_authorized_key(7) `_) +- __ssh_authorized_keys (`cdist-type__ssh_authorized_keys(7) `_) +- __ssh_dot_ssh (`cdist-type__ssh_dot_ssh(7) `_) +- __staged_file (`cdist-type__staged_file(7) `_) +- __start_on_boot (`cdist-type__start_on_boot(7) `_) +- __sysctl (`cdist-type__sysctl(7) `_) +- __systemd_service (`cdist-type__systemd_service(7) `_) +- __systemd_unit (`cdist-type__systemd_unit(7) `_) +- __timezone (`cdist-type__timezone(7) `_) +- __ufw (`cdist-type__ufw(7) `_) +- __ufw_rule (`cdist-type__ufw_rule(7) `_) +- __unpack (`cdist-type__unpack(7) `_) +- __update_alternatives (`cdist-type__update_alternatives(7) `_) +- __user (`cdist-type__user(7) `_) +- __user_groups (`cdist-type__user_groups(7) `_) +- __xymon_apache (`cdist-type__xymon_apache(7) `_) +- __xymon_client (`cdist-type__xymon_client(7) `_) +- __xymon_config (`cdist-type__xymon_config(7) `_) +- __xymon_server (`cdist-type__xymon_server(7) `_) +- __yum_repo (`cdist-type__yum_repo(7) `_) +- __zypper_repo (`cdist-type__zypper_repo(7) `_) +- __zypper_service (`cdist-type__zypper_service(7) `_) + + +Objects +------- +For object to object communication and tests, the following paths are +usable within a object directory: + +files + This directory is reserved for user data and will not be used + by cdist at any time. It can be used freely by the type + (for instance to store template results). +changed + This empty file exists in an object directory, if the object has + code to be executed (either remote or local). +stdin + This file exists and contains data, if data was provided on stdin + when the type was called. + + +Environment variables (for reading) +----------------------------------- +The following environment variables are exported by cdist: + +__cdist_log_level, __cdist_log_level_name + cdist log level value and cdist log level name. One of: + + +----------------+-----------------+ + | Log level name | Log level value | + +================+=================+ + | OFF | 60 | + +----------------+-----------------+ + | ERROR | 40 | + +----------------+-----------------+ + | WARNING | 30 | + +----------------+-----------------+ + | INFO | 20 | + +----------------+-----------------+ + | VERBOSE | 15 | + +----------------+-----------------+ + | DEBUG | 10 | + +----------------+-----------------+ + | TRACE | 5 | + +----------------+-----------------+ + + Available for: initial manifest, explorer, type manifest, type explorer, + type gencode. +__cdist_colored_log + whether or not cdist's log has colors enabled. + Is set to the string true if cdist's output is using colors, + otherwise the variable contains the string false. + + Available for: initial manifest, explorer, type manifest, type explorer, + type gencode. +__cdist_dry_run + Is set only when doing dry run (-n flag). + + Available for: initial manifest, explorer, type manifest, type explorer, + type gencode. +__explorer + Directory that contains all global explorers. + + Available for: initial manifest, explorer, type explorer, shell. +__files + Directory that contains content from the "files" subdirectories + from the configuration directories. + + Available for: initial manifest, type manifest, type gencode, shell. +__manifest + Directory that contains the initial manifest. + + Available for: initial manifest, type manifest, shell. +__global + Directory that contains generic output like explorer. + + Available for: initial manifest, type manifest, type gencode, shell. +__messages_in + File to read messages from. + + Available for: initial manifest, type manifest, type gencode. +__messages_out + File to write messages. + + Available for: initial manifest, type manifest, type gencode. +__object + Directory that contains the current object. + + Available for: type manifest, type explorer, type gencode and code scripts. +__object_id + The type unique object id. + + Available for: type manifest, type explorer, type gencode and code scripts. + + | Note: The leading and the trailing "/" will always be stripped (caused by + the filesystem database and ensured by the core). + | Note: Double slashes ("//") will not be fixed and result in an error. +__object_name + The full qualified name of the current object. + + Available for: type manifest, type explorer, type gencode. +__target_host + The host we are deploying to. This is primary variable. It's content is + literally the one user passed in. + + Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. +__target_hostname + The hostname of host we are deploying to. This variable is derived from + **__target_host** (using **socket.getaddrinfo(__target_host)** and then + **socket.gethostbyaddr()**). + + Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. +__target_fqdn + The fully qualified domain name of the host we are deploying to. + This variable is derived from **__target_host** + (using **socket.getfqdn()**). + + Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. +__target_host_tags + Comma separated list of target host tags. + + Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell. +__type + Path to the current type. + + Available for: type manifest, type gencode. +__type_explorer + Directory that contains the type explorers. + + Available for: type explorer. + +Environment variables (for writing) +----------------------------------- +The following environment variables influence the behaviour of cdist: + +require + Setup dependencies between objects (see `cdist manifest `_). + +__cdist_log_level + cdist log level value. One of: + + +----------------+-----------------+ + | Log level | Log level value | + +================+=================+ + | OFF | 60 | + +----------------+-----------------+ + | ERROR | 40 | + +----------------+-----------------+ + | WARNING | 30 | + +----------------+-----------------+ + | INFO | 20 | + +----------------+-----------------+ + | VERBOSE | 15 | + +----------------+-----------------+ + | DEBUG | 10 | + +----------------+-----------------+ + | TRACE | 5 | + +----------------+-----------------+ + + If set cdist will set this log level in + accordance with configuration rules. If cdist invokation is used + in types then nested cdist will honor this specified log level if + not specified otherwise while invoking it. + +CDIST_PATH + Colon delimited list of config directories. + +CDIST_LOCAL_SHELL + Use this shell locally instead of /bin/sh to execute scripts. + +CDIST_REMOTE_SHELL + Use this shell remotely instead of /bin/sh to execute scripts. + +CDIST_OVERRIDE + Allow overwriting type parameters (see `cdist manifest `_). + +CDIST_ORDER_DEPENDENCY + Create dependencies based on the execution order (see `cdist manifest `_). + Note that in version 6.2.0 semantic of this processing mode is finally fixed and well defined. + +CDIST_REMOTE_EXEC + Use this command for remote execution (should behave like ssh). + +CDIST_REMOTE_COPY + Use this command for remote copy (should behave like scp). + +CDIST_INVENTORY_DIR + Use this directory as inventory directory. + +CDIST_BETA + Enable beta functionalities. + +CDIST_COLORED_OUTPUT + Colorize cdist's output. If enabled, cdist will use different colors for + different log levels. + Recognized values are 'always', 'never', and 'auto' (the default). + +CDIST_CACHE_PATH_PATTERN + Custom cache path pattern. diff --git a/src/extra/manual/6.7.0/_sources/cdist-remote-exec-copy.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-remote-exec-copy.rst.txt new file mode 100644 index 00000000..bb818310 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-remote-exec-copy.rst.txt @@ -0,0 +1,28 @@ +Remote exec and copy commands +============================= + +Cdist interacts with the target host in two ways: + +- it executes code (__remote_exec) +- and it copies files (__remote_copy) + +By default this is accomplished with ssh and scp respectively. +The default implementations used by cdist are:: + + __remote_exec: ssh -o User=root + __remote_copy: scp -o User=root + +The user can override these defaults by providing custom implementations and +passing them to cdist with the --remote-exec and/or --remote-copy arguments. + +For __remote_exec, the custom implementation must behave as if it where ssh. +For __remote_copy, it must behave like scp. +Please notice, custom implementations should work like ssh/scp so __remote_copy +must support IPv6 addresses enclosed in square brackets. For __remote_exec you +must take into account that for some options (like -L) IPv6 addresses can be +specified by enclosed in square brackets (see :strong:`ssh`\ (1) and +:strong:`scp`\ (1)). + +With this simple interface the user can take total control of how cdist +interacts with the target when required, while the default implementation +remains as simple as possible. diff --git a/src/extra/manual/6.7.0/_sources/cdist-saving-output-streams.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-saving-output-streams.rst.txt new file mode 100644 index 00000000..da66f754 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-saving-output-streams.rst.txt @@ -0,0 +1,88 @@ +Saving output streams +===================== + +Description +----------- +Since version 4.8.0 cdist, by default, saves output streams to local cache. +Saving output streams is implemented because important information was lost +during a config run, hidden in all other output. +Now all created output is bound to the context where it was produced. + +Saving output streams include stdout and stderr of init manifest, remote +commands and for each object stdout and stderr of manifest, gencode-\* and code-\*. +Output stream files are created only if some output is produced. For more info +on these cache files see `Local cache overview `_. + +Also, in case of an error, cdist can now exit and show all information it has +about the error. + +For example: + +.. code-block:: sh + + $ ./bin/cdist config -v -i ~/.cdist/manifest/init-output-streams $(cat ~/ungleich/data/opennebula-debian9-test ) + INFO: 185.203.112.42: Starting configuration run + INFO: 185.203.112.42: Processing __myline/test + ERROR: 185.203.112.42: Command failed: '/bin/sh -e /tmp/tmpow6cwemh/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-kisrqlpw/code-local' + return code: 1 + ---- BEGIN stdout ---- + ---- END stdout ---- + + Error processing object '__myline/test' + ======================================== + name: __myline/test + path: /tmp/tmpow6cwemh/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-kisrqlpw + source: /home/darko/.cdist/manifest/init-output-streams + type: /tmp/tmpow6cwemh/75ee6a79e32da093da23fe4a13dd104b/data/conf/type/__myline + + ---- BEGIN manifest:stderr ---- + myline manifest stderr + + ---- END manifest:stderr ---- + + ---- BEGIN gencode-remote:stderr ---- + test gencode-remote error + + ---- END gencode-remote:stderr ---- + + ---- BEGIN code-local:stderr ---- + error + + ---- END code-local:stderr ---- + + ERROR: cdist: Failed to configure the following hosts: 185.203.112.42 + +Upon successful run execution state is saved to local cache and temporary +directory is removed. +In case of an error temporary directory is not removed and can be further +discovered. + +There is also an option :strong:`-S/--disable-saving-output-streams` for +disabling saving output streams. In this case error reporting can look +like this: + +.. code-block:: sh + + $ ./bin/cdist config -v -S -i ~/.cdist/manifest/init-output-streams $(cat ~/ungleich/data/opennebula-debian9-test ) + INFO: 185.203.112.42: Starting configuration run + test stdout output streams + test stderr output streams + myline manifest stdout + myline manifest stderr + test gencode-remote error + INFO: 185.203.112.42: Processing __myline/test + error + ERROR: 185.203.112.42: Command failed: '/bin/sh -e /tmp/tmpzomy0wis/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-n566pqut/code-local' + return code: 1 + ---- BEGIN stdout ---- + ---- END stdout ---- + + Error processing object '__myline/test' + ======================================== + name: __myline/test + path: /tmp/tmpzomy0wis/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-n566pqut + source: /home/darko/.cdist/manifest/init-output-streams + type: /tmp/tmpzomy0wis/75ee6a79e32da093da23fe4a13dd104b/data/conf/type/__myline + + + ERROR: cdist: Failed to configure the following hosts: 185.203.112.42 diff --git a/src/extra/manual/6.7.0/_sources/cdist-stages.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-stages.rst.txt new file mode 100644 index 00000000..751ba9c7 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-stages.rst.txt @@ -0,0 +1,70 @@ +Execution stages +================ + +Description +----------- +When cdist is started, it passes through different stages. + + +Stage 1: target information retrieval +------------------------------------- +In this stage information is collected about the target host using so called +explorers. Every existing explorer is run on the target and the output of all +explorers are copied back into the local cache. The results can be used by +manifests and types. + + +Stage 2: run the initial manifest +--------------------------------- +The initial manifest, which should be used for mappings of hosts to types, +is executed. This stage creates objects in a cconfig database that contains +the objects as defined in the manifest for the specific host. In this stage, +no conflicts may occur, i.e. no object of the same type with the same id may +be created, if it has different parameters. + + +Stage 3: object information retrieval +------------------------------------- +Every object is checked whether its type has explorers and if so, these are +executed on the target host. The results are transferred back +and can be used in the following stages to decide what changes need to be made +on the target to implement the desired state. + + +Stage 4: run the object manifest +-------------------------------- +Every object is checked whether its type has a executable manifest. The +manifest script may generate and change the created objects. In other words, +one type can reuse other types. + +For instance the object __apache/www.example.org is of type __apache, which may +contain a manifest script, which creates new objects of type __file. + +The newly created objects are merged back into the existing tree. No conflicts +may occur during the merge. A conflict would mean that two different objects +try to create the same object, which indicates a broken configuration. + + +Stage 5: code generation +------------------------ +In this stage for every created object its type is checked for executable +gencode scripts. The gencode scripts generate the code to be executed on the +target on stdout. If the gencode executables fail, they must print diagnostic +messages on stderr and exit non-zero. + + +Stage 6: code execution +----------------------- +For every object the resulting code from the previous stage is transferred to +the target host and executed there to apply the configuration changes. + + +Stage 7: cache +-------------- +The cache stores the information from the current run for later use. + + +Summary +------- +If, and only if, all the stages complete without errors, the configuration +will be applied to the target. diff --git a/src/extra/manual/6.7.0/_sources/cdist-support.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-support.rst.txt new file mode 100644 index 00000000..f9f61f01 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-support.rst.txt @@ -0,0 +1,26 @@ +Support +------- + +Chat +~~~~ +Chat with us on `#cdist:ungleich.ch `_. + +Mailing list +~~~~~~~~~~~~ + +Bug reports, questions, patches, etc. should be send to the +`cdist mailing list `_. + +Linkedin +~~~~~~~~ + +If you have an account +at `Linked in `_, +you can join the +`cdist group `_. + +Commercial support +~~~~~~~~~~~~~~~~~~ + +You can request commercial support for cdist from +`ungleich `_. diff --git a/src/extra/manual/6.7.0/_sources/cdist-troubleshooting.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-troubleshooting.rst.txt new file mode 100644 index 00000000..e639aafd --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-troubleshooting.rst.txt @@ -0,0 +1,64 @@ +Troubleshooting +=============== + +Error in manifest is not considered an error by cdist +----------------------------------------------------- +Situation: You are executing other scripts from a manifest. +This script fails, but cdist does not recognise the error. +An example script would be something like this: + +.. code-block:: sh + + % cat ~/.cdist/manifest/init + "$__manifest/special" + % cat ~/.cdist/manifest/special + #!/bin/sh + echo "Here is an unclean exiting script" + somecommandthatdoesnotexist + echo "I continue here although previous command failed" + +We can clearly see that **somecommandthatdoesnotexist** +will fail in ~/.cdist/manifest/special. But as the custom +script is not called with the -e flag (exit on failure) of shell, +it does not lead to an error. And thus cdist sees the exit 0 +code of the last echo line instead of the failing command. + +All scripts executed by cdist carry the -e flag. +To prevent the above from happening, there are three solutions available, +two of which can be used in the calling script: + +.. code-block:: sh + + # Execute as before, but abort on failure + sh -e "$__manifest/special" + + # Source the script in our namespace, runs in a set -e environment: + . "$__manifest/special" + +The third solution is to include a shebang header in every script +you write to use the -e flag: + +.. code-block:: sh + + % cat ~/.cdist/manifest/special + #!/bin/sh -e + ... + +Using debug dump helper script +------------------------------ +Since cdist stores data to local cache that can be used for debugging there +is a helper script that dumps data from local cache, +`cdist-dump `_. + +For more info see: + +.. code-block:: sh + + cdist-dump -h + +Or from cdist git cloned directory: + +.. code-block:: sh + + ./scripts/cdist-dump -h + diff --git a/src/extra/manual/6.7.0/_sources/cdist-type.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-type.rst.txt new file mode 100644 index 00000000..582c0938 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-type.rst.txt @@ -0,0 +1,524 @@ +cdist type +========== + +Description +----------- +Types are the main component of cdist and define functionality. If you +use cdist, you'll write a type for every functionality you would like +to use. + +Synopsis +-------- + +.. code-block:: sh + + __TYPE ID --parameter value [--parameter value ...] + __TYPE --parameter value [--parameter value ...] (for singletons) + + +How to use a type +----------------- + +You can use types from the initial manifest or the type manifest like a +normal shell command: + +.. code-block:: sh + + # Creates empty file /etc/cdist-configured + __file /etc/cdist-configured --type file + + # Ensure tree is installed + __package tree --state installed + +A list of supported types can be found in the `cdist reference `_ manpage. + + +Singleton types +--------------- +If a type is flagged as a singleton, it may be used only +once per host. This is useful for types which can be used only once on a +system. Singleton types do not take an object name as argument. + + +Example: + +.. code-block:: sh + + # __issue type manages /etc/issue + __issue + + # Probably your own type - singletons may use parameters + __myfancysingleton --colour green + + +Config types +------------ +By default types are used with config command. These are types that are not +flagged by any known command flag. If a type is marked then it will be skipped +with config command. + + +Install types +------------- +If a type is flagged with 'install' flag then it is used only with install command. +With other commands, i.e. config, these types are skipped if used. + + +Nonparallel types +----------------- +If a type is flagged with 'nonparallel' flag then its objects cannot be run in parallel +when using -j option. Example of such a type is __package_dpkg type where dpkg itself +prevents to be run in more than one instance. + + +Deprecated types +----------------- +If a type is flagged with 'deprecated' marker then it is considered deprecated. +When it is used cdist writes warning line. If 'deprecated' marker has content +then this content is printed as a deprecation messages, e.g.: + +.. code-block:: sh + + $ ls -l deprecated + -rw-r--r-- 1 darko darko 71 May 20 18:30 deprecated + $ cat deprecated + This type is deprecated. It will be removed in the next minor release. + $ echo '__foo foo' | ./bin/cdist config -i - 185.203.112.26 + WARNING: 185.203.112.26: Type __foo is deprecated: This type is deprecated. It will be removed in the next minor release. + +If 'deprecated' marker has no content then general message is printed, e.g.: + +.. code-block:: sh + + $ ls -l deprecated + -rw-r--r-- 1 darko darko 0 May 20 18:36 deprecated + $ echo '__bar foo' | ./bin/cdist config -i - 185.203.112.26 + WARNING: 185.203.112.26: Type __bar is deprecated. + + +How to write a new type +----------------------- +A type consists of + +- parameter (optional) +- manifest (optional) +- singleton (optional) +- explorer (optional) +- gencode (optional) +- nonparallel (optional) + +Types are stored below cdist/conf/type/. Their name should always be prefixed with +two underscores (__) to prevent collisions with other executables in $PATH. + +To implement a new type, create the directory **cdist/conf/type/__NAME**. + +Type manifest and gencode can be written in any language. They just need to be +executable and have a proper shebang. If they are not executable then cdist assumes +they are written in shell so they are executed using '/bin/sh -e' or 'CDIST_LOCAL_SHELL'. + +For executable shell code it is suggested that shebang is '#!/bin/sh -e'. + +For creating type skeleton you can use helper script +`cdist-new-type `_. + + +Defining parameters +------------------- +Every type consists of required, optional and boolean parameters, which must +each be declared in a newline separated file in **parameter/required**, +**parameter/required_multiple**, **parameter/optional**, +**parameter/optional_multiple** and **parameter/boolean**. +Parameters which are allowed multiple times should be listed in +required_multiple or optional_multiple respectively. All other parameters +follow the standard unix behaviour "the last given wins". +If either is missing, the type will have no required, no optional, no boolean +or no parameters at all. + +Default values for optional parameters can be predefined in +**parameter/default/**. + +Example: + +.. code-block:: sh + + echo servername >> cdist/conf/type/__nginx_vhost/parameter/required + echo logdirectory >> cdist/conf/type/__nginx_vhost/parameter/optional + echo loglevel >> cdist/conf/type/__nginx_vhost/parameter/optional + mkdir cdist/conf/type/__nginx_vhost/parameter/default + echo warning > cdist/conf/type/__nginx_vhost/parameter/default/loglevel + echo server_alias >> cdist/conf/type/__nginx_vhost/parameter/optional_multiple + echo use_ssl >> cdist/conf/type/__nginx_vhost/parameter/boolean + + +Using parameters +---------------- +The parameters given to a type can be accessed and used in all type scripts +(e.g manifest, gencode, explorer). Note that boolean parameters are +represented by file existence. File exists -> True, +file does not exist -> False + +Example: (e.g. in cdist/conf/type/__nginx_vhost/manifest) + +.. code-block:: sh + + # required parameter + servername="$(cat "$__object/parameter/servername")" + + # optional parameter + if [ -f "$__object/parameter/logdirectory" ]; then + logdirectory="$(cat "$__object/parameter/logdirectory")" + fi + + # optional parameter with predefined default + loglevel="$(cat "$__object/parameter/loglevel")" + + # boolean parameter + if [ -f "$__object/parameter/use_ssl" ]; then + # file exists -> True + # do some fancy ssl stuff + fi + + # parameter with multiple values + if [ -f "$__object/parameter/server_alias" ]; then + for alias in $(cat "$__object/parameter/server_alias"); do + echo $alias > /some/where/useful + done + fi + + +Deprecated parameters +--------------------- +To deprecate type parameters one can declare a file for each deprecated +parameter under **parameter/deprecated** directory. + +When such parameter is used cdist writes warning line with deprecation message. +If such file has content then this content is printed as deprecation message. +If there is no content then generic parameter deprecation message is printed. + +Example: + +.. code-block:: sh + + $ ls parameter/deprecated/ + eggs spam + $ cat parameter/deprecated/eggs + eggs parameter is deprecated, please use multiple egg parameter. + $ cat parameter/deprecated/spam + $ echo '__foo foo --foo foo --eggs eggs' | ./bin/cdist config -i - 185.203.112.26 + WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated: eggs parameter is deprecated, please use multiple egg parameter. + $ echo '__foo foo --foo foo --eggs eggs --spam spam' | ./bin/cdist config -i - 185.203.112.26 + WARNING: 185.203.112.26: spam parameter of type __foo is deprecated. + WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated: eggs parameter is deprecated, please use multiple egg parameter. + + +Input from stdin +---------------- +Every type can access what has been written on stdin when it has been called. +The result is saved into the **stdin** file in the object directory. + +Example use of a type: (e.g. in cdist/conf/type/__archlinux_hostname) + +.. code-block:: sh + + __file /etc/rc.conf --source - << eof + ... + HOSTNAME="$__target_host" + ... + eof + +If you have not seen this syntax (<< eof) before, it may help you to read +about "here documents". + +In the __file type, stdin is used as source for the file, if - is used for source: + +.. code-block:: sh + + if [ -f "$__object/parameter/source" ]; then + source="$(cat "$__object/parameter/source")" + if [ "$source" = "-" ]; then + source="$__object/stdin" + fi + .... + + +Stdin inside a loop +~~~~~~~~~~~~~~~~~~~ +Since cdist saves type's stdin content in the object as **$__object/stdin**, +so it can be accessed in manifest and gencode-* scripts, this can lead to +unexpected behavior. For example, suppose you have some type with the following +in its manifest: + +.. code-block:: sh + + if [ -f "$__object/parameter/foo" ] + then + while read -r l + do + __file "$l" + echo "$l" >&2 + done < "$__object/parameter/foo" + fi + +and init manifest: + +.. code-block:: sh + + __foo foo --foo a --foo b --foo c + +You expect that manifest stderr content is: + +.. code-block:: sh + + a + b + c + +and that files *a*, *b* and *c* are created. But all you get in manifest stderr +is: + +.. code-block:: sh + + a + +and only *a* file is created. + +When redirecting parameter *foo* file content to while's stdin that means that all +commands in while body have this same stdin. So when *__file* type gets executed, +cdist saves its stdin which means it gets the remaining content of parameter *foo* +file, i.e.: + +.. code-block:: sh + + b + c + +The solution is to make sure that your types inside such loops get their stdin +from somewhere else, e.g. for the above problem *__file* type can get empty +stdin from */dev/null*: + +.. code-block:: sh + + if [ -f "$__object/parameter/foo" ] + then + while read -r l + do + __file "$l" < /dev/null + echo "$l" >&2 + done < "$__object/parameter/foo" + fi + + +Writing the manifest +-------------------- +In the manifest of a type you can use other types, so your type extends +their functionality. A good example is the __package type, which in +a shortened version looks like this: + +.. code-block:: sh + + os="$(cat "$__global/explorer/os")" + case "$os" in + archlinux) type="pacman" ;; + debian|ubuntu) type="apt" ;; + gentoo) type="emerge" ;; + *) + echo "Don't know how to manage packages on: $os" >&2 + exit 1 + ;; + esac + + __package_$type "$@" + +As you can see, the type can reference different environment variables, +which are documented in `cdist reference `_. + +Always ensure the manifest is executable, otherwise cdist will not be able +to execute it. For more information about manifests see `cdist manifest `_. + + +Singleton - one instance only +----------------------------- +If you want to ensure that a type can only be used once per target, you can +mark it as a singleton: Just create the (empty) file "singleton" in your type +directory: + +.. code-block:: sh + + touch cdist/conf/type/__NAME/singleton + +This will also change the way your type must be called: + +.. code-block:: sh + + __YOURTYPE --parameter value + +As you can see, the object ID is omitted, because it does not make any sense, +if your type can be used only once. + + +Install - type with install command +----------------------------------- +If you want a type to be used with install command, you must mark it as +install: create the (empty) file "install" in your type directory: + +.. code-block:: sh + + touch cdist/conf/type/__install_NAME/install + +With other commands, i.e. config, it will be skipped if used. + + +Nonparallel - only one instance can be run at a time +---------------------------------------------------- +If objects of a type must not or cannot be run in parallel when using -j +option, you must mark it as nonparallel: create the (empty) file "nonparallel" +in your type directory: + +.. code-block:: sh + + touch cdist/conf/type/__NAME/nonparallel + +For example, package types are nonparallel types. + + +The type explorers +------------------ +If a type needs to explore specific details, it can provide type specific +explorers, which will be executed on the target for every created object. + +The explorers are stored under the "explorer" directory below the type. +It could for instance contain code to check the md5sum of a file on the +client, like this (shortened version from the type __file): + +.. code-block:: sh + + if [ -f "$__object/parameter/destination" ]; then + destination="$(cat "$__object/parameter/destination")" + else + destination="/$__object_id" + fi + + if [ -e "$destination" ]; then + md5sum < "$destination" + fi + + +Writing the gencode script +-------------------------- +There are two gencode scripts: **gencode-local** and **gencode-remote**. +The output of gencode-local is executed locally, whereas +the output of gencode-remote is executed on the target. +The gencode scripts can make use of the parameters, the global explorers +and the type specific explorers. + +If the gencode scripts encounters an error, it should print diagnostic +messages to stderr and exit non-zero. If you need to debug the gencode +script, you can write to stderr: + +.. code-block:: sh + + # Debug output to stderr + echo "My fancy debug line" >&2 + + # Output to be saved by cdist for execution on the target + echo "touch /etc/cdist-configured" + +Notice: if you use __remote_copy or __remote_exec directly in your scripts +then for IPv6 address with __remote_copy execution you should enclose IPv6 +address in square brackets. The same applies to __remote_exec if it behaves +the same as ssh for some options where colon is a delimiter, as for -L ssh +option (see :strong:`ssh`\ (1) and :strong:`scp`\ (1)). + + +Variable access from the generated scripts +------------------------------------------ +In the generated scripts, you have access to the following cdist variables + +- __object +- __object_id + +but only for read operations, means there is no back copy of this +files after the script execution. + +So when you generate a script with the following content, it will work: + +.. code-block:: sh + + if [ -f "$__object/parameter/name" ]; then + name="$(cat "$__object/parameter/name")" + else + name="$__object_id" + fi + + +Environment variable usage idiom +-------------------------------- +In type scripts you can support environment variables with default values if +environment variable is unset or null by using **${parameter:-[word]}** +parameter expansion. + +Example using mktemp in a portable way that supports TMPDIR environment variable. + +.. code-block:: sh + + tempfile=$(mktemp "${TMPDIR:-/tmp}/cdist.XXXXXXXXXX") + + +Log level in types +------------------ +cdist log level can be accessed from __cdist_log_level variable.One of: + + +----------------+-----------------+ + | Log level | Log level value | + +================+=================+ + | OFF | 60 | + +----------------+-----------------+ + | ERROR | 40 | + +----------------+-----------------+ + | WARNING | 30 | + +----------------+-----------------+ + | INFO | 20 | + +----------------+-----------------+ + | VERBOSE | 15 | + +----------------+-----------------+ + | DEBUG | 10 | + +----------------+-----------------+ + | TRACE | 5 | + +----------------+-----------------+ + + +It is available for initial manifest, explorer, type manifest, +type explorer, type gencode. + + +Detecting dry run +----------------- + +If ``$__cdist_dry_run`` environment variable is set, then it's dry run. + +It is available for initial manifest, explorer, type manifest, +type explorer, type gencode. + + +Hints for typewriters +---------------------- +It must be assumed that the target is pretty dumb and thus does not have high +level tools like ruby installed. If a type requires specific tools to be present +on the target, there must be another type that provides this tool and the first +type should create an object of the specific type. + +If your type wants to save temporary data, that may be used by other types +later on (for instance \__file), you can save them in the subdirectory +"files" below $__object (but you must create it yourself). +cdist will not touch this directory. + +If your type contains static files, it's also recommended to place them in +a folder named "files" within the type (again, because cdist guarantees to +never ever touch this folder). + + +How to include a type into upstream cdist +----------------------------------------- +If you think your type may be useful for others, ensure it works with the +current master branch of cdist and have a look at `cdist hacking `_ on +how to submit it. diff --git a/src/extra/manual/6.7.0/_sources/cdist-types.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-types.rst.txt new file mode 100644 index 00000000..9e7eb5af --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-types.rst.txt @@ -0,0 +1,167 @@ +cdist types +=========== + +.. toctree:: + :titlesonly: + + __acl + __apt_default_release + __apt_key + __apt_key_uri + __apt_mark + __apt_norecommends + __apt_ppa + __apt_source + __apt_unattended_upgrades + __apt_update_index + __block + __ccollect_source + __cdist + __cdistmarker + __check_messages + __chroot_mount + __chroot_umount + __clean_path + __config_file + __consul + __consul_agent + __consul_check + __consul_reload + __consul_service + __consul_template + __consul_template_template + __consul_watch_checks + __consul_watch_event + __consul_watch_key + __consul_watch_keyprefix + __consul_watch_nodes + __consul_watch_service + __consul_watch_services + __cron + __daemontools + __daemontools_service + __debconf_set_selections + __directory + __docker + __docker_compose + __docker_config + __docker_secret + __docker_stack + __docker_swarm + __dog_vdi + __dot_file + __download + __file + __filesystem + __firewalld_rule + __firewalld_start + __git + __go_get + __golang_from_vendor + __grafana_dashboard + __group + __hostname + __hosts + __install_bootloader_grub + __install_chroot_mount + __install_chroot_umount + __install_config + __install_coreos + __install_directory + __install_file + __install_fstab + __install_generate_fstab + __install_mkfs + __install_mount + __install_partition_msdos + __install_partition_msdos_apply + __install_reboot + __install_reset_disk + __install_stage + __install_umount + __iptables_apply + __iptables_rule + __issue + __jail + __jail_freebsd10 + __jail_freebsd9 + __key_value + __keyboard + __letsencrypt_cert + __line + __link + __locale + __locale_system + __motd + __mount + __mysql_database + __mysql_privileges + __mysql_user + __openldap_server + __package + __package_apk + __package_apt + __package_dpkg + __package_emerge + __package_emerge_dependencies + __package_luarocks + __package_opkg + __package_pacman + __package_pip + __package_pkg_freebsd + __package_pkg_openbsd + __package_pkgng_freebsd + __package_rubygem + __package_update_index + __package_upgrade_all + __package_yum + __package_zypper + __pacman_conf + __pacman_conf_integrate + __pf_apply_anchor + __pf_ruleset + __ping + __postfix + __postfix_master + __postfix_postconf + __postfix_postmap + __postfix_reload + __postgres_database + __postgres_extension + __postgres_role + __process + __prometheus_alertmanager + __prometheus_exporter + __prometheus_server + __pyvenv + __qemu_img + __rbenv + __rsync + __rvm + __rvm_gem + __rvm_gemset + __rvm_ruby + __sensible_editor + __service + __ssh_authorized_key + __ssh_authorized_keys + __ssh_dot_ssh + __staged_file + __start_on_boot + __sysctl + __systemd_service + __systemd_unit + __timezone + __ufw + __ufw_rule + __unpack + __update_alternatives + __user + __user_groups + __xymon_apache + __xymon_client + __xymon_config + __xymon_server + __yum_repo + __zypper_repo + __zypper_service diff --git a/src/extra/manual/6.7.0/_sources/cdist-upgrade.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-upgrade.rst.txt new file mode 100644 index 00000000..f745b212 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-upgrade.rst.txt @@ -0,0 +1,188 @@ +How to upgrade cdist +==================== + +Update the git installation +--------------------------- + +To upgrade cdist in the current branch use + +.. code-block:: sh + + git pull + + # Also update the manpages + make man + export MANPATH=$MANPATH:$(pwd -P)/doc/man + +If you stay on a version branch (i.e. 1.0, 1.1., ...), nothing should break. +The master branch on the other hand is the development branch and may not be +working, break your setup or eat the tree in your garden. + +Safely upgrading to new versions +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To upgrade to **any** further cdist version, you can take the +following procedure to do a safe upgrade: + +.. code-block:: sh + + # Create new branch to try out the update + git checkout -b upgrade_cdist + + # Get latest cdist version in git database + git fetch -v + + # see what will happen on merge - replace + # master with the branch you plan to merge + git diff upgrade_cdist..origin/master + + # Merge the new version + git merge origin/master + +Now you can ensure all custom types work with the new version. +Assume that you need to go back to an older version during +the migration/update, you can do so as follows: + +.. code-block:: sh + + # commit changes + git commit -m ... + + # go back to original branch + git checkout master + +After that, you can go back and continue the upgrade: + +.. code-block:: sh + + # git checkout upgrade_cdist + + +Update the python package +------------------------- + +To upgrade to the latest version do + +.. code-block:: sh + + pip install --upgrade cdist + +General update instructions +--------------------------- + +Updating from 3.0 to 3.1 +~~~~~~~~~~~~~~~~~~~~~~~~ + +The type **\_\_ssh_authorized_keys** now also manages existing keys, +not only the ones added by cdist. + +Updating from 2.3 to 3.0 +~~~~~~~~~~~~~~~~~~~~~~~~ + +The **changed** attribute of objects has been removed. +Use `messaging `_ instead. + +Updating from 2.2 to 2.3 +~~~~~~~~~~~~~~~~~~~~~~~~ + +No incompatibilities. + +Updating from 2.1 to 2.2 +~~~~~~~~~~~~~~~~~~~~~~~~ + +Starting with 2.2, the syntax for requiring a singleton type changed: +Old format: + +.. code-block:: sh + + require="__singleton_type/singleton" ... + +New format: + +.. code-block:: sh + + require="__singleton_type" ... + +Internally the "singleton" object id was dropped to make life more easy. +You can probably fix your configuration by running the following code +snippet (currently untested, please report back if it works for you): + +.. code-block:: sh + + find ~/.cdist/* -type f -exec sed -i 's,/singleton,,' {} \; + +Updating from 2.0 to 2.1 +~~~~~~~~~~~~~~~~~~~~~~~~ + +Have a look at the update guide for [[2.0 to 2.1|2.0-to-2.1]]. + + * Type **\_\_package* and \_\_process** use --state **present** or **absent**. + The states **removed/installed** and **stopped/running** have been removed. + Support for the new states is already present in 2.0. + * Type **\_\_directory**: Parameter --parents and --recursive are now boolean + The old "yes/no" values need to be removed. + * Type **\_\_rvm_ruby**: Parameter --default is now boolean + The old "yes/no" values need to be removed. + * Type **\_\_rvm_gemset**: Parameter --default is now boolean + The old "yes/no" values need to be removed. + * Type **\_\_addifnosuchline** and **\_\_removeline** have been replaced by **\_\_line** + * The **conf** directory is now located at **cdist/conf**. + You need to migrate your types, explorers and manifests + manually to the new location. + * Replace the variable **\_\_self** by **\_\_object_name** + Support for the variable **\_\_object_name** is already present in 2.0. + * The types **\_\_autofs**, **\_\_autofs_map** and **\_\_autofs_reload** have been removed + (no maintainer, no users) + * Type **\_\_user**: Parameter --groups removed (use the new \_\_user_groups type) + * Type **\_\_ssh_authorized_key** has been replaced by more flexible type + **\_\_ssh_authorized_keys** + +Updating from 1.7 to 2.0 +~~~~~~~~~~~~~~~~~~~~~~~~ + +* Ensure python (>= 3.2) is installed on the source host +* Use "cdist config host" instead of "cdist-deploy-to host" +* Use "cdist config -p host1 host2" instead of "cdist-mass-deploy" +* Use "cdist banner" for fun +* Use **\_\_object_name** instead of **\_\_self** in manifests + +Updating from 1.6 to 1.7 +~~~~~~~~~~~~~~~~~~~~~~~~ + +* If you used the global explorer **hardware_type**, you need to change + your code to use **machine** instead. + +Updating from 1.5 to 1.6 +~~~~~~~~~~~~~~~~~~~~~~~~ + +* If you used **\_\_package_apt --preseed**, you need to use the new + type **\_\_debconf_set_selections** instead. +* The **\_\_package** types accepted either --state deinstalled or + --state uninstalled. Starting with 1.6, it was made consistently + to --state removed. + +Updating from 1.3 to 1.5 +~~~~~~~~~~~~~~~~~~~~~~~~ + +No incompatibilities. + +Updating from 1.2 to 1.3 +~~~~~~~~~~~~~~~~~~~~~~~~ + +Rename **gencode** of every type to **gencode-remote**. + +Updating from 1.1 to 1.2 +~~~~~~~~~~~~~~~~~~~~~~~~ + +No incompatibilities. + +Updating from 1.0 to 1.1 +~~~~~~~~~~~~~~~~~~~~~~~~ + +In 1.1 the type **\_\_file** was split into **\_\_directory**, **\_\_file** and +**\_\_link**. The parameter **--type** was removed from **\_\_file**. Thus you +need to replace **\_\_file** calls in your manifests: + + * Remove --type from all \_\_file calls + * If type was symlink, use \_\_link and --type symbolic + * If type was directory, use \_\_directory diff --git a/src/extra/manual/6.7.0/_sources/cdist-why.rst.txt b/src/extra/manual/6.7.0/_sources/cdist-why.rst.txt new file mode 100644 index 00000000..0e2cd34d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/cdist-why.rst.txt @@ -0,0 +1,72 @@ +Why should I use cdist? +======================= + +There are several motivations to use cdist, these +are probably the most popular ones. + +Known language +-------------- + +Cdist is being configured in +`shell script `_. +Shell script is used by UNIX system engineers for decades. +So when cdist is introduced, your staff does not need to learn a new +`DSL `_ +or programming language. + +Powerful language +----------------- + +Not only is shell scripting widely known by system engineers, +but it is also a very powerful language. Here are some features +which make daily work easy: + + * Configuration can react dynamically on explored values + * High level string manipulation (using sed, awk, grep) + * Conditional support (**if, case**) + * Loop support (**for, while**) + * Support for dependencies between cdist types + +More than shell scripting +------------------------- + +If you compare regular shell scripting with cdist, there is one major +difference: When using cdist types, +the results are +`idempotent `_. +In practise that means it does not matter in which order you +call cdist types, the result is always the same. + +Zero dependency configuration management +---------------------------------------- + +Cdist requires very little on a target system. Even better, +in almost all cases all dependencies are usually fulfilled. +Cdist does not require an agent or high level programming +languages on the target host: it will run on any host that +has a **ssh server running** and a POSIX compatible shell +(**/bin/sh**). Compared to other configuration management systems, +it does not require to open up an additional port. + +Push based distribution +----------------------- + +Cdist uses the push based model for configuration. In this +scenario, one (or more) computers connect to the target hosts +and apply the configuration. That way the source host has +very little requirements: Cdist can even run on a sysadmin +notebook that is loosely connected to the network and has +limited amount of resources. + +Furthermore, from a security point of view, only one machine +needs access to the target hosts. No target hosts will ever +need to connect back to the source host, which contains the +full configuration. + +Highly scalable +--------------- + +If at some point you manage more hosts than can be handled from +a single source host, you can simply add more resources: Either +add more cores to one host or add hosts. +Cdist will utilise the given resources in parallel. diff --git a/src/extra/manual/6.7.0/_sources/index.rst.txt b/src/extra/manual/6.7.0/_sources/index.rst.txt new file mode 100644 index 00000000..31c044dc --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/index.rst.txt @@ -0,0 +1,45 @@ +cdist - usable configuration management +======================================= + +cdist is a usable configuration management system. +It adheres to the KISS principle and +is being used in small up to enterprise grade environments. +It natively supports IPv6 since the first release. + + +.. toctree:: + :maxdepth: 3 + :glob: + :numbered: + :hidden: + + cdist-why + cdist-features + cdist-os + cdist-install + cdist-upgrade + cdist-support + cdist-quickstart + cdist-real-world + man1/cdist + man1/cdist-dump + man1/cdist-new-type + cdist-bootstrap + cdist-configuration + cdist-manifest + cdist-type + cdist-types + cdist-explorer + cdist-messaging + cdist-parallelization + cdist-inventory + cdist-preos + cdist-integration + cdist-reference + cdist-best-practice + cdist-stages + cdist-cache + cdist-saving-output-streams + cdist-remote-exec-copy + cdist-hacker + cdist-troubleshooting diff --git a/src/extra/manual/6.7.0/_sources/man1/cdist-dump.rst.txt b/src/extra/manual/6.7.0/_sources/man1/cdist-dump.rst.txt new file mode 100644 index 00000000..907cd192 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man1/cdist-dump.rst.txt @@ -0,0 +1,110 @@ +cdist-dump(1) +============= + +NAME +---- +cdist-dump - Dump data from local cdist cache + + +SYNOPSIS +-------- + +:: + + cdist-dump [options] [host...] + + + +DESCRIPTION +----------- +cdist-dump is a helper script that dumps data from local cdist cache for +specified hosts. If host is not specified then all data from cache directory +is dumped. Default cache directory is '~/.cdist/cache'. + +cdist-dump can be used for debugging existing types, host configuration and +new types. + + +OPTIONS +------- +**-a** + dump all + +**-C CACHE-DIR** + use specified CACHE-DIR (default: ~/.cdist/cache) + +**-c** + dump code-* + +**-d DELIMITER** + delimiter used for filename and line number prefix (default: ':') + +**-E** + dump global explorers + +**-e** + dump type explorers + +**-F** + disable filename prefix (enabled by default) + +**-f** + enable filename prefix (default) + +**-g** + dump gencode-* + +**-h** + show this help screen and exit + +**-L** + disable line number prefix (default) + +**-l** + enable line number prefix (disabled by default) + +**-m** + dump messages + +**-o** + dump executions' stdout + +**-p** + dump parameters + +**-r** + dump executions' stderr + +**-V** + show version and exit + +**-v** + increase verbosity + + +EXAMPLES +-------- + +.. code-block:: sh + + # Dump all + % cdist-dump -a + + # Dump only code-* output + % cdist-dump -c + + +SEE ALSO +-------- +:strong:`cdist`\ (1) + + +AUTHORS +------- +Darko Poljak + + +COPYING +------- +Copyright \(C) 2019 Darko Poljak. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man1/cdist-new-type.rst.txt b/src/extra/manual/6.7.0/_sources/man1/cdist-new-type.rst.txt new file mode 100644 index 00000000..f1a8b992 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man1/cdist-new-type.rst.txt @@ -0,0 +1,74 @@ +cdist-new-type(1) +================= + +NAME +---- +cdist-new-type - Create new type skeleton + + +SYNOPSIS +-------- + +:: + + cdist-new-type TYPE-NAME AUTHOR-NAME AUTHOR-EMAIL [TYPE-BASE-PATH] + + + +DESCRIPTION +----------- +cdist-new-type is a helper script that creates new type skeleton. +It is then up to the type author to finish the type. + +It creates skeletons for the following files: + +* man.rst +* manifest +* gencode-remote. + +Upon creation it prints the path to the newly created type directory. + + +ARGUMENTS +--------- +**TYPE-NAME** + Name of the new type. + +**AUTHOR-NAME** + Type author's full name. + +**AUTHOR-NAME** + Type author's email. + +**TYPE-BASE-PATH** + Path to the base directory of the type. If not set it defaults + to '$PWD/type'. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create new type __foo in ~/.cdist directory. + $ cd ~/.cdist + $ cdist-new-type '__foo' 'Foo Bar' 'foo.bar at foobar.org' + /home/foo/.cdist/type/__foo + + +SEE ALSO +-------- +:strong:`cdist`\ (1) + + +AUTHORS +------- + +| Steven Armstrong +| Darko Poljak + + +COPYING +------- +Copyright \(C) 2019 Steven Armstrong, Darko Poljak. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man1/cdist.rst.txt b/src/extra/manual/6.7.0/_sources/man1/cdist.rst.txt new file mode 100644 index 00000000..aa2607f8 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man1/cdist.rst.txt @@ -0,0 +1,979 @@ +cdist(1) +======== + +NAME +---- +cdist - Usable Configuration Management + + +SYNOPSIS +-------- + +:: + + cdist [-h] [-V] {banner,config,install,inventory,preos,shell,info} ... + + cdist banner [-h] [-l LOGLEVEL] [-q] [-v] + + cdist config [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-4] [-6] [-C CACHE_PATH_PATTERN] + [-c CONF_DIR] [-i MANIFEST] [-j [JOBS]] [--log-server] + [-n] [-o OUT_PATH] [-P] [-R [{tar,tgz,tbz2,txz}]] + [-r REMOTE_OUT_PATH] [--remote-copy REMOTE_COPY] + [--remote-exec REMOTE_EXEC] [-S] [-I INVENTORY_DIR] [-A] + [-a] [-f HOSTFILE] [-p [HOST_MAX]] [-s] [-t] + [host [host ...]] + + cdist install [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-4] [-6] [-C CACHE_PATH_PATTERN] + [-c CONF_DIR] [-i MANIFEST] [-j [JOBS]] [--log-server] + [-n] [-o OUT_PATH] [-P] [-R [{tar,tgz,tbz2,txz}]] + [-r REMOTE_OUT_PATH] [--remote-copy REMOTE_COPY] + [--remote-exec REMOTE_EXEC] [-S] [-I INVENTORY_DIR] [-A] + [-a] [-f HOSTFILE] [-p [HOST_MAX]] [-s] [-t] + [host [host ...]] + + cdist inventory [-h] {add-host,add-tag,del-host,del-tag,list} ... + + cdist inventory add-host [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-I INVENTORY_DIR] [-f HOSTFILE] + [host [host ...]] + + cdist inventory add-tag [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-I INVENTORY_DIR] [-f HOSTFILE] + [-T TAGFILE] [-t TAGLIST] + [host [host ...]] + + cdist inventory del-host [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-I INVENTORY_DIR] [-a] + [-f HOSTFILE] + [host [host ...]] + + cdist inventory del-tag [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-I INVENTORY_DIR] [-a] + [-f HOSTFILE] [-T TAGFILE] [-t TAGLIST] + [host [host ...]] + + cdist inventory list [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN] + [-g CONFIG_FILE] [-I INVENTORY_DIR] [-a] [-f HOSTFILE] + [-H] [-t] + [host [host ...]] + + cdist preos [-h] [-l LOGLEVEL] [-q] [-v] [-c CONF_DIR] [-g CONFIG_FILE] [-L] + [preos] ... + + cdist preos [preos-options] debian [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B] + [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC] + [-i MANIFEST] [-k KEYFILE ] [-m MIRROR] + [-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r] + [-S SCRIPT] [-s SUITE] [-y REMOTE_COPY] + target_dir + + cdist preos [preos-options] devuan [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B] + [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC] + [-i MANIFEST] [-k KEYFILE ] [-m MIRROR] + [-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r] + [-S SCRIPT] [-s SUITE] [-y REMOTE_COPY] + target_dir + + cdist preos [preos-options] ubuntu [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B] + [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC] + [-i MANIFEST] [-k KEYFILE ] [-m MIRROR] + [-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r] + [-S SCRIPT] [-s SUITE] [-y REMOTE_COPY] + target_dir + + cdist shell [-h] [-l LOGLEVEL] [-q] [-v] [--colors WHEN] [-s SHELL] + + cdist info [-h] [-a] [-c CONF_DIR] [-e] [-F] [-f] [-g CONFIG_FILE] [-t] + [pattern] + + +DESCRIPTION +----------- +cdist is the frontend executable to the cdist configuration management. +It supports different subcommands as explained below. + +It is written in Python so it requires :strong:`python`\ (1) to be installed. +It requires a minimal Python version 3.5. + +GENERAL +------- +All commands accept the following options: + +**-h, --help** + Show the help screen. + +**--colors WHEN** + Colorize cdist's output. If enabled, cdist will use different colors for + different log levels. + WHEN recognizes the values 'always', 'never', and 'auto' (the default). + + If the value is 'auto', colored output is enabled if stdout is a TTY + unless the NO_COLOR (https://no-color.org/) environment variable is defined. + +**-l LOGLEVEL, --log-level LOGLEVEL** + Set the specified verbosity level. The levels, in + order from the lowest to the highest, are: ERROR (-1), + WARNING (0), INFO (1), VERBOSE (2), DEBUG (3), TRACE (4 + or higher). If used along with -v then -v increases + last set value and -l overwrites last set value. + +**-q, --quiet** + Quiet mode: disables logging, including WARNING and ERROR. + +**-v, --verbose** + Increase the verbosity level. Every instance of -v + increments the verbosity level by one. Its default + value is 0 which includes ERROR and WARNING levels. + The levels, in order from the lowest to the highest, + are: ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), + DEBUG (3), TRACE (4 or higher). If used along with -l + then -l overwrites last set value and -v increases + last set value. + +**-V, --version** + Show version and exit. + + +BANNER +------ +Displays the cdist banner. Useful for printing +cdist posters - a must have for every office. + + +CONFIG/INSTALL +-------------- +Configure/install one or more hosts. +Install command is currently in beta. + +**-4, --force-ipv4** + Force to use IPv4 addresses only. No influence for + custom remote commands. + +**-6, --force-ipv6** + Force to use IPv6 addresses only. No influence for + custom remote commands. + +**-A, --all-tagged** + Use all hosts present in tags db. Currently in beta. + +**-a, --all** + List hosts that have all specified tags, if -t/--tag + is specified. + +**-b, --beta** + Enable beta functionality. + +**-C CACHE_PATH_PATTERN, --cache-path-pattern CACHE_PATH_PATTERN** + Specify custom cache path pattern. If it is not set then + default hostdir is used. For more info on format see + :strong:`CACHE PATH PATTERN FORMAT` below. + +**-c CONF_DIR, --conf-dir CONF_DIR** + Add a configuration directory. Can be specified multiple times. + If configuration directories contain conflicting types, explorers or + manifests, then the last one found is used. + +**-f HOSTFILE, --file HOSTFILE** + Read specified file for a list of additional hosts to operate on + or if '-' is given, read stdin (one host per line). + If no host or host file is specified then, by default, + read hosts from stdin. For the file format see + :strong:`HOSTFILE FORMAT` below. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-I INVENTORY_DIR, --inventory INVENTORY_DIR** + Use specified custom inventory directory. Inventory + directory is set up by the following rules: if cdist + configuration resolves this value then specified + directory is used, if HOME env var is set then + ~/.cdit/inventory is used, otherwise distribution + inventory directory is used. + +**-i MANIFEST, --initial-manifest MANIFEST** + Path to a cdist manifest or - to read from stdin. + +**-j [JOBS], --jobs [JOBS]** + Operate in parallel in specified maximum number of + jobs. Global explorers, object prepare and object run + are supported. Without argument CPU count is used by + default. + +**--log-server** + Start a log server for sub processes to use. This is + mainly useful when running cdist nested from a code- + local script. Log server is always implicitly started + for 'install' command. + +**-n, --dry-run** + Do not execute code. + +**-o OUT_PATH, --out-dir OUT_PATH** + Directory to save cdist output in. + +**-P, --timestamp** + Timestamp log messages with the current local date and time + in the format: YYYYMMDDHHMMSS.us. + +**-p [HOST_MAX], --parallel [HOST_MAX]** + Operate on multiple hosts in parallel for specified + maximum hosts at a time. Without argument CPU count is + used by default. + +**-R [{tar,tgz,tbz2,txz}], --use-archiving [{tar,tgz,tbz2,txz}]** + Operate by using archiving with compression where + appropriate. Supported values are: tar - tar archive, + tgz - gzip tar archive (the default), tbz2 - bzip2 tar + archive and txz - lzma tar archive. Currently in beta. + +**-r REMOTE_OUT_PATH, --remote-out-dir REMOTE_OUT_PATH** + Directory to save cdist output in on the target host. + +**-S, --disable-saving-output-streams** + Disable saving output streams. + +**-s, --sequential** + Operate on multiple hosts sequentially (default). + +**--remote-copy REMOTE_COPY** + Command to use for remote copy (should behave like scp). + +**--remote-exec REMOTE_EXEC** + Command to use for remote execution (should behave like ssh). + +**-t, --tag** + Host is specified by tag, not hostname/address; list + all hosts that contain any of specified tags. + Currently in beta. + +HOSTFILE FORMAT +~~~~~~~~~~~~~~~ +The HOSTFILE contains one host per line. +A comment is started with '#' and continues to the end of the line. +Any leading and trailing whitespace on a line is ignored. +Empty lines are ignored/skipped. + + +The Hostfile lines are processed as follows. First, all comments are +removed. Then all leading and trailing whitespace characters are stripped. +If such a line results in empty line it is ignored/skipped. Otherwise, +host string is used. + +CACHE PATH PATTERN FORMAT +~~~~~~~~~~~~~~~~~~~~~~~~~ +Cache path pattern specifies path for a cache directory subdirectory. +In the path, '%N' will be substituted by the target host, '%h' will +be substituted by the calculated host directory, '%P' will be substituted +by the current process id. All format codes that +:strong:`python` :strong:`datetime.strftime()` function supports, except +'%h', are supported. These date/time directives format cdist config/install +start time. + +If empty pattern is specified then default calculated host directory +is used. + +Calculated host directory is a hash of a host cdist operates on. + +Resulting path is used to specify cache path subdirectory under which +current host cache data are saved. + + +INVENTORY +--------- +Manage inventory database. +Currently in beta with all sub-commands. + + +INVENTORY ADD-HOST +------------------ +Add host(s) to inventory database. + +**host** + Host(s) to add. + +**-b, --beta** + Enable beta functionality. + +**-f HOSTFILE, --file HOSTFILE** + Read additional hosts to add from specified file or + from stdin if '-' (each host on separate line). If no + host or host file is specified then, by default, read + from stdin. Hostfile format is the same as config hostfile format. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-I INVENTORY_DIR, --inventory INVENTORY_DIR** + Use specified custom inventory directory. Inventory + directory is set up by the following rules: if cdist + configuration resolves this value then specified + directory is used, if HOME env var is set then + ~/.cdit/inventory is used, otherwise distribution + inventory directory is used. + + +INVENTORY ADD-TAG +----------------- +Add tag(s) to inventory database. + +**host** + List of host(s) for which tags are added. + +**-b, --beta** + Enable beta functionality. + +**-f HOSTFILE, --file HOSTFILE** + Read additional hosts to add tags from specified file + or from stdin if '-' (each host on separate line). If + no host or host file is specified then, by default, + read from stdin. If no tags/tagfile nor hosts/hostfile + are specified then tags are read from stdin and are + added to all hosts. Hostfile format is the same as config hostfile format. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-I INVENTORY_DIR, --inventory INVENTORY_DIR** + Use specified custom inventory directory. Inventory + directory is set up by the following rules: if cdist + configuration resolves this value then specified + directory is used, if HOME env var is set then + ~/.cdit/inventory is used, otherwise distribution + inventory directory is used. + +**-T TAGFILE, --tag-file TAGFILE** + Read additional tags to add from specified file or + from stdin if '-' (each tag on separate line). If no + tag or tag file is specified then, by default, read + from stdin. If no tags/tagfile nor hosts/hostfile are + specified then tags are read from stdin and are added + to all hosts. Tagfile format is the same as config hostfile format. + +**-t TAGLIST, --taglist TAGLIST** + Tag list to be added for specified host(s), comma + separated values. + + +INVENTORY DEL-HOST +------------------ +Delete host(s) from inventory database. + +**host** + Host(s) to delete. + +**-a, --all** + Delete all hosts. + +**-b, --beta** + Enable beta functionality. + +**-f HOSTFILE, --file HOSTFILE** + Read additional hosts to delete from specified file or + from stdin if '-' (each host on separate line). If no + host or host file is specified then, by default, read + from stdin. Hostfile format is the same as config hostfile format. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-I INVENTORY_DIR, --inventory INVENTORY_DIR** + Use specified custom inventory directory. Inventory + directory is set up by the following rules: if cdist + configuration resolves this value then specified + directory is used, if HOME env var is set then + ~/.cdit/inventory is used, otherwise distribution + inventory directory is used. + + +INVENTORY DEL-TAG +----------------- +Delete tag(s) from inventory database. + +**host** + List of host(s) for which tags are deleted. + +**-a, --all** + Delete all tags for specified host(s). + +**-b, --beta** + Enable beta functionality. + +**-f HOSTFILE, --file HOSTFILE** + Read additional hosts to delete tags for from + specified file or from stdin if '-' (each host on + separate line). If no host or host file is specified + then, by default, read from stdin. If no tags/tagfile + nor hosts/hostfile are specified then tags are read + from stdin and are deleted from all hosts. Hostfile + format is the same as config hostfile format. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-I INVENTORY_DIR, --inventory INVENTORY_DIR** + Use specified custom inventory directory. Inventory + directory is set up by the following rules: if cdist + configuration resolves this value then specified + directory is used, if HOME env var is set then + ~/.cdit/inventory is used, otherwise distribution + inventory directory is used. + +**-T TAGFILE, --tag-file TAGFILE** + Read additional tags from specified file or from stdin + if '-' (each tag on separate line). If no tag or tag + file is specified then, by default, read from stdin. + If no tags/tagfile nor hosts/hostfile are specified + then tags are read from stdin and are added to all + hosts. Tagfile format is the same as config hostfile format. + +**-t TAGLIST, --taglist TAGLIST** + Tag list to be deleted for specified host(s), comma + separated values. + + +INVENTORY LIST +-------------- +List inventory database. + +**host** + Host(s) to list. + +**-a, --all** + List hosts that have all specified tags, if -t/--tag + is specified. + +**-b, --beta** + Enable beta functionality. + +**-f HOSTFILE, --file HOSTFILE** + Read additional hosts to list from specified file or + from stdin if '-' (each host on separate line). If no + host or host file is specified then, by default, list + all. Hostfile format is the same as config hostfile format. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-H, --host-only** + Suppress tags listing. + +**-I INVENTORY_DIR, --inventory INVENTORY_DIR** + Use specified custom inventory directory. Inventory + directory is set up by the following rules: if cdist + configuration resolves this value then specified + directory is used, if HOME env var is set then + ~/.cdit/inventory is used, otherwise distribution + inventory directory is used. + +**-t, --tag** + Host is specified by tag, not hostname/address; list + all hosts that contain any of specified tags. + + +PREOS +----- +Create PreOS. + +**-c CONF_DIR, --conf-dir CONF_DIR** + Add configuration directory (one that contains "preos" subdirectory). + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-L, --list-preoses** + List available PreOS-es. + +Currently, the following PreOS-es are supported: + +* debian +* ubuntu +* devuan + + +PREOS DEBIAN/DEVUAN +------------------- + +**target_dir** + target directory where PreOS will be bootstrapped + +**-a ARCH, --arch ARCH** + target debootstrap architecture, by default 'amd64' + +**-B, --bootstrap** + do bootstrap step + +**-b, --beta** + Enable beta functionality. + +**-C, --configure** + do configure step + +**-c CDIST_PARAMS, --cdist-params CDIST_PARAMS** + parameters that will be passed to cdist config, by + default '-v' is used + +**-D DRIVE, --drive-boot DRIVE** + create bootable PreOS on specified drive + +**-e REMOTE_EXEC, --remote-exec REMOTE_EXEC** + remote exec that cdist config will use, by default + internal script is used + +**-i MANIFEST, --init-manifest MANIFEST** + init manifest that cdist config will use, by default + internal init manifest is used + +**-k KEYFILE, --keyfile KEYFILE** + ssh key files that will be added to cdist config; + '``__ssh_authorized_keys root ...``' type is appended to initial manifest + +**-m MIRROR, --mirror MIRROR** + use specified mirror for debootstrap + +**-P ROOT_PASSWORD, --root-password ROOT_PASSWORD** + Set specified password for root, generated by default + +**-p PXE_BOOT_DIR, --pxe-boot-dir PXE_BOOT_DIR** + PXE boot directory + +**-r, --rm-bootstrap-dir** + remove target directory after finishing + +**-S SCRIPT, --script SCRIPT** + use specified script for debootstrap + +**-s SUITE, --suite SUITE** + suite used for debootstrap, by default 'stable' + +**-y REMOTE_COPY, --remote-copy REMOTE_COPY** + remote copy that cdist config will use, by default + internal script is used + + +PREOS UBUNTU +------------ + +**target_dir** + target directory where PreOS will be bootstrapped + +**-a ARCH, --arch ARCH** + target debootstrap architecture, by default 'amd64' + +**-B, --bootstrap** + do bootstrap step + +**-b, --beta** + Enable beta functionality. + +**-C, --configure** + do configure step + +**-c CDIST_PARAMS, --cdist-params CDIST_PARAMS** + parameters that will be passed to cdist config, by + default '-v' is used + +**-D DRIVE, --drive-boot DRIVE** + create bootable PreOS on specified drive + +**-e REMOTE_EXEC, --remote-exec REMOTE_EXEC** + remote exec that cdist config will use, by default + internal script is used + +**-i MANIFEST, --init-manifest MANIFEST** + init manifest that cdist config will use, by default + internal init manifest is used + +**-k KEYFILE, --keyfile KEYFILE** + ssh key files that will be added to cdist config; + '``__ssh_authorized_keys root ...``' type is appended to initial manifest + +**-m MIRROR, --mirror MIRROR** + use specified mirror for debootstrap + +**-P ROOT_PASSWORD, --root-password ROOT_PASSWORD** + Set specified password for root, generated by default + +**-p PXE_BOOT_DIR, --pxe-boot-dir PXE_BOOT_DIR** + PXE boot directory + +**-r, --rm-bootstrap-dir** + remove target directory after finishing + +**-S SCRIPT, --script SCRIPT** + use specified script for debootstrap + +**-s SUITE, --suite SUITE** + suite used for debootstrap, by default 'xenial' + +**-y REMOTE_COPY, --remote-copy REMOTE_COPY** + remote copy that cdist config will use, by default + internal script is used + + +SHELL +----- +This command allows you to spawn a shell that enables access +to the types as commands. It can be thought as an +"interactive manifest" environment. See below for example +usage. Its primary use is for debugging type parameters. + +**-s SHELL, --shell SHELL** + Select shell to use, defaults to current shell. Used shell should + be POSIX compatible shell. + + +INFO +---- +Display information for cdist (global explorers, types). + +**pattern** + Glob pattern. If it contains special characters('?', '*', '[') then it is + used as specified, otherwise it is translated to `*pattern*`. + +**-h, --help** + Show help message and exit. + +**-a, --all** + Display all info. This is the default. + +**-c CONF_DIR, --conf-dir CONF_DIR** + Add configuration directory (can be repeated). + +**-e, --global-explorers** + Display info for global explorers. + +**-F, --fixed-string** + Interpret pattern as a fixed string. + +**-f, --full** + Display full details. + +**-g CONFIG_FILE, --config-file CONFIG_FILE** + Use specified custom configuration file. + +**-t, --types** + Display info for types. + + +CONFIGURATION +------------- +cdist obtains configuration data from the following sources in the following +order (from higher to lower precedence): + + #. command-line options + #. configuration file specified at command-line + #. configuration file specified in CDIST_CONFIG_FILE environment variable + #. environment variables + #. user's configuration file (first one found of ~/.cdist.cfg, $XDG_CONFIG_HOME/cdist/cdist.cfg, in specified order) + #. system-wide configuration file (/etc/cdist.cfg). + +CONFIGURATION FILE FORMAT +~~~~~~~~~~~~~~~~~~~~~~~~~ +cdist configuration file is in the INI file format. Currently it supports +only [GLOBAL] section. +The possible keywords and their meanings are as follows: + +:strong:`archiving` + Use specified archiving. Valid values include: + 'none', 'tar', 'tgz', 'tbz2' and 'txz'. + +:strong:`beta` + Enable beta functionality. It recognizes boolean values from + 'yes'/'no', 'on'/'off', 'true'/'false' and '1'/'0'. + +:strong:`cache_path_pattern` + Specify cache path pattern. + +:strong:`colored_output` + Colorize cdist's output. cf. the :code:`--colors` option. + +:strong:`conf_dir` + List of configuration directories separated with the character conventionally + used by the operating system to separate search path components (as in PATH), + such as ':' for POSIX or ';' for Windows. + If also specified at command line then values from command line are + appended to this value. + +:strong:`init_manifest` + Specify default initial manifest. + +:strong:`inventory_dir` + Specify inventory directory. + +:strong:`jobs` + Specify number of jobs for parallel processing. If -1 then the default, + number of CPU's in the system is used. If 0 then parallel processing in + jobs is disabled. If set to positive number then specified maximum + number of processes will be used. + +:strong:`local_shell` + Shell command used for local execution. + +:strong:`out_path` + Directory to save cdist output in. + +:strong:`parallel` + Process hosts in parallel. If -1 then the default, number of CPU's in + the system is used. If 0 then parallel processing of hosts is disabled. + If set to positive number then specified maximum number of processes + will be used. + +:strong:`remote_copy` + Command to use for remote copy (should behave like scp). + +:strong:`remote_exec` + Command to use for remote execution (should behave like ssh). + +:strong:`remote_out_path` + Directory to save cdist output in on the target host. + +:strong:`remote_shell` + Shell command at remote host used for remote execution. + +:strong:`save_output_streams` + Enable/disable saving output streams (enabled by default). + It recognizes boolean values from 'yes'/'no', 'on'/'off', 'true'/'false' + and '1'/'0'. + +:strong:`timestamp` + Timestamp log messages with the current local date and time + in the format: YYYYMMDDHHMMSS.us. + +:strong:`verbosity` + Set verbosity level. Valid values are: + 'ERROR', 'WARNING', 'INFO', 'VERBOSE', 'DEBUG', 'TRACE' and 'OFF'. + + +FILES +----- +~/.cdist + Your personal cdist config directory. If exists it will be + automatically used. +~/.cdist/cache + Local cache directory. +~/.cdist/inventory + The home inventory directory. If ~/.cdist exists it will be used as + default inventory directory. +~/.cdist/preos + PreOS plugins directory, if existing. +cdist/conf + The distribution configuration directory. It contains official types and + explorers. This path is relative to cdist installation directory. +cdist/inventory + The distribution inventory directory. + This path is relative to cdist installation directory. +cdist/preos + The distribution PreOS plugins directory. +/etc/cdist.cfg + Global cdist configuration file, if exists. +~/.cdist.cfg or $XDG_CONFIG_HOME/cdist/cdist.cfg + Local cdist configuration file, if exists. + +NOTES +----- +cdist detects if host is specified by IPv6 address. If so then remote_copy +command is executed with host address enclosed in square brackets +(see :strong:`scp`\ (1)). + +EXAMPLES +-------- + +.. code-block:: sh + + # Configure ikq05.ethz.ch with debug enabled + % cdist config -vvv ikq05.ethz.ch + + # Configure hosts in parallel and use a different configuration directory + % cdist config -c ~/p/cdist-nutzung \ + -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch + + # Use custom remote exec / copy commands + % cdist config --remote-exec /path/to/my/remote/exec \ + --remote-copy /path/to/my/remote/copy \ + -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch + + # Configure hosts read from file loadbalancers + % cdist config -f loadbalancers + + # Configure hosts read from file web.hosts using 16 parallel jobs + % cdist config -j 16 -f web.hosts + + # Display banner + cdist banner + + # Show help + % cdist --help + + # Show Version + % cdist --version + + # Enter a shell that has access to emulated types + % cdist shell + % __git + usage: __git --source SOURCE [--state STATE] [--branch BRANCH] + [--group GROUP] [--owner OWNER] [--mode MODE] object_id + + # Install ikq05.ethz.ch with debug enabled + % cdist install -vvv ikq05.ethz.ch + + # List inventory content + % cdist inventory list -b + + # List inventory for specified host localhost + % cdist inventory list -b localhost + + # List inventory for specified tag loadbalancer + % cdist inventory list -b -t loadbalancer + + # Add hosts to inventory + % cdist inventory add-host -b web1 web2 web3 + + # Delete hosts from file old-hosts from inventory + % cdist inventory del-host -b -f old-hosts + + # Add tags to specified hosts + % cdist inventory add-tag -b -t europe,croatia,web,static web1 web2 + + # Add tag to all hosts in inventory + % cdist inventory add-tag -b -t vm + + # Delete all tags from specified host + % cdist inventory del-tag -b -a localhost + + # Delete tags read from stdin from hosts specified by file hosts + % cdist inventory del-tag -b -T - -f hosts + + # Configure hosts from inventory with any of specified tags + % cdist config -b -t web dynamic + + # Configure hosts from inventory with all specified tags + % cdist config -b -t -a web dynamic + + # Configure all hosts from inventory db + $ cdist config -b -A + + # Create default debian PreOS in debug mode + $ cdist preos debian /preos/preos-debian -vvvv -C \ + -k ~/.ssh/id_rsa.pub -p /preos/pxe-debian + + # Create ubuntu PreOS + $ cdist preos ubuntu /preos/preos-ubuntu -C \ + -k ~/.ssh/id_rsa.pub -p /preos/pxe-ubuntu + + # Create ubuntu PreOS on drive /dev/sdb + # and set root password to 'password'. + $ cdist preos ubuntu /mnt -B -C \ + -k ~/.ssh/id_rsa.pub -D /dev/sdb \ + -P password + + +ENVIRONMENT +----------- +TMPDIR, TEMP, TMP + Setup the base directory for the temporary directory. + See http://docs.python.org/py3k/library/tempfile.html for + more information. This is rather useful, if the standard + directory used does not allow executables. + +CDIST_PATH + Colon delimited list of config directories. + +CDIST_LOCAL_SHELL + Selects shell for local script execution, defaults to /bin/sh. + +CDIST_REMOTE_SHELL + Selects shell for remote script execution, defaults to /bin/sh. + +CDIST_OVERRIDE + Allow overwriting type parameters. + +CDIST_ORDER_DEPENDENCY + Create dependencies based on the execution order. + Note that in version 6.2.0 semantic of this processing mode is + finally fixed and well defined. + +CDIST_REMOTE_EXEC + Use this command for remote execution (should behave like ssh). + +CDIST_REMOTE_COPY + Use this command for remote copy (should behave like scp). + +CDIST_INVENTORY_DIR + Use this directory as inventory directory. + +CDIST_BETA + Enable beta functionality. + +CDIST_CACHE_PATH_PATTERN + Custom cache path pattern. + +CDIST_COLORED_OUTPUT + Colorize cdist's output. cf. the :code:`--colors` option. + +CDIST_CONFIG_FILE + Custom configuration file. + + +EXIT STATUS +----------- +The following exit values shall be returned: + +0 Successful completion. + +1 One or more host configurations failed. + + +AUTHORS +------- +Originally written by Nico Schottelius +and Steven Armstrong . + + +CAVEATS +------- +When operating in parallel, either by operating in parallel for each host +(-p/--parallel) or by parallel jobs within a host (-j/--jobs), and depending +on target SSH server and its configuration you may encounter connection drops. +This is controlled with sshd :strong:`MaxStartups` configuration options. +You may also encounter session open refusal. This happens with ssh multiplexing +when you reach maximum number of open sessions permitted per network +connection. In this case ssh will disable multiplexing. +This limit is controlled with sshd :strong:`MaxSessions` configuration +options. For more details refer to :strong:`sshd_config`\ (5). + +When requirements for the same object are defined in different manifests (see +example below), for example, in init manifest and in some other type manifest +and those requirements differ then dependency resolver cannot detect +dependencies correctly. This happens because cdist cannot prepare all objects first +and run all objects afterwards. Some object can depend on the result of type +explorer(s) and explorers are executed during object run. cdist will detect +such case and display a warning message. An example of such a case: + +.. code-block:: sh + + init manifest: + __a a + require="__e/e" __b b + require="__f/f" __c c + __e e + __f f + require="__c/c" __d d + __g g + __h h + + type __g manifest: + require="__c/c __d/d" __a a + + Warning message: + WARNING: cdisttesthost: Object __a/a already exists with requirements: + /usr/home/darko/ungleich/cdist/cdist/test/config/fixtures/manifest/init-deps-resolver /tmp/tmp.cdist.test.ozagkg54/local/759547ff4356de6e3d9e08522b0d0807/data/conf/type/__g/manifest: set() + /tmp/tmp.cdist.test.ozagkg54/local/759547ff4356de6e3d9e08522b0d0807/data/conf/type/__g/manifest: {'__c/c', '__d/d'} + Dependency resolver could not handle dependencies as expected. + +COPYING +------- +Copyright \(C) 2011-2020 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__acl.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__acl.rst.txt new file mode 100644 index 00000000..28412871 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__acl.rst.txt @@ -0,0 +1,110 @@ +cdist-type__acl(7) +================== + +NAME +---- +cdist-type__acl - Set ACL entries + + +DESCRIPTION +----------- +Fully supported and tested on Linux (ext4 filesystem), partial support for FreeBSD. + +See ``setfacl`` and ``acl`` manpages for more details. + + +REQUIRED MULTIPLE PARAMETERS +---------------------------- +entry + Set ACL entry following ``getfacl`` output syntax. + + +OPTIONAL PARAMETERS +------------------- +source + Read ACL entries from stdin or file. + Ordering of entries is not important. + When reading from file, comments and empty lines are ignored. + +file + Create/change file with ``__file`` using ``user:group:mode`` pattern. + +directory + Create/change directory with ``__directory`` using ``user:group:mode`` pattern. + + +BOOLEAN PARAMETERS +------------------ +default + Set all ACL entries as default too. + Only directories can have default ACLs. + Setting default ACL in FreeBSD is currently not supported. + +recursive + Make ``setfacl`` recursive (Linux only), but not ``getfacl`` in explorer. + +remove + Remove undefined ACL entries. + ``mask`` and ``other`` entries can't be removed, but only changed. + + +DEPRECATED PARAMETERS +--------------------- +Parameters ``acl``, ``user``, ``group``, ``mask`` and ``other`` are deprecated and they +will be removed in future versions. Please use ``entry`` parameter instead. + + +EXAMPLES +-------- + +.. code-block:: sh + + __acl /srv/project \ + --default \ + --recursive \ + --remove \ + --entry user:alice:rwx \ + --entry user:bob:r-x \ + --entry group:project-group:rwx \ + --entry group:some-other-group:r-x \ + --entry mask::r-x \ + --entry other::r-x + + # give Alice read-only access to subdir, + # but don't allow her to see parent content. + + __acl /srv/project2 \ + --remove \ + --entry default:group:secret-project:rwx \ + --entry group:secret-project:rwx \ + --entry user:alice:--x + + __acl /srv/project2/subdir \ + --default \ + --remove \ + --entry group:secret-project:rwx \ + --entry user:alice:r-x + + # read acl from stdin + echo 'user:alice:rwx' \ + | __acl /path/to/directory --source - + + # create/change directory too + __acl /path/to/directory \ + --default \ + --remove \ + --directory root:root:770 \ + --entry user:nobody:rwx + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2018 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_default_release.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_default_release.rst.txt new file mode 100644 index 00000000..0277a06f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_default_release.rst.txt @@ -0,0 +1,46 @@ +cdist-type__apt_default_release(7) +================================== + +NAME +---- +cdist-type__apt_default_release - Configure the default release for apt + + +DESCRIPTION +----------- +Configure the default release for apt, using the APT::Default-Release +configuration value. + +REQUIRED PARAMETERS +------------------- +release + The value to set APT::Default-Release to. + + This can contain release name, codename or release version. Examples: + 'stable', 'testing', 'unstable', 'stretch', 'buster', '4.0', '5.0*'. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __apt_default_release --release stretch + + +AUTHORS +------- +Matthijs Kooijman + + +COPYING +------- +Copyright \(C) 2017 Matthijs Kooijman. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_key.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_key.rst.txt new file mode 100644 index 00000000..234bc715 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_key.rst.txt @@ -0,0 +1,72 @@ +cdist-type__apt_key(7) +====================== + +NAME +---- +cdist-type__apt_key - Manage the list of keys used by apt + + +DESCRIPTION +----------- +Manages the list of keys used by apt to authenticate packages. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent'. Defaults to 'present' + +keyid + the id of the key to add. Defaults to __object_id + +keyserver + the keyserver from which to fetch the key. If omitted the default set + in ./parameter/default/keyserver is used. + +keydir + key save location, defaults to ``/etc/apt/trusted.pgp.d`` + +uri + the URI from which to download the key + + +EXAMPLES +-------- + +.. code-block:: sh + + # Add Ubuntu Archive Automatic Signing Key + __apt_key 437D05B5 + # Same thing + __apt_key 437D05B5 --state present + # Get rid of it + __apt_key 437D05B5 --state absent + + # same thing with human readable name and explicit keyid + __apt_key UbuntuArchiveKey --keyid 437D05B5 + + # same thing with other keyserver + __apt_key UbuntuArchiveKey --keyid 437D05B5 --keyserver keyserver.ubuntu.com + + # download key from the internet + __apt_key rabbitmq \ + --uri http://www.rabbitmq.com/rabbitmq-signing-key-public.asc + + +AUTHORS +------- +Steven Armstrong +Ander Punnar + + +COPYING +------- +Copyright \(C) 2011-2019 Steven Armstrong and Ander Punnar. You can +redistribute it and/or modify it under the terms of the GNU General Public +License as published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_key_uri.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_key_uri.rst.txt new file mode 100644 index 00000000..82a191b9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_key_uri.rst.txt @@ -0,0 +1,51 @@ +cdist-type__apt_key_uri(7) +========================== + +NAME +---- +cdist-type__apt_key_uri - Add apt key from uri + + +DESCRIPTION +----------- +Download a key from an uri and add it to the apt keyring. + + +REQUIRED PARAMETERS +------------------- +uri + the uri from which to download the key + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + +name + a name for this key, used when testing if it is already installed. + Defaults to __object_id + + +EXAMPLES +-------- + +.. code-block:: sh + + __apt_key_uri rabbitmq \ + --name 'RabbitMQ Release Signing Key ' \ + --uri http://www.rabbitmq.com/rabbitmq-signing-key-public.asc \ + --state present + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011-2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_mark.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_mark.rst.txt new file mode 100644 index 00000000..7aa2a519 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_mark.rst.txt @@ -0,0 +1,47 @@ +cdist-type__apt_mark(7) +======================= + +NAME +---- +cdist-type__apt_mark - set package state as 'hold' or 'unhold' + + +DESCRIPTION +----------- +See apt-mark(8) for details. + + +REQUIRED PARAMETERS +------------------- +state + Either "hold" or "unhold". + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + + +EXAMPLES +-------- + +.. code-block:: sh + + # hold package + __apt_mark quagga --state hold + # unhold package + __apt_mark quagga --state unhold + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2016 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_norecommends.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_norecommends.rst.txt new file mode 100644 index 00000000..001fffe4 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_norecommends.rst.txt @@ -0,0 +1,42 @@ +cdist-type__apt_norecommends(7) +=============================== + +NAME +---- +cdist-type__apt_norecommends - Configure apt to not install recommended packages + + +DESCRIPTION +----------- +Configure apt to not install any recommended or suggested packages. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __apt_norecommends + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_ppa.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_ppa.rst.txt new file mode 100644 index 00000000..8347c908 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_ppa.rst.txt @@ -0,0 +1,50 @@ +cdist-type__apt_ppa(7) +====================== + +NAME +---- +cdist-type__apt_ppa - Manage ppa repositories + + +DESCRIPTION +----------- +This cdist type allows manage ubuntu ppa repositories. + + +REQUIRED PARAMETERS +------------------- +state + The state the ppa should be in, either 'present' or 'absent'. + Defaults to 'present' + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Enable a ppa repository + __apt_ppa ppa:sans-intern/missing-bits + # same as + __apt_ppa ppa:sans-intern/missing-bits --state present + + # Disable a ppa repository + __apt_ppa ppa:sans-intern/missing-bits --state absent + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011-2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_source.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_source.rst.txt new file mode 100644 index 00000000..d1acb388 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_source.rst.txt @@ -0,0 +1,70 @@ +cdist-type__apt_source(7) +========================= + +NAME +---- +cdist-type__apt_source - Manage apt sources + + +DESCRIPTION +----------- +This cdist type allows you to manage apt sources. It invokes index update +internally when needed so call of index updating type is not needed. + + +REQUIRED PARAMETERS +------------------- +uri + the uri to the apt repository + + +OPTIONAL PARAMETERS +------------------- +arch + set this if you need to force and specific arch (ubuntu specific) + +state + 'present' or 'absent', defaults to 'present' + +distribution + the distribution codename to use. Defaults to DISTRIB_CODENAME from + the targets /etc/lsb-release + +component + space delimited list of components to enable. Defaults to an empty string. + + +BOOLEAN PARAMETERS +------------------ +include-src + include deb-src entries + + +EXAMPLES +-------- + +.. code-block:: sh + + __apt_source rabbitmq \ + --uri http://www.rabbitmq.com/debian/ \ + --distribution testing \ + --component main \ + --include-src \ + --state present + + __apt_source canonical_partner \ + --uri http://archive.canonical.com/ \ + --component partner --state present + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011-2018 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_unattended_upgrades.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_unattended_upgrades.rst.txt new file mode 100644 index 00000000..2231b5f9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_unattended_upgrades.rst.txt @@ -0,0 +1,68 @@ +cdist-type__apt_unattended_upgrades(7) +====================================== + +NAME +---- +cdist-type__apt_unattended_upgrades - automatic installation of updates + + +DESCRIPTION +----------- + +Install and configure unattended-upgrades package. + +For more information see https://wiki.debian.org/UnattendedUpgrades. + + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- +option + Set options for unattended-upgrades. See examples. + + Supported options with default values (as of 2020-01-17) are: + + - AutoFixInterruptedDpkg, default is "true" + - MinimalSteps, default is "true" + - InstallOnShutdown, default is "false" + - Mail, default is "" (empty) + - MailOnlyOnError, default is "false" + - Remove-Unused-Kernel-Packages, default is "true" + - Remove-New-Unused-Dependencies, default is "true" + - Remove-Unused-Dependencies, default is "false" + - Automatic-Reboot, default is "false" + - Automatic-Reboot-WithUsers, default is "true" + - Automatic-Reboot-Time, default is "02:00" + - SyslogEnable, default is "false" + - SyslogFacility, default is "daemon" + - OnlyOnACPower, default is "true" + - Skip-Updates-On-Metered-Connections, default is "true" + - Verbose, default is "false" + - Debug, default is "false" + +blacklist + Python regular expressions, matching packages to exclude from upgrading. + + +EXAMPLES +-------- + +.. code-block:: sh + + __apt_unattended_upgrades \ + --option Mail=root \ + --option MailOnlyOnError=true \ + --blacklist multipath-tools \ + --blacklist open-iscsi + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_update_index.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_update_index.rst.txt new file mode 100644 index 00000000..3031902f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__apt_update_index.rst.txt @@ -0,0 +1,41 @@ +cdist-type__apt_update_index(7) +=============================== + +NAME +---- +cdist-type__apt_update_index - Update apt's package index + + +DESCRIPTION +----------- +This cdist type runs apt-get update whenever any apt sources have changed. + + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __apt_update_index + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__block.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__block.rst.txt new file mode 100644 index 00000000..90e50381 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__block.rst.txt @@ -0,0 +1,82 @@ +cdist-type__block(7) +==================== + +NAME +---- +cdist-type__block - Manage blocks of text in files + + +DESCRIPTION +----------- +Manage a block of text in an existing file. +The block is identified using the prefix and suffix parameters. +Everything between prefix and suffix is considered to be a managed block +of text. + + +REQUIRED PARAMETERS +------------------- +text + the text to manage. + If text is '-' (dash), take what was written to stdin as the text. + + +OPTIONAL PARAMETERS +------------------- +file + the file in which to manage the text block. + Defaults to object_id. + +prefix + the prefix to add before the text. + Defaults to #cdist:__block/$__object_id + +suffix + the suffix to add after the text. + Defaults to #/cdist:__block/$__object_id + +state + 'present' or 'absent', defaults to 'present' + + +MESSAGES +-------- +add + block was added +update + block was updated/changed +remove + block was removed + + +EXAMPLES +-------- + +.. code-block:: sh + + # text from argument + __block /path/to/file \ + --prefix '#start' \ + --suffix '#end' \ + --text 'some\nblock of\ntext' + + # text from stdin + __block some-id \ + --file /path/to/file \ + --text - << DONE + here some block + of text + DONE + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2013 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ccollect_source.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ccollect_source.rst.txt new file mode 100644 index 00000000..b0c23482 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ccollect_source.rst.txt @@ -0,0 +1,78 @@ +cdist-type__ccollect_source(7) +============================== + +NAME +---- +cdist-type__ccollect_source - Manage ccollect sources + + +DESCRIPTION +----------- +This cdist type allows you to create or delete ccollect sources. + + +REQUIRED PARAMETERS +------------------- +source + The source from which to backup +destination + The destination directory + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' +ccollectconf + The CCOLLECT_CONF directory. Defaults to /etc/ccollect. + + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- +exclude + Paths to exclude of backup + + +BOOLEAN PARAMETERS +------------------ +verbose + Whether to report backup verbosely + +create-destination + Create the directory specified in the destination parameter on the remote host + +EXAMPLES +-------- + +.. code-block:: sh + + __ccollect_source doc.ungleich.ch \ + --source doc.ungleich.ch:/ \ + --destination /backup/doc.ungleich.ch \ + --exclude '/proc/*' --exclude '/sys/*' \ + --verbose + + __ccollect_source doc.ungleich.ch \ + --source doc.ungleich.ch:/ \ + --destination /backup/doc.ungleich.ch \ + --exclude '/proc/*' --exclude '/sys/*' \ + --verbose \ + --create-destination + + +SEE ALSO +-------- +:strong:`ccollect`\ (1) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__cdist.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__cdist.rst.txt new file mode 100644 index 00000000..be082781 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__cdist.rst.txt @@ -0,0 +1,63 @@ +cdist-type__cdist(7) +==================== + +NAME +---- +cdist-type__cdist - Manage cdist installations + + +DESCRIPTION +----------- +This cdist type allows you to easily setup cdist +on another box, to allow the other box to configure +systems. + +This type is *NOT* required by target hosts. +It is only helpful to build FROM which you configure +other hosts. + +This type will use git to clone + + +REQUIRED PARAMETERS +------------------- + +OPTIONAL PARAMETERS +------------------- +username + Select the user to create for the cdist installation. + Defaults to "cdist". + +source + Select the source from which to clone cdist from. + Defaults to "git@code.ungleich.ch:ungleich-public/cdist.git". + + +branch + Select the branch to checkout from. + Defaults to "master". + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install cdist for user cdist in her home as subfolder cdist + __cdist /home/cdist/cdist + + # Use alternative source + __cdist --source "git@code.ungleich.ch:ungleich-public/cdist.git" /home/cdist/cdist + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__cdistmarker.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__cdistmarker.rst.txt new file mode 100644 index 00000000..f3a8bafe --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__cdistmarker.rst.txt @@ -0,0 +1,55 @@ +cdist-type__cdistmarker(7) +========================== + +NAME +---- +cdist-type__cdistmarker - Add a timestamped cdist marker. + + +DESCRIPTION +----------- +This type is used to add a common marker file which indicates that a given +machine is being managed by cdist. The contents of this file consist of a +timestamp, which can be used to determine the most recent time at which cdist +was run against the machine in question. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +destination + The path and filename of the marker. + Default: /etc/cdist-configured + +format + The format of the timestamp. This is passed directly to system 'date'. + Default: -u + + +EXAMPLES +-------- + +.. code-block:: sh + + # Creates the marker as normal. + __cdistmarker + + # Creates the marker differently. + __cdistmarker --destination /tmp/cdist_marker --format '+%s' + + +AUTHORS +------- +Daniel Maher + + +COPYING +------- +Copyright \(C) 2011 Daniel Maher. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__check_messages.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__check_messages.rst.txt new file mode 100644 index 00000000..5c80a0ae --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__check_messages.rst.txt @@ -0,0 +1,52 @@ +cdist-type__check_messages(7) +============================= + +NAME +---- +cdist-type__check_messages - Check messages for pattern and execute command on match. + + +DESCRIPTION +----------- +Check messages for pattern and execute command on match. + +This type is useful if you chain together multiple related types using +dependencies and want to restart service if at least one type changes +something. + +For more information about messages see `cdist messaging `_. + +For more information about dependencies and execution order see +`cdist manifest `_ documentation. + + +REQUIRED PARAMETERS +------------------- +pattern + Extended regular expression pattern for search (passed to ``grep -E``). + +execute + Command to execute on pattern match. + + +EXAMPLES +-------- + +.. code-block:: sh + + __check_messages munin \ + --pattern '^__(file|link|line)/etc/munin/' \ + --execute 'service munin-node restart' + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2019 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__chroot_mount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__chroot_mount.rst.txt new file mode 100644 index 00000000..41fd496b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__chroot_mount.rst.txt @@ -0,0 +1,55 @@ +cdist-type__chroot_mount(7) +=========================== + +NAME +---- +cdist-type__chroot_mount - mount a chroot + + +DESCRIPTION +----------- +Mount and prepare a chroot for running commands within it. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +manage-resolv-conf + manage /etc/resolv.conf inside the chroot. + Use the value of this parameter as the suffix to save a copy + of the current /etc/resolv.conf to /etc/resolv.conf.$suffix. + This is used by the __chroot_umount type to restore the initial + file content when unmounting the chroot. + + +BOOLEAN PARAMETERS +------------------ +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __chroot_mount /path/to/chroot + + __chroot_mount /path/to/chroot \ + --manage-resolv-conf "some-known-string" + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012-2017 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__chroot_umount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__chroot_umount.rst.txt new file mode 100644 index 00000000..2a15f362 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__chroot_umount.rst.txt @@ -0,0 +1,60 @@ +cdist-type__chroot_umount(7) +============================ + +NAME +---- +cdist-type__chroot_umount - unmount a chroot mounted by __chroot_mount + + +DESCRIPTION +----------- +Undo what __chroot_mount did. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +manage-resolv-conf + manage /etc/resolv.conf inside the chroot. + Use the value of this parameter as the suffix to find the backup file + that was saved by the __chroot_mount. + This is used by the to restore the initial file content when unmounting + the chroot. + + +BOOLEAN PARAMETERS +------------------ +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __chroot_umount /path/to/chroot + + __chroot_umount /path/to/chroot \ + --manage-resolv-conf "some-known-string" + + +SEE ALSO +-------- +:strong:`cdist-type__chroot_mount`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012-2017 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__clean_path.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__clean_path.rst.txt new file mode 100644 index 00000000..31d90701 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__clean_path.rst.txt @@ -0,0 +1,68 @@ +cdist-type__clean_path(7) +========================= + +NAME +---- +cdist-type__clean_path - Remove files and directories which match the pattern. + + +DESCRIPTION +----------- +Remove files and directories which match the pattern. + +Provided path must be a directory. + +Patterns are passed to ``find``'s ``-regex`` - see ``find(1)`` for more details. + +Look up of files and directories is non-recursive (``-maxdepth 1``). + +Parent directory is excluded (``-mindepth 1``). + +This type is not POSIX compatible (sorry, Solaris users). + + +REQUIRED PARAMETERS +------------------- +pattern + Pattern of files which are removed from path. + + +OPTIONAL PARAMETERS +------------------- +path + Path which will be cleaned. Defaults to ``$__object_id``. + +exclude + Pattern of files which are excluded from removal. + +onchange + The code to run if files or directories were removed. + + +EXAMPLES +-------- + +.. code-block:: sh + + __clean_path /etc/apache2/conf-enabled \ + --pattern '.+' \ + --exclude '.+\(charset\.conf\|security\.conf\)' \ + --onchange 'service apache2 restart' + + __clean_path apache2-conf-enabled \ + --path /etc/apache2/conf-enabled \ + --pattern '.+' \ + --exclude '.+\(charset\.conf\|security\.conf\)' \ + --onchange 'service apache2 restart' + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2019 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__config_file.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__config_file.rst.txt new file mode 100644 index 00000000..5e0e58bd --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__config_file.rst.txt @@ -0,0 +1,64 @@ +cdist-type__config_file(7) +========================== + +NAME +---- +cdist-type__config_file - _Manages config files + + +DESCRIPTION +----------- +Deploy config files using the file type. +Run the given code if the files changes. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +group + see cdist-type__file +mode + see cdist-type__file +onchange + the code to run if the file changes +owner + see cdist-type__file +source + Path to the config file. + If source is '-' (dash), take what was written to stdin as the config file content. +state + see cdist-type__file + + +EXAMPLES +-------- + +.. code-block:: sh + + __config_file /etc/consul/conf.d/watch_foo.json \ + --owner root --group consul --mode 640 \ + --source "$__type/files/watch_foo.json" \ + --state present \ + --onchange 'service consul status >/dev/null && service consul reload || true' + + +SEE ALSO +-------- +:strong:`cdist-type__file`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul.rst.txt new file mode 100644 index 00000000..5b2db50a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul.rst.txt @@ -0,0 +1,75 @@ +cdist-type__consul(7) +===================== + +NAME +---- +cdist-type__consul - Install consul + + +DESCRIPTION +----------- +Downloads and installs the consul binary from https://dl.bintray.com/mitchellh/consul. +Note that the consul binary is downloaded on the server (the machine running +cdist) and then deployed to the target host using the __file type unless --direct +parameter is used. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + either 'present' or 'absent'. Defaults to 'present' + +version + which version of consul to install. See ./files/versions for a list of + supported versions. Defaults to the latest known version. + + +BOOLEAN PARAMETERS +------------------ +direct + Download and deploy consul binary directly on the target machine. + + +MESSAGES +-------- +If consul binary is created using __staged_file then underlaying __file type messages are emitted. + +If consul binary is created by direct method then the following messages are emitted: + +/usr/local/bin/consul created + consul binary was created + + +EXAMPLES +-------- + +.. code-block:: sh + + # just install using defaults + __consul + + # install by downloading consul binary directly on the target machine + __consul --direct + + # specific version + __consul \ + --version 0.4.1 + + +AUTHORS +------- +| Steven Armstrong +| Darko Poljak + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_agent.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_agent.rst.txt new file mode 100644 index 00000000..62ee70bb --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_agent.rst.txt @@ -0,0 +1,184 @@ +cdist-type__consul_agent(7) +=========================== + +NAME +---- +cdist-type__consul_agent - Manage the consul agent + + +DESCRIPTION +----------- +Configure and manage the consul agent. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +acl-datacenter + only used by servers. This designates the datacenter which is authoritative + for ACL information. + +acl-default-policy + either "allow" or "deny"; defaults to "allow". The default policy controls the + behavior of a token when there is no matching rule. + +acl-down-policy + either "allow", "deny" or "extend-cache"; "extend-cache" is the default. + +acl-master-token + only used for servers in the acl_datacenter. This token will be created with + management-level permissions if it does not exist. It allows operators to + bootstrap the ACL system with a token ID that is well-known. + +acl-token + when provided, the agent will use this token when making requests to the + Consul servers. + +acl-ttl + used to control Time-To-Live caching of ACLs. + +bind-addr + sets the bind address for cluster communication + +bootstrap-expect + sets server to expect bootstrap mode + +ca-file-source + path to a PEM encoded certificate authority file which will be uploaded and + configure using the ca_file config option. + +cert-file-source + path to a PEM encoded certificate file which will be uploaded and + configure using the cert_file config option. + +client-addr + sets the address to bind for client access + +datacenter + datacenter of the agent + +encrypt + provides the gossip encryption key + +group + the primary group for the agent + +json-config + path to a partial json config file without leading { and trailing }. + If json-config is '-' (dash), take what was written to stdin as the file content. + +key-file-source + path to a PEM encoded private key file which will be uploaded and + configure using the key_file config option. + +node-name + name of this node. Must be unique in the cluster + +retry-join + address to attempt joining every retry_interval until at least one join works. + Can be specified multiple times. + +user + the user to run the agent as + +state + if the agent is 'present' or 'absent'. Defaults to 'present'. + Currently state=absent is not working due to some dependency issues. + + +BOOLEAN PARAMETERS +------------------ +disable-remote-exec + disables support for remote execution. When set to true, the agent will ignore any incoming remote exec requests. + +disable-update-check + disables automatic checking for security bulletins and new version releases + +leave-on-terminate + gracefully leave cluster on SIGTERM + +rejoin-after-leave + rejoin the cluster using the previous state after leaving + +server + used to control if an agent is in server or client mode + +enable-syslog + enables logging to syslog + +verify-incoming + enforce the use of TLS and verify a client's authenticity on incoming connections + +verify-outgoing + enforce the use of TLS and verify the peers authenticity on outgoing connections + +use-distribution-package + uses distribution package instead of upstream binary + + +EXAMPLES +-------- + +.. code-block:: sh + + # configure as server, bootstrap and rejoin + hostname="$(cat "$__global/explorer/hostname")" + __consul_agent \ + --datacenter dc1 \ + --node-name "${hostname%%.*}" \ + --disable-update-check \ + --server \ + --rejoin-after-leave \ + --bootstrap-expect 3 \ + --retry-join consul-01 \ + --retry-join consul-02 \ + --retry-join consul-03 + + # configure as server, bootstrap and rejoin with ssl support + hostname="$(cat "$__global/explorer/hostname")" + __consul_agent \ + --datacenter dc1 \ + --node-name "${hostname%%.*}" \ + --disable-update-check \ + --server \ + --rejoin-after-leave \ + --bootstrap-expect 3 \ + --retry-join consul-01 \ + --retry-join consul-02 \ + --retry-join consul-03 \ + --ca-file-source /path/to/ca.pem \ + --cert-file-source /path/to/cert.pem \ + --key-file-source /path/to/key.pem \ + --verify-incoming \ + --verify-outgoing + + # configure as client and try joining existing cluster + __consul_agent \ + --datacenter dc1 \ + --node-name "${hostname%%.*}" \ + --disable-update-check \ + --retry-join consul-01 \ + --retry-join consul-02 \ + --retry-join consul-03 + + +SEE ALSO +-------- +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_check.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_check.rst.txt new file mode 100644 index 00000000..9694c7af --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_check.rst.txt @@ -0,0 +1,102 @@ +cdist-type__consul_check(7) +============================= + +NAME +---- +cdist-type__consul_check - Manages consul checks + + +DESCRIPTION +----------- +Generate and deploy check definitions for a consul agent. +See http://www.consul.io/docs/agent/checks.html for parameter documentation. + +Use either script together with interval, or use ttl. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +docker-container-id + the id of the docker container to run + +http + the url to check + +id + The id of this check. + +interval + the interval in which the check should run + +name + The name of this check. Defaults to __object_id + +notes + human readable description + +script + the shell command to run + +service-id + the id of the service this check is bound to + +shell + the shell to run inside the docker container + +state + if this check is 'present' or 'absent'. Defaults to 'present'. + +status + specify the initial state of this health check + +tcp + the host and port to check + +timeout + after how long to timeout checks which take to long + +token + ACL token to use for interacting with the catalog + +ttl + how long a TTL check is considered healthy without being updated through the + HTTP interface + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_check redis \ + --script /usr/local/bin/check_redis.py \ + --interval 10s + + __consul_check some-object-id \ + --id web-app \ + --name "Web App Status" \ + --notes "Web app does a curl internally every 10 seconds" \ + --ttl 30s + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015-2016 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_reload.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_reload.rst.txt new file mode 100644 index 00000000..f48a041a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_reload.rst.txt @@ -0,0 +1,42 @@ +cdist-type__consul_reload(7) +============================ + +NAME +---- +cdist-type__consul_reload - Reload consul + + +DESCRIPTION +----------- +Reload consul after configuration changes. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_reload + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_service.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_service.rst.txt new file mode 100644 index 00000000..510be3d5 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_service.rst.txt @@ -0,0 +1,85 @@ +cdist-type__consul_service(7) +============================= + +NAME +---- +cdist-type__consul_service - Manages consul services + + +DESCRIPTION +----------- +Generate and deploy service definitions for a consul agent. +See http://www.consul.io/docs/agent/services.html for parameter documentation. + +Use either script together with interval, or use ttl. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +check-interval + the interval in which the script given with --check-script should be run + +check-http + the URL to check for HTTP 200-ish status every --check-interval + +check-script + the shell command to run every --check-interval + +check-ttl + how long a service is considered healthy without being updated through the + HTTP interfave + +id + Defaults to --name + +name + The name of this service. Defaults to __object_id + +port + the port at which this service can be reached + +state + if this service is 'present' or 'absent'. Defaults to 'present'. + +tag + a tag to add to this service. Can be specified multiple times. + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_service redis \ + --tag master \ + --tag production \ + --port 8000 \ + --check-script /usr/local/bin/check_redis.py \ + --check-interval 10s + + __consul_service webapp \ + --port 80 \ + --check-ttl 10s + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_template.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_template.rst.txt new file mode 100644 index 00000000..f13c699d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_template.rst.txt @@ -0,0 +1,141 @@ +cdist-type__consul_template(7) +============================== + +NAME +---- +cdist-type__consul_template - Manage the consul-template service + + +DESCRIPTION +----------- +Downloads and installs the consul-template binary from +https://github.com/hashicorp/consul-template/releases/download/. +Generates a global config file and creates directory for per template config files. +Note that the consul-template binary is downloaded on the server (the machine running +cdist) and then deployed to the target host using the __file type. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +auth-username + specify a username for basic authentication. + +auth-password + specify a password for basic authentication. + +batch-size + the size of the batch when polling multiple dependencies. + +consul + the location of the Consul instance to query (may be an IP address or FQDN) with port. + Defaults to 'localhost:8500'. + +log-level + The log level for output. This applies to the stdout/stderr logging as well + as syslog logging (if enabled). Valid values are "debug", "info", "warn", + and "err". The default value is "warn". + +max-stale + the maximum staleness of a query. If specified, Consul will distribute work among all + servers instead of just the leader. + +retry + the amount of time to wait if Consul returns an error when communicating + with the API. + +state + either 'present' or 'absent'. Defaults to 'present' + +ssl-cert + Path to an SSL client certificate to use to authenticate to the consul server. + Useful if the consul server "verify_incoming" option is set. + +ssl-ca-cert + Path to a CA certificate file, containing one or more CA certificates to + use to validate the certificate sent by the consul server to us. This is a + handy alternative to setting --ssl-no-verify if you are using your own CA. + +syslog-facility + The facility to use when sending to syslog. This requires the use of --syslog. + The default value is LOCAL0. + +token + the Consul API token. + +vault-address + the location of the Vault instance to query (may be an IP address or FQDN) with port. + +vault-token + the Vault API token. + +vault-ssl-cert + Path to an SSL client certificate to use to authenticate to the vault server. + +vault-ssl-ca-cert + Path to a CA certificate file, containing one or more CA certificates to + use to validate the certificate sent by the vault server to us. + +version + which version of consul-template to install. See ./files/versions for a list of + supported versions. Defaults to the latest known version. + +wait + the minimum(:maximum) to wait before rendering a new template to disk and + triggering a command, separated by a colon (:). If the optional maximum + value is omitted, it is assumed to be 4x the required minimum value. + + +BOOLEAN PARAMETERS +------------------ +ssl + use HTTPS while talking to Consul. Requires the Consul server to be configured to serve secure connections. + +ssl-no-verify + ignore certificate warnings. Only used if ssl is enabled. + +syslog + Send log output to syslog (in addition to stdout and stderr). + +vault-ssl + use HTTPS while talking to Vault. Requires the Vault server to be configured to serve secure connections. + +vault-ssl-no-verify + ignore certificate warnings. Only used if vault is enabled. + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_template \ + --consul consul.service.consul:8500 \ + --retry 30s + + # specific version + __consul_template \ + --version 0.6.5 \ + --retry 30s + + +SEE ALSO +-------- +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_template_template.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_template_template.rst.txt new file mode 100644 index 00000000..b2e3820b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_template_template.rst.txt @@ -0,0 +1,84 @@ +cdist-type__consul_template_template(7) +======================================= + +NAME +---- +cdist-type__consul_template_template - Manage consul-template templates + + +DESCRIPTION +----------- +Generate and deploy template definitions for a consul-template. +See https://github.com/hashicorp/consul-template#examples for documentation. +Templates are written in the Go template format. +Either the --source or the --source-file parameter must be given. + + +REQUIRED PARAMETERS +------------------- +destination + the destination where the generated file should go. + + +OPTIONAL PARAMETERS +------------------- +command + an optional command to run after rendering the template to its destination. + +source + path to the template source. Conflicts --source-file. + +source-file + path to a local file which is uploaded using the __file type and configured + as the source. + If source is '-' (dash), take what was written to stdin as the file content. + Conflicts --source. + +state + if this template is 'present' or 'absent'. Defaults to 'present'. + +wait + The `minimum(:maximum)` time to wait before rendering a new template to + disk and triggering a command, separated by a colon (`:`). If the optional + maximum value is omitted, it is assumed to be 4x the required minimum value. + This is a numeric time with a unit suffix ("5s"). There is no default value. + The wait value for a template takes precedence over any globally-configured + wait. + + +EXAMPLES +-------- + +.. code-block:: sh + + # configure template on the target + __consul_template_template nginx \ + --source /etc/my-consul-templates/nginx.ctmpl \ + --destination /etc/nginx/nginx.conf \ + --command 'service nginx restart' + + + # upload a local file to the target and configure it + __consul_template_template nginx \ + --wait '2s:6s' \ + --source-file "$__manifest/files/nginx.ctmpl" \ + --destination /etc/nginx/nginx.conf \ + --command 'service nginx restart' + + +SEE ALSO +-------- +:strong:`cdist-type__consul_template`\ (7), :strong:`cdist-type__consul_template_config`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015-2016 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_checks.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_checks.rst.txt new file mode 100644 index 00000000..a9a9f58d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_checks.rst.txt @@ -0,0 +1,73 @@ +cdist-type__consul_watch_checks(7) +================================== + +NAME +---- +cdist-type__consul_watch_checks - Manages consul checks watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'checks' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +filter-service + filter to a specific service. Conflicts with --filter-state. + +filter-state + filter to a specific state. Conflicts with --filter-service. + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_checks some-id \ + --handler /usr/bin/my-handler.sh + + __consul_watch_checks some-id \ + --filter-service consul \ + --handler /usr/bin/my-handler.sh + + __consul_watch_checks some-id \ + --filter-state passing \ + --handler /usr/bin/my-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_event.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_event.rst.txt new file mode 100644 index 00000000..6fe60d40 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_event.rst.txt @@ -0,0 +1,66 @@ +cdist-type__consul_watch_event(7) +================================= + +NAME +---- +cdist-type__consul_watch_event - Manages consul event watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'event' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +name + restrict the watch to only events with the given name + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_event some-id \ + --handler /usr/bin/my-handler.sh + + __consul_watch_event some-id \ + --name web-deploy \ + --handler /usr/bin/my-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_key.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_key.rst.txt new file mode 100644 index 00000000..a12f8425 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_key.rst.txt @@ -0,0 +1,63 @@ +cdist-type__consul_watch_key(7) +=============================== + +NAME +---- +cdist-type__consul_watch_key - Manages consul key watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'key' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + +key + the key to watch for changes + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_key some-id \ + --key foo/bar/baz \ + --handler /usr/bin/my-key-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_keyprefix.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_keyprefix.rst.txt new file mode 100644 index 00000000..c600323c --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_keyprefix.rst.txt @@ -0,0 +1,63 @@ +cdist-type__consul_watch_keyprefix(7) +===================================== + +NAME +---- +cdist-type__consul_watch_keyprefix - Manages consul keyprefix watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'keyprefix' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + +prefix + the prefix of keys to watch for changes + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_keyprefix some-id \ + --prefix foo/ \ + --handler /usr/bin/my-prefix-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_nodes.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_nodes.rst.txt new file mode 100644 index 00000000..d886a586 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_nodes.rst.txt @@ -0,0 +1,59 @@ +cdist-type__consul_watch_nodes(7) +================================= + +NAME +---- +cdist-type__consul_watch_nodes - Manages consul nodes watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'nodes' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_nodes some-id \ + --handler /usr/bin/my-key-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_service.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_service.rst.txt new file mode 100644 index 00000000..37cabcc9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_service.rst.txt @@ -0,0 +1,83 @@ +cdist-type__consul_watch_service(7) +=================================== + +NAME +---- +cdist-type__consul_watch_service - Manages consul service watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'service' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + +service + the service to watch for changes + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + +tag + filter by tag + + +BOOLEAN PARAMETERS +------------------ +passingonly + specifies if only hosts passing all checks are displayed + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_service some-id \ + --service consul \ + --handler /usr/bin/my-handler.sh + + __consul_watch_service some-id \ + --service redis \ + --tag production \ + --handler /usr/bin/my-handler.sh + + __consul_watch_service some-id \ + --service redis \ + --tag production \ + --passingonly \ + --handler /usr/bin/my-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_services.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_services.rst.txt new file mode 100644 index 00000000..cea5f901 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__consul_watch_services.rst.txt @@ -0,0 +1,59 @@ +cdist-type__consul_watch_services(7) +==================================== + +NAME +---- +cdist-type__consul_watch_services - Manages consul services watches + + +DESCRIPTION +----------- +Generate and deploy watch definitions of type 'services' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation. + + +REQUIRED PARAMETERS +------------------- +handler + the handler to invoke when the data view updates + + +OPTIONAL PARAMETERS +------------------- +datacenter + can be provided to override the agent's default datacenter + +state + if this watch is 'present' or 'absent'. Defaults to 'present'. + +token + can be provided to override the agent's default ACL token + + +EXAMPLES +-------- + +.. code-block:: sh + + __consul_watch_services some-id \ + --handler /usr/bin/my-key-handler.sh + + +SEE ALSO +-------- +:strong:`cdist-type__consul_agent`\ (7) + +consul documentation at: . + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__cron.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__cron.rst.txt new file mode 100644 index 00000000..e39bfb5c --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__cron.rst.txt @@ -0,0 +1,89 @@ +cdist-type__cron(7) +=================== + +NAME +---- +cdist-type__cron - Installs and manages cron jobs + + +DESCRIPTION +----------- +This cdist type allows you to manage entries in a users crontab. + + +REQUIRED PARAMETERS +------------------- +user + The user who's crontab is edited +command + The command to run. + + +OPTIONAL PARAMETERS +------------------- +**NOTE**: All time-related parameters (``--minute``, ``--hour``, ``--day_of_month`` +``--month`` and ``--day_of_week``) defaults to ``*``, which means to execute it +**always**. If you set ``--hour 0`` to execute the cronjob only at midnight, it +will execute **every** minute in the first hour of the morning all days. + +state + Either present or absent. Defaults to present. +minute + See crontab(5). Defaults to * +hour + See crontab(5). Defaults to * +day_of_month + See crontab(5). Defaults to * +month + See crontab(5). Defaults to * +day_of_week + See crontab(5). Defaults to * +raw + Take whatever the user has given instead of time and date fields. + If given, all other time and date fields are ignored. + Can for example be used to specify cron EXTENSIONS like reboot, yearly etc. + See crontab(5) for the extensions if any that your cron implementation + implements. +raw_command + Take whatever the user has given in the command and ignore everything else. + If given, the command will be added to crontab. + Can for example be used to define variables like SHELL or MAILTO. + + +EXAMPLES +-------- + +.. code-block:: sh + + # run Monday to Saturday at 23:15 + __cron some-id --user root --command "/path/to/script" \ + --hour 23 --minute 15 --day_of_week 1-6 + + # run on reboot + __cron some-id --user root --command "/path/to/script" \ + --raw @reboot + + # remove cronjob + __cron some-id --user root --command "/path/to/script" --state absent + + # define default shell + __cron some-id --user root --raw_command --command "SHELL=/bin/bash" \ + --state present + + +SEE ALSO +-------- +:strong:`crontab`\ (5) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011-2013 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__daemontools.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__daemontools.rst.txt new file mode 100644 index 00000000..bc1b4d33 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__daemontools.rst.txt @@ -0,0 +1,54 @@ +cdist-type__daemontools(7) +========================== + +NAME +---- +cdist-type__daemontools - Install daemontools + + +DESCRIPTION +----------- +Install djb daemontools and (optionally) an init script. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +from-package + Package to install. Must be compatible with the original daemontools. Example: daemontools-encore. Default: daemontools. + +servicedir + Directory to scan for services. Default: `/service` + + +BOOLEAN PARAMETERS +------------------ +install-init-script + Add an init script and set it to start on boot. + + +EXAMPLES +-------- + +.. code-block:: sh + + __daemontools --from-package daemontools-encore # if you prefer + +SEE ALSO +-------- +:strong:`cdist-type__daemontools_service`\ (7) + +AUTHORS +------- +Kamila Součková + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__daemontools_service.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__daemontools_service.rst.txt new file mode 100644 index 00000000..ec1d20ff --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__daemontools_service.rst.txt @@ -0,0 +1,72 @@ +cdist-type__daemontools_service(7) +================================== + +NAME +---- +cdist-type__daemontools_service - Create a daemontools-compatible service dir. + + +DESCRIPTION +----------- +Create a directory structure compatible with daemontools-like service management. + +Note that svc must be present on the target system. + +The object ID will be used as the service name. + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +run + Command to run. exec-ing and stderr redirection will be added. One of run, run-file must be specified. + + Example: `my-program` + +run-file + File to save as /run. One of run, run-file must be specified. + + Example: + +.. code-block:: sh + + #!/bin/sh + exec 2>&1 + exec my_program + + +log-run + Command to run for log consumption. Default: `multilog t ./main` + +servicedir + Directory to install into. Default: `/service` + +BOOLEAN PARAMETERS +------------------ +None. + +EXAMPLES +-------- + +.. code-block:: sh + + require="__daemontools" __daemontools_service prometheus --run "setuidgid prometheus $GOBIN/prometheus $FLAGS" + + +SEE ALSO +-------- +:strong:`cdist-type__daemontools`\ (7) + + +AUTHORS +------- +Kamila Součková + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__debconf_set_selections.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__debconf_set_selections.rst.txt new file mode 100644 index 00000000..58c25b81 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__debconf_set_selections.rst.txt @@ -0,0 +1,53 @@ +cdist-type__debconf_set_selections(7) +===================================== + +NAME +---- +cdist-type__debconf_set_selections - Setup debconf selections + + +DESCRIPTION +----------- +On Debian and alike systems debconf-set-selections(1) can be used +to setup configuration parameters. + + +REQUIRED PARAMETERS +------------------- +file + Use the given filename as input for debconf-set-selections(1) + If filename is "-", read from stdin. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Setup configuration for nslcd + __debconf_set_selections nslcd --file /path/to/file + + # Setup configuration for nslcd from another type + __debconf_set_selections nslcd --file "$__type/files/preseed/nslcd" + + __debconf_set_selections nslcd --file - << eof + gitolite gitolite/gituser string git + eof + + +SEE ALSO +-------- +:strong:`debconf-set-selections`\ (1), :strong:`cdist-type__update_alternatives`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__directory.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__directory.rst.txt new file mode 100644 index 00000000..7755334c --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__directory.rst.txt @@ -0,0 +1,112 @@ +cdist-type__directory(7) +======================== + +NAME +---- +cdist-type__directory - Manage a directory + + +DESCRIPTION +----------- +This cdist type allows you to create or remove directories on the target. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where: + + present + the directory exists and the given attributes are set. + absent + the directory does not exist. + exists + the directory exists, but its attributes are not altered if it already + existed. + pre-exists + check that the directory exists and is indeed a directory, but do not + create or modify it. + +group + Group to chgrp to. + +mode + Unix permissions, suitable for chmod. + +owner + User to chown to. + + +BOOLEAN PARAMETERS +------------------ +parents + Whether to create parents as well (mkdir -p behaviour). + Warning: all intermediate directory permissions default + to whatever mkdir -p does. + + Usually this means root:root, 0700. + +recursive + If supplied the chgrp and chown call will run recursively. + This does *not* influence the behaviour of chmod. + +MESSAGES +-------- +chgrp + Changed group membership +chown + Changed owner +chmod + Changed mode +create + Empty directory was created +remove + Directory exists, but state is absent, directory will be removed by generated code. +remove non directory + Something other than a directory with the same name exists and was removed prior to create. + + +EXAMPLES +-------- + +.. code-block:: sh + + # A silly example + __directory /tmp/foobar + + # Remove a directory + __directory /tmp/foobar --state absent + + # Ensure /etc exists correctly + __directory /etc --owner root --group root --mode 0755 + + # Create nfs service directory, including parents + __directory /home/services/nfs --parents + + # Change permissions recursively + __directory /home/services --recursive --owner root --group root + + # Setup a temp directory + __directory /local --mode 1777 + + # Take it all + __directory /home/services/kvm --recursive --parents \ + --owner root --group root --mode 0755 --state present + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker.rst.txt new file mode 100644 index 00000000..718543a8 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker.rst.txt @@ -0,0 +1,55 @@ +cdist-type__docker(7) +===================== + +NAME +---- +cdist-type__docker - install Docker CE + + +DESCRIPTION +----------- +Installs latest Docker Community Edition package. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' +version + The specific version to install. Defaults to the special value 'latest', + meaning the version the package manager will install by default. + + +BOOLEAN PARAMETERS +------------------ +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install docker + __docker + + # Remove docker + __docker --state absent + + # Install specific version + __docker --state present --version 18.03.0.ce + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2016 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_compose.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_compose.rst.txt new file mode 100644 index 00000000..7386e737 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_compose.rst.txt @@ -0,0 +1,58 @@ +cdist-type__docker_compose(7) +============================= + +NAME +---- +cdist-type__docker_compose - install docker-compose + + +DESCRIPTION +----------- +Installs docker-compose package. +State 'absent' will not remove docker binary itself, +only docker-compose binary will be removed + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +version + Define docker_compose version, defaults to "1.9.0" + +state + 'present' or 'absent', defaults to 'present' + + +BOOLEAN PARAMETERS +------------------ +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install docker-compose + __docker_compose + + # Install version 1.9.0-rc4 + __docker_compose --version 1.9.0-rc4 + + # Remove docker-compose + __docker_compose --state absent + + +AUTHORS +------- +Dominique Roux + + +COPYING +------- +Copyright \(C) 2016 Dominique Roux. Free use of this software is +granted under the terms of the GNU General Public License version 3 or later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_config.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_config.rst.txt new file mode 100644 index 00000000..7c74c8af --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_config.rst.txt @@ -0,0 +1,55 @@ +cdist-type__docker_config(7) +============================ + +NAME +---- + +cdist-type__docker_config - Manage Docker configs + +DESCRIPTION +----------- + +This type manages Docker configs. + +OPTIONAL PARAMETERS +------------------- + +source + Path to the source file. If it is '-' (dash), read standard input. + +state + 'present' or 'absent', defaults to 'present' where: + + present + if the config does not exist, it is created + absent + the config is removed + +CAVEATS +------- + +Since Docker configs cannot be updated once created, this type tries removing +and recreating the config if it changes. If the config is used by a service at +the time of removing, then this type will fail. + +EXAMPLES +-------- + +.. code-block:: sh + + # Creates "foo" config from "bar" source file + __docker_config foo --source bar + + +AUTHORS +------- + +Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_secret.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_secret.rst.txt new file mode 100644 index 00000000..7fe69623 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_secret.rst.txt @@ -0,0 +1,54 @@ +cdist-type__docker_secret(7) +============================ + +NAME +---- + +cdist-type__docker_secret - Manage Docker secrets + +DESCRIPTION +----------- + +This type manages Docker secrets. + +OPTIONAL PARAMETERS +------------------- + +source + Path to the source file. If it is '-' (dash), read standard input. + +state + 'present' or 'absent', defaults to 'present' where: + + present + if the secret does not exist, it is created + absent + the secret is removed + +CAVEATS +------- + +Since Docker secrets cannot be updated once created, this type takes no action +if the specified secret already exists. + +EXAMPLES +-------- + +.. code-block:: sh + + # Creates "foo" secret from "bar" source file + __docker_secret foo --source bar + + +AUTHORS +------- + +Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_stack.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_stack.rst.txt new file mode 100644 index 00000000..d0597c25 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_stack.rst.txt @@ -0,0 +1,54 @@ +cdist-type__docker_stack(7) +=========================== + +NAME +---- + +cdist-type__docker_stack - Manage Docker stacks + +DESCRIPTION +----------- + +This type manages service stacks. + +.. note:: + Since there is no easy way to tell whether a stack needs to be updated, + `docker stack deploy` is being run every time this type is invoked. + However, it does not mean this type is not idempotent. If Docker does not + detect changes, the existing stack will not be updated. + +OPTIONAL PARAMETERS +------------------- + +compose-file + Path to the compose file. If it is '-' (dash), read standard input. + +state + 'present' or 'absent', defaults to 'present' where: + + present + the stack is deployed + absent + the stack is removed + +EXAMPLES +-------- + +.. code-block:: sh + + # Deploys 'foo' stack defined in 'docker-compose.yml' compose file + __docker_stack foo --compose-file docker-compose.yml + + +AUTHORS +------- + +Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_swarm.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_swarm.rst.txt new file mode 100644 index 00000000..4dc408f0 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__docker_swarm.rst.txt @@ -0,0 +1,49 @@ +cdist-type__docker_swarm(7) +=========================== + +NAME +---- + +cdist-type__docker_swarm - Manage Swarm + +DESCRIPTION +----------- + +This type can initialize Docker swarm mode. For more information about swarm +mode, see `Swarm mode overview `_. + +OPTIONAL PARAMETERS +------------------- + +state + 'present' or 'absent', defaults to 'present' where: + + present + Swarm is initialized + absent + Swarm is left + +EXAMPLES +-------- + +.. code-block:: sh + + # Initializes a swarm + __docker_swarm + + # Leaves a swarm + __docker_swarm --state absent + + +AUTHORS +------- + +Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__dog_vdi.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__dog_vdi.rst.txt new file mode 100644 index 00000000..4be1920d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__dog_vdi.rst.txt @@ -0,0 +1,59 @@ +cdist-type__dog_vdi(7) +====================== + +NAME +---- +cdist-type__dog_vdi - Manage Sheepdog VM images + + +DESCRIPTION +----------- +The dog program is used to create images for sheepdog +to be used in qemu. + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" +size + Size of the image in "dog vdi" compatible units. + + Required if state is "present". + + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create a 50G size image + __dog_vdi nico-privat.sky.ungleich.ch --size 50G + + # Create a 50G size image (more explicit) + __dog_vdi nico-privat.sky.ungleich.ch --size 50G --state present + + # Remove image + __dog_vdi nico-privat.sky.ungleich.ch --state absent + + # Remove image - keeping --size is ok + __dog_vdi nico-privat.sky.ungleich.ch --size 50G --state absent + + +SEE ALSO +-------- +:strong:`qemu`\ (1), :strong:`dog`\ (8) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__dot_file.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__dot_file.rst.txt new file mode 100644 index 00000000..ae65eb95 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__dot_file.rst.txt @@ -0,0 +1,71 @@ +cdist-type__dot_file(7) +======================== + +NAME +---- + +cdist-type__dot_file - install file under user's home directory + +DESCRIPTION +----------- + +This type installs a file (=\ *__object_id*) under user's home directory, +providing a way to install per-user configuration files. File owner +and group is deduced from user, for who file is installed. + +Unlike regular __file type, you do not need make any assumptions, +where user's home directory is. + +REQUIRED PARAMETERS +------------------- + +user + User, for who file is installed + +OPTIONAL PARAMETERS +------------------- + +mode + forwarded to :strong:`__file` type + +state + forwarded to :strong:`__file` type + +source + forwarded to :strong:`__file` type + +MESSAGES +-------- + +This type inherits all messages from :strong:`file` type, and do not add +any new. + +EXAMPLES +-------- + +.. code-block:: sh + + # Install .forward file for user 'alice'. Since state is 'present', + # user is not meant to edit this file, all changes will be overridden. + # It is good idea to put warning about it in file itself. + __dot_file .forward --user alice --source "$__files/forward" + + # Install .muttrc for user 'bob', if not already present. User can safely + # edit it, his changes will not be overwritten. + __dot_file .muttrc --user bob --source "$__files/recommended_mutt_config" --state exists + + + # Install default xmonad config for user 'eve'. Parent directory is created automatically. + __dot_file .xmonad/xmonad.hs --user eve --state exists --source "$__files/xmonad.hs" + +SEE ALSO +-------- + +**cdist-type__file**\ (7) + +COPYING +------- + +Copyright (C) 2015 Dmitry Bogatov. Free use of this software is granted +under the terms of the GNU General Public License version 3 or later +(GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__download.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__download.rst.txt new file mode 100644 index 00000000..6ec0b19a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__download.rst.txt @@ -0,0 +1,86 @@ +cdist-type__download(7) +======================= + +NAME +---- +cdist-type__download - Download a file + + +DESCRIPTION +----------- +Destination (``$__object_id``) in target host must be persistent storage +in order to calculate checksum and decide if file must be (re-)downloaded. + +By default type will try to use ``wget``, ``curl`` or ``fetch``. +If download happens in target (see ``--download``) then type will +fallback to (and install) ``wget``. + +If download happens in local machine, then environment variables like +``{http,https,ftp}_proxy`` etc can be used on cdist execution +(``http_proxy=foo cdist config ...``). + + +REQUIRED PARAMETERS +------------------- +url + File's URL. + +sum + Checksum of file going to be downloaded. + By default output of ``cksum`` without filename is expected. + Other hash formats supported with prefixes: ``md5:``, ``sha1:`` and ``sha256:``. + +onchange + Execute this command after download. + + +OPTIONAL PARAMETERS +------------------- +download + If ``local`` (default), then download file to local storage and copy + it to target host. If ``remote``, then download happens in target. + +cmd-get + Command used for downloading. + Command must output to ``stdout``. + Parameter will be used for ``printf`` and must include only one + format specification ``%s`` which will become URL. + For example: ``wget -O - '%s'``. + +cmd-sum + Command used for checksum calculation. + Command output and ``--sum`` parameter must match. + Parameter will be used for ``printf`` and must include only one + format specification ``%s`` which will become destination. + For example: ``md5sum '%s' | awk '{print $1}'``. + + +EXAMPLES +-------- + +.. code-block:: sh + + __directory /opt/cpma + + require='__directory/opt/cpma' \ + __download /opt/cpma/cnq3.zip \ + --url https://cdn.playmorepromode.com/files/cnq3/cnq3-1.51.zip \ + --sum md5:46da3021ca9eace277115ec9106c5b46 + + require='__download/opt/cpma/cnq3.zip' \ + __unpack /opt/cpma/cnq3.zip \ + --move-existing-destination \ + --destination /opt/cpma/server + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2020 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__file.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__file.rst.txt new file mode 100644 index 00000000..2f3b9e69 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__file.rst.txt @@ -0,0 +1,124 @@ +cdist-type__file(7) +=================== + +NAME +---- +cdist-type__file - Manage files. + + +DESCRIPTION +----------- +This cdist type allows you to create files, remove files and set file +attributes on the target. + +If the file already exists on the target, then if it is a: + +regular file, and state is: + present + replace it with the source file if they are not equal + exists + do nothing +symlink + replace it with the source file +directory + replace it with the source file + +One exception is that when state is pre-exists, an error is raised if +the file would have been created otherwise (e.g. it is not present or +not a regular file). + +In any case, make sure that the file attributes are as specified. + + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where: + + present + the file is exactly the one from source + absent + the file does not exist + exists + the file from source but only if it doesn't already exist + pre-exists + check that the file exists and is a regular file, but do not + create or modify it + +group + Group to chgrp to. Defaults to ``root``. + +mode + Unix permissions, suitable for chmod. Defaults to a very secure ``0600``. + +owner + User to chown to. Defaults to ``root``. + +source + If supplied, copy this file from the host running cdist to the target. + If not supplied, an empty file or directory will be created. + If source is '-' (dash), take what was written to stdin as the file content. + +onchange + The code to run if file is modified. + +MESSAGES +-------- +chgrp + Changed group membership +chown + Changed owner +chmod + Changed mode +create + Empty file was created (no --source specified) +remove + File exists, but state is absent, file will be removed by generated code. +upload + File was uploaded + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create /etc/cdist-configured as an empty file + __file /etc/cdist-configured + # The same thing + __file /etc/cdist-configured --state present + # Use __file from another type + __file /etc/issue --source "$__type/files/archlinux" --state present + # Delete existing file + __file /etc/cdist-configured --state absent + # Supply some more settings + __file /etc/shadow --source "$__type/files/shadow" \ + --owner root --group shadow --mode 0640 \ + --state present + # Provide a default file, but let the user change it + __file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ + --state exists \ + --owner frodo --mode 0600 + # Check that the file is present, show an error when it is not + __file /etc/somefile --state pre-exists + # Take file content from stdin + __file /tmp/whatever --owner root --group root --mode 644 --source - << DONE + Here goes the content for /tmp/whatever + DONE + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__filesystem.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__filesystem.rst.txt new file mode 100644 index 00000000..1c103ac9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__filesystem.rst.txt @@ -0,0 +1,81 @@ +cdist-type__filesystem(7) +========================= + +NAME +---- +cdist-type__filesystem - Create Filesystems. + + +DESCRIPTION +----------- +This cdist type allows you to create filesystems on devices. + +If the device is mounted on target, it refuses to do anything. + +If the device has a filesystem other then the specified and/or +the label is not correct, it only makes a new filesystem +if you have specified --force option. + + +REQUIRED PARAMETERS +------------------- +fstype + Filesystem type, for example 'ext3', 'btrfs' or 'xfs'. + + + +OPTIONAL PARAMETERS +------------------- +device + Blockdevice for filesystem, Defaults to object_id. + On linux, it can be any lsblk accepted device notation. + + | + | For example: + | /dev/sdx + | or /dev/disk/by-xxxx/xxx + | or /dev/mapper/xxxx + +label + Label which should be applied on the filesystem. + +mkfsoptions + Additional options which are inserted to the mkfs.xxx call. + + +BOOLEAN PARAMETERS +------------------ +force + Normally, this type does nothing if a filesystem is found + on the target device. If you specify force, it's formatted + if the filesystem type or label differs from parameters. + Warning: This option can easily lead into data loss! + +MESSAGES +-------- +filesystem on \: created + Filesystem was created on + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensures that device /dev/sdb is formatted with xfs + __filesystem /dev/sdb --fstype xfs --label Testdisk1 + # The same thing with btrfs and disk spezified by pci path to disk 1:0 on vmware + __filesystem dev_sdb --fstype btrfs --device /dev/disk/by-path/pci-0000:0b:00.0-scsi-0:0:0:0 --label Testdisk2 + # Make sure that a multipath san device has a filesystem ... + __filesystem dev_sdb --fstype xfs --device /dev/mapper/360060e80432f560050202f22000023ff --label Testdisk3 + + +AUTHORS +------- +Daniel Heule + + +COPYING +------- +Copyright \(C) 2016 Daniel Heule. Free use of this software is +granted under the terms of the GNU General Public License version 3 or any later version (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__firewalld_rule.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__firewalld_rule.rst.txt new file mode 100644 index 00000000..5de5d15c --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__firewalld_rule.rst.txt @@ -0,0 +1,81 @@ +cdist-type__firewalld_rule(7) +============================= + +NAME +---- +cdist-type__firewalld_rule - Configure firewalld rules + + +DESCRIPTION +----------- +This cdist type allows you to manage rules in firewalld +using the *direct* way (i.e. no zone support). + + +REQUIRED PARAMETERS +------------------- +rule + The rule to apply. Essentially an firewalld command + line without firewalld in front of it. +protocol + Either ipv4, ipv4 or eb. See firewall-cmd(1) +table + The table to use (like filter or nat). See firewall-cmd(1). +chain + The chain to use (like INPUT_direct or FORWARD_direct). See firewall-cmd(1). +priority + The priority to use (0 is topmost). See firewall-cmd(1). + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + + +EXAMPLES +-------- + +.. code-block:: sh + + # Allow access from entrance.place4.ungleich.ch + __firewalld_rule entrance \ + --protocol ipv4 \ + --table filter \ + --chain INPUT_direct \ + --priority 0 \ + --rule '-s entrance.place4.ungleich.ch -j ACCEPT' + + # Allow forwarding of traffic from br0 + __firewalld_rule vm-forward --protocol ipv4 \ + --table filter \ + --chain FORWARD_direct \ + --priority 0 \ + --rule '-i br0 -j ACCEPT' + + # Ensure old rule is absent - warning, the rule part must stay the same! + __firewalld_rule vm-forward + --protocol ipv4 \ + --table filter \ + --chain FORWARD_direct \ + --priority 0 \ + --rule '-i br0 -j ACCEPT' \ + --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__iptables_rule`\ (7), :strong:`firewalld`\ (8) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2015 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__firewalld_start.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__firewalld_start.rst.txt new file mode 100644 index 00000000..74199cd6 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__firewalld_start.rst.txt @@ -0,0 +1,53 @@ +cdist-type__firewalld_start(7) +============================== + +NAME +---- +cdist-type__firewalld_start - start and enable firewalld + + +DESCRIPTION +----------- +This cdist type allows you to start and enable firewalld. + + +REQUIRED PARAMETERS +------------------- +None + +OPTIONAL PARAMETERS +------------------- +startstate + 'present' or 'absent', start/stop firewalld. Default is 'present'. +bootstate + 'present' or 'absent', enable/disable firewalld on boot. Default is 'present'. + + +EXAMPLES +-------- + +.. code-block:: sh + + # start and enable firewalld + __firewalld_start + + # only enable firewalld to start on boot + __firewalld_start --startstate present --bootstate absent + + +SEE ALSO +-------- +:strong:`firewalld`\ (8) + + +AUTHORS +------- +Darko Poljak + + +COPYING +------- +Copyright \(C) 2016 Darko Poljak. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__git.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__git.rst.txt new file mode 100644 index 00000000..d3e15f25 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__git.rst.txt @@ -0,0 +1,66 @@ +cdist-type__git(7) +================== + +NAME +---- +cdist-type__git - Get and or keep git repositories up-to-date + + +DESCRIPTION +----------- +This cdist type allows you to clone git repositories + + +REQUIRED PARAMETERS +------------------- +source + Specifies the git remote to clone from + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" + +branch + Create this branch by checking out the remote branch of this name + Default branch is "master" + +group + Group to chgrp to. + +mode + Unix permissions, suitable for chmod. + +owner + User to chown to. + +recursive + Passes the --recurse-submodules flag to git when cloning the repository. + +shallow + Sets --depth=1 and --shallow-submodules for cloning repositories with big history. + + +EXAMPLES +-------- + +.. code-block:: sh + + __git /home/services/dokuwiki --source git://github.com/splitbrain/dokuwiki.git + + # Checkout cdist, stay on branch 2.1 + __git /home/nico/cdist --source git@code.ungleich.ch:ungleich-public/cdist.git --branch 2.1 + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__go_get.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__go_get.rst.txt new file mode 100644 index 00000000..66d9bdba --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__go_get.rst.txt @@ -0,0 +1,48 @@ +cdist-type__go_get(7) +===================== + +NAME +---- +cdist-type__go_get - Install go packages with go get + + +DESCRIPTION +----------- +This cdist type allows you to install golang packages with go get. +A sufficiently recent version of go must be present on the system. + +The object ID is the go package to be installed. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __go_get github.com/prometheus/prometheus/cmd/... + + # usually you'd need to require golang from somewhere: + require="__golang_from_vendor" __go_get github.com/prometheus/prometheus/cmd/... + + +AUTHORS +------- +Kamila Součková + + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__golang_from_vendor.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__golang_from_vendor.rst.txt new file mode 100644 index 00000000..2b4f065e --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__golang_from_vendor.rst.txt @@ -0,0 +1,48 @@ +cdist-type__golang_from_vendor(7) +================================= + +NAME +---- +cdist-type__golang_from_vendor - Install any version of golang from golang.org + + +DESCRIPTION +----------- +This cdist type allows you to install golang from archives provided by https://golang.org/dl/. + +See https://golang.org/dl/ for the list of supported versions, operating systems and architectures. + +This is a singleton type. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +version + The golang version to install, defaults to 1.8.1 + + +EXAMPLES +-------- + +.. code-block:: sh + + __golang_from_vendor --version 1.8.1 + + + +AUTHORS +------- +Kamila Součková + + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__grafana_dashboard.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__grafana_dashboard.rst.txt new file mode 100644 index 00000000..b3974028 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__grafana_dashboard.rst.txt @@ -0,0 +1,43 @@ +cdist-type__grafana_dashboard(7) +================================ + +NAME +---- +cdist-type__grafana_dashboard - Install Grafana (https://grafana.com) + + +DESCRIPTION +----------- +This cdist type adds the Grafana repository, installs the grafana package, and sets the server to start on boot. + +This is a singleton type. + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __grafana_dashboard + + +AUTHORS +------- +Kamila Součková + + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__group.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__group.rst.txt new file mode 100644 index 00000000..614f3d57 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__group.rst.txt @@ -0,0 +1,80 @@ +cdist-type__group(7) +==================== + +NAME +---- +cdist-type__group - Manage groups + + +DESCRIPTION +----------- +This cdist type allows you to create or modify groups on the target. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + absent or present, defaults to present +gid + see groupmod(8) +password + see above + + +BOOLEAN PARAMETERS +------------------ +system + see groupadd(8), apply only on group creation + + +MESSAGES +-------- +mod + group is modified +add + New group added +remove + group is removed +change + Changed group property from current_value to new_value +set + set property to new value, property was not set before + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create a group 'foobar' with operating system default settings + __group foobar + + # Remove the 'foobar' group + __group foobar --state absent + + # Create a system group 'myservice' with operating system default settings + __group myservice --system + + # Same but with a specific gid + __group foobar --gid 1234 + + # Same but with a gid and password + __group foobar --gid 1234 --password 'crypted-password-string' + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011-2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__hostname.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__hostname.rst.txt new file mode 100644 index 00000000..72aefbab --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__hostname.rst.txt @@ -0,0 +1,55 @@ +cdist-type__hostname(7) +======================= + +NAME +---- +cdist-type__hostname - Set the hostname + + +DESCRIPTION +----------- +Sets the hostname on various operating systems. + +**Tip:** For advice on choosing a hostname, see +`RFC 1178 `_. + + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +name + The hostname to set. Defaults to the first segment of __target_host + (${__target_host%%.*}) + + +MESSAGES +-------- +changed + Changed the hostname + +EXAMPLES +-------- + +.. code-block:: sh + + # take hostname from __target_host + __hostname + + # set hostname explicitly + __hostname --name some-static-hostname + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__hosts.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__hosts.rst.txt new file mode 100644 index 00000000..1ac706cb --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__hosts.rst.txt @@ -0,0 +1,62 @@ +cdist-type__hosts(7) +==================== + +NAME +---- + +cdist-type__hosts - manage entries in /etc/hosts + +DESCRIPTION +----------- + +Add or remove entries from */etc/hosts* file. + +OPTIONAL PARAMETERS +------------------- + +state + If state is ``present``, make *object_id* resolve to *ip*. If + state is ``absent``, *object_id* will no longer resolve via + */etc/hosts*, if it was previously configured with this type. + Manually inserted entries are unaffected. + +ip + IP address, to which hostname (=\ *object_id*) must resolve. If + state is ``present``, this parameter is mandatory, if state is + ``absent``, this parameter is silently ignored. + +alias + An alias for the hostname. + This parameter can be specified multiple times (once per alias). + +EXAMPLES +-------- + +.. code-block:: sh + + # Now `funny' resolves to 192.168.1.76, + __hosts funny --ip 192.168.1.76 + # and `happy' no longer resolve via /etc/hosts if it was + # previously configured via __hosts. + __hosts happy --state absent + + __hosts srv1.example.com --ip 192.168.0.42 --alias srv1 + +SEE ALSO +-------- + +:strong:`hosts`\ (5) + +AUTHORS +------- +| Dmitry Bogatov +| Dennis Camera + + +COPYING +------- + +Copyright \(C) 2015-2016 Dmitry Bogatov, 2019 Dennis Camera. +You can redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_bootloader_grub.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_bootloader_grub.rst.txt new file mode 100644 index 00000000..625db1d2 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_bootloader_grub.rst.txt @@ -0,0 +1,48 @@ +cdist-type__install_bootloader_grub(7) +====================================== + +NAME +---- +cdist-type__install_bootloader_grub - install grub2 bootloader on given disk + + +DESCRIPTION +----------- +This cdist type allows you to install grub2 bootloader on given disk. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +device + The device to install grub to. Defaults to object_id + +chroot + where to chroot before running grub-install. Defaults to /target. + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_bootloader_grub /dev/sda + + __install_bootloader_grub /dev/sda --chroot /mnt/foobar + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_chroot_mount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_chroot_mount.rst.txt new file mode 100644 index 00000000..4054c4c4 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_chroot_mount.rst.txt @@ -0,0 +1,42 @@ +cdist-type__install_chroot_mount(7) +=================================== + +NAME +---- +cdist-type__install_chroot_mount - mount a chroot with install command + + +DESCRIPTION +----------- +Mount and prepare a chroot for running commands within it. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +None + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_chroot_mount /path/to/chroot + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_chroot_umount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_chroot_umount.rst.txt new file mode 100644 index 00000000..2e020c01 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_chroot_umount.rst.txt @@ -0,0 +1,47 @@ +cdist-type__install_chroot_umount(7) +==================================== + +NAME +---- +cdist-type__install_chroot_umount - unmount a chroot mounted by __install_chroot_mount + + +DESCRIPTION +----------- +Undo what __install_chroot_mount did. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +None + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_chroot_umount /path/to/chroot + + +SEE ALSO +-------- +:strong:`cdist-type__install_chroot_mount`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_config.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_config.rst.txt new file mode 100644 index 00000000..0034e85d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_config.rst.txt @@ -0,0 +1,47 @@ +cdist-type__install_config(7) +============================= + +NAME +---- +cdist-type__install_config - run cdist config as part of the installation + + +DESCRIPTION +----------- +This cdist type allows you to run cdist config as part of the installation. +It does this by using a custom __remote_{copy,exec} prefix which runs +cdist config against the /target chroot on the remote host. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +chroot + where to chroot before running grub-install. Defaults to /target. + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_config + + __install_config --chroot /mnt/somewhere + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_coreos.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_coreos.rst.txt new file mode 100644 index 00000000..314f9f2a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_coreos.rst.txt @@ -0,0 +1,50 @@ +cdist-type__install_coreos(7) +============================= + +NAME +---- + +cdist-type__install_coreos - Install CoreOS + +DESCRIPTION +----------- + +This type installs CoreOS to a given device using coreos-install_, which is +present in CoreOS ISO by default. + +.. _coreos-install: https://raw.githubusercontent.com/coreos/init/master/bin/coreos-install + +REQUIRED PARAMETERS +------------------- + +device + A device CoreOS will be installed to. + +OPTIONAL PARAMETERS +------------------- + +ignition + Path to ignition config. + +EXAMPLES +-------- + +.. code-block:: sh + + __install_coreos \ + --device /dev/sda \ + --ignition ignition.json + + +AUTHORS +------- + +Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_directory.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_directory.rst.txt new file mode 100644 index 00000000..c402cbad --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_directory.rst.txt @@ -0,0 +1,101 @@ +cdist-type__install_directory(7) +================================ + +NAME +---- +cdist-type__install_directory - Manage a directory with install command + + +DESCRIPTION +----------- +This cdist type allows you to create or remove directories on the target. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + +group + Group to chgrp to. + +mode + Unix permissions, suitable for chmod. + +owner + User to chown to. + + +BOOLEAN PARAMETERS +------------------ +parents + Whether to create parents as well (mkdir -p behaviour). + Warning: all intermediate directory permissions default + to whatever mkdir -p does. + + Usually this means root:root, 0700. + +recursive + If supplied the chgrp and chown call will run recursively. + This does *not* influence the behaviour of chmod. + +MESSAGES +-------- +chgrp + Changed group membership +chown + Changed owner +chmod + Changed mode +create + Empty directory was created +remove + Directory exists, but state is absent, directory will be removed by generated code. +remove non directory + Something other than a directory with the same name exists and was removed prior to create. + + +EXAMPLES +-------- + +.. code-block:: sh + + # A silly example + __install_directory /tmp/foobar + + # Remove a directory + __install_directory /tmp/foobar --state absent + + # Ensure /etc exists correctly + __install_directory /etc --owner root --group root --mode 0755 + + # Create nfs service directory, including parents + __install_directory /home/services/nfs --parents + + # Change permissions recursively + __install_directory /home/services --recursive --owner root --group root + + # Setup a temp directory + __install_directory /local --mode 1777 + + # Take it all + __install_directory /home/services/kvm --recursive --parents \ + --owner root --group root --mode 0755 --state present + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_file.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_file.rst.txt new file mode 100644 index 00000000..977ed77c --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_file.rst.txt @@ -0,0 +1,124 @@ +cdist-type__install_file(7) +=========================== + +NAME +---- +cdist-type__install_file - Manage files with install command. + + +DESCRIPTION +----------- +This cdist type allows you to create files, remove files and set file +attributes on the target. + +If the file already exists on the target, then if it is a: + +regular file, and state is: + present + replace it with the source file if they are not equal + exists + do nothing +symlink + replace it with the source file +directory + replace it with the source file + +One exception is that when state is pre-exists, an error is raised if +the file would have been created otherwise (e.g. it is not present or +not a regular file). + +In any case, make sure that the file attributes are as specified. + + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where: + + present + the file is exactly the one from source + absent + the file does not exist + exists + the file from source but only if it doesn't already exist + pre-exists + check that the file exists and is a regular file, but do not + create or modify it + +group + Group to chgrp to. + +mode + Unix permissions, suitable for chmod. + +owner + User to chown to. + +source + If supplied, copy this file from the host running cdist to the target. + If not supplied, an empty file or directory will be created. + If source is '-' (dash), take what was written to stdin as the file content. + +onchange + The code to run if file is modified. + +MESSAGES +-------- +chgrp + Changed group membership +chown + Changed owner +chmod + Changed mode +create + Empty file was created (no --source specified) +remove + File exists, but state is absent, file will be removed by generated code. +upload + File was uploaded + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create /etc/cdist-configured as an empty file + __install_file /etc/cdist-configured + # The same thing + __install_file /etc/cdist-configured --state present + # Use __file from another type + __install_file /etc/issue --source "$__type/files/archlinux" --state present + # Delete existing file + __install_file /etc/cdist-configured --state absent + # Supply some more settings + __install_file /etc/shadow --source "$__type/files/shadow" \ + --owner root --group shadow --mode 0640 \ + --state present + # Provide a default file, but let the user change it + __install_file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ + --state exists \ + --owner frodo --mode 0600 + # Check that the file is present, show an error when it is not + __install_file /etc/somefile --state pre-exists + # Take file content from stdin + __install_file /tmp/whatever --owner root --group root --mode 644 --source - << DONE + Here goes the content for /tmp/whatever + DONE + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_fstab.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_fstab.rst.txt new file mode 100644 index 00000000..5562c139 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_fstab.rst.txt @@ -0,0 +1,53 @@ +cdist-type__install_fstab(7) +============================ + +NAME +---- +cdist-type__install_fstab - generate /etc/fstab during installation + + +DESCRIPTION +----------- +Uses __install_generate_fstab to generate a /etc/fstab file and uploads it +to the target machine at ${prefix}/etc/fstab. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +prefix + The prefix under which to generate the /etc/fstab file. + Defaults to /target. + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_fstab + + __install_fstab --prefix /mnt/target + + +SEE ALSO +-------- +:strong:`cdist-type__install_generate_fstab`\ (7), +:strong:`cdist-type__install_mount`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_generate_fstab.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_generate_fstab.rst.txt new file mode 100644 index 00000000..b38f8876 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_generate_fstab.rst.txt @@ -0,0 +1,53 @@ +cdist-type__install_generate_fstab(7) +===================================== + +NAME +---- +cdist-type__install_generate_fstab - generate /etc/fstab during installation + + +DESCRIPTION +----------- +Generates a /etc/fstab file from information retrieved from +__install_mount definitions. + + +REQUIRED PARAMETERS +------------------- +destination + The path where to store the generated fstab file. + Note that this is a path on the server, where cdist is running, not the target host. + + +OPTIONAL PARAMETERS +------------------- +None + + +BOOLEAN PARAMETERS +------------------- +uuid + use UUID instead of device in fstab + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_generate_fstab --destination /path/where/you/want/fstab + + __install_generate_fstab --uuid --destination /path/where/you/want/fstab + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_mkfs.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_mkfs.rst.txt new file mode 100644 index 00000000..6e5c9aa9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_mkfs.rst.txt @@ -0,0 +1,62 @@ +cdist-type__install_mkfs(7) +=========================== + +NAME +---- +cdist-type__install_mkfs - build a linux file system + + +DESCRIPTION +----------- +This cdist type is a wrapper for the mkfs command. + + +REQUIRED PARAMETERS +------------------- +type + The filesystem type to use. Same as used with mkfs -t. + + +OPTIONAL PARAMETERS +------------------- +device + defaults to object_id + +options + file system-specific options to be passed to the mkfs command + +blocks + the number of blocks to be used for the file system + + +EXAMPLES +-------- + +.. code-block:: sh + + # reiserfs /dev/sda5 + __install_mkfs /dev/sda5 --type reiserfs + + # same thing with explicit device + __install_mkfs whatever --device /dev/sda5 --type reiserfs + + # jfs with journal on /dev/sda2 + __install_mkfs /dev/sda1 --type jfs --options "-j /dev/sda2" + + +SEE ALSO +-------- +:strong:`mkfs`\ (8) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_mount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_mount.rst.txt new file mode 100644 index 00000000..256cef53 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_mount.rst.txt @@ -0,0 +1,65 @@ +cdist-type__install_mount(7) +============================ + +NAME +---- +cdist-type__install_mount - mount filesystems in the installer + + +DESCRIPTION +----------- +Mounts filesystems in the installer. Collects data to generate /etc/fstab. + + +REQUIRED PARAMETERS +------------------- +device + the device to mount + + +OPTIONAL PARAMETERS +------------------- +dir + where to mount device. Defaults to object_id. + +options + mount options passed to mount(8) and used in /etc/fstab + +type + filesystem type passed to mount(8) and used in /etc/fstab. + If type is swap, 'dir' is ignored. + Defaults to the filesystem used in __install_mkfs for the same 'device'. + +prefix + the prefix to prepend to 'dir' when mounting in the installer. + Defaults to /target. + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_mount slash --dir / --device /dev/sda5 --options noatime + require="__install_mount/slash" __install_mount /boot --device /dev/sda1 + __install_mount swap --device /dev/sda2 --type swap + require="__install_mount/slash" __install_mount /tmp --device tmpfs --type tmpfs + + +SEE ALSO +-------- +:strong:`cdist-type__install_mkfs`\ (7), +:strong:`cdist-type__install_mount_apply` (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_partition_msdos.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_partition_msdos.rst.txt new file mode 100644 index 00000000..c408a614 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_partition_msdos.rst.txt @@ -0,0 +1,72 @@ +cdist-type__install_partition_msdos(7) +====================================== + +NAME +---- +cdist-type__install_partition_msdos - creates msdos partitions + + +DESCRIPTION +----------- +This cdist type allows you to create msdos paritions. + + +REQUIRED PARAMETERS +------------------- +type + the partition type used in fdisk (such as 82 or 83) or "extended" + + +OPTIONAL PARAMETERS +------------------- +device + the device we're working on. Defaults to the string prefix of --partition + +minor + the partition number we're working on. Defaults to the numeric suffix of --partition + +partition + defaults to object_id + +bootable + mark partition as bootable, true or false, defaults to false + +size + the size of the partition (such as 32M or 15G, whole numbers + only), '+' for remaining space, or 'n%' for percentage of remaining + (these should only be used after all specific partition sizes are + specified). Defaults to +. + + +EXAMPLES +-------- + +.. code-block:: sh + + # 128MB, linux, bootable + __install_partition_msdos /dev/sda1 --type 83 --size 128M --bootable true + # 512MB, swap + __install_partition_msdos /dev/sda2 --type 82 --size 512M + # 100GB, extended + __install_partition_msdos /dev/sda3 --type extended --size 100G + # 10GB, linux + __install_partition_msdos /dev/sda5 --type 83 --size 10G + # 50% of the free space of the extended partition, linux + __install_partition_msdos /dev/sda6 --type 83 --size 50% + # rest of the extended partition, linux + __install_partition_msdos /dev/sda7 --type 83 --size + + # nvm device partition 2 + __install_partition_msdos /dev/nvme0n1p2 --device /dev/nvme0n1 --minor 2 --type 83 --size 128M --bootable true + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011-2017 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_partition_msdos_apply.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_partition_msdos_apply.rst.txt new file mode 100644 index 00000000..80740fde --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_partition_msdos_apply.rst.txt @@ -0,0 +1,47 @@ +cdist-type__install_partition_msdos_apply(7) +============================================ + +NAME +---- +cdist-type__install_partition_msdos_apply - Apply dos partition settings + + +DESCRIPTION +----------- +Create the partitions defined with __install_partition_msdos + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +None + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_partition_msdos_apply + + +SEE ALSO +-------- +:strong:`cdist-type__install_partition_msdos_apply`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_reboot.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_reboot.rst.txt new file mode 100644 index 00000000..9a53b37a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_reboot.rst.txt @@ -0,0 +1,42 @@ +cdist-type__install_reboot(7) +============================= + +NAME +---- +cdist-type__install_reboot - run reboot + + +DESCRIPTION +----------- +This cdist type allows you to reboot a machine. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +None + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_reboot + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_reset_disk.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_reset_disk.rst.txt new file mode 100644 index 00000000..fadeec71 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_reset_disk.rst.txt @@ -0,0 +1,43 @@ +cdist-type__install_reset_disk(7) +================================= + +NAME +---- +cdist-type__install_reset_disk - reset a disk + + +DESCRIPTION +----------- +Remove partition table. +Remove all lvm labels. +Remove mdadm superblock. + + +REQUIRED PARAMETERS +------------------- +None + +OPTIONAL PARAMETERS +------------------- +None + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_reset_disk /dev/sdb + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_stage.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_stage.rst.txt new file mode 100644 index 00000000..fd764693 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_stage.rst.txt @@ -0,0 +1,58 @@ +cdist-type__install_stage(7) +============================ + +NAME +---- +cdist-type__install_stage - download and unpack a stage file + + +DESCRIPTION +----------- +Downloads a operating system stage using curl and unpacks it to /target +using tar. The stage tarball is expected to be gzip compressed. + + +REQUIRED PARAMETERS +------------------- +uri + The uri from which to fetch the tarball. + Can be anything understood by curl, e.g: + | http://path/to/stage.tgz + | tftp:///path/to/stage.tgz + | file:///local/path/stage.tgz + + +OPTIONAL PARAMETERS +------------------- +target + where to unpack the tarball to. Defaults to /target. + + +BOOLEAN PARAMETERS +------------------ +insecure + run curl in insecure mode so it does not check the servers ssl certificate + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_stage --uri tftp:///path/to/stage.tgz + __install_stage --uri http://path/to/stage.tgz --target /mnt/foobar + __install_stage --uri file:///path/to/stage.tgz --target /target + __install_stage --uri https://path/to/stage.tgz --target /mnt/foobar --insecure + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 - 2013 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_umount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_umount.rst.txt new file mode 100644 index 00000000..59f63449 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__install_umount.rst.txt @@ -0,0 +1,43 @@ +cdist-type__install_umount(7) +============================= + +NAME +---- +cdist-type__install_umount - umount target directory + + +DESCRIPTION +----------- +This cdist type allows you to recursively umount the given target directory. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +target + the mount point to umount. Defaults to object_id + + +EXAMPLES +-------- + +.. code-block:: sh + + __install_umount /target + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__iptables_apply.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__iptables_apply.rst.txt new file mode 100644 index 00000000..76e1f6bf --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__iptables_apply.rst.txt @@ -0,0 +1,45 @@ +cdist-type__iptables_apply(7) +============================= + +NAME +---- +cdist-type__iptables_apply - Apply the rules + + +DESCRIPTION +----------- +This cdist type deploys an init script that triggers +the configured rules and also re-applies them on +configuration. + + +REQUIRED PARAMETERS +------------------- +None + +OPTIONAL PARAMETERS +------------------- +None + +EXAMPLES +-------- + +None (__iptables_apply is used by __iptables_rule) + + +SEE ALSO +-------- +:strong:`cdist-type__iptables_rule`\ (7), :strong:`iptables`\ (8) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__iptables_rule.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__iptables_rule.rst.txt new file mode 100644 index 00000000..92d8859f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__iptables_rule.rst.txt @@ -0,0 +1,66 @@ +cdist-type__iptables_rule(7) +============================ + +NAME +---- +cdist-type__iptables_rule - Deploy iptable rulesets + + +DESCRIPTION +----------- +This cdist type allows you to manage iptable rules +in a distribution independent manner. + + +REQUIRED PARAMETERS +------------------- +rule + The rule to apply. Essentially an iptables command + line without iptables in front of it. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + + +EXAMPLES +-------- + +.. code-block:: sh + + # Deploy some policies + __iptables_rule policy-in --rule "-P INPUT DROP" + __iptables_rule policy-out --rule "-P OUTPUT ACCEPT" + __iptables_rule policy-fwd --rule "-P FORWARD DROP" + + # The usual established rule + __iptables_rule established --rule "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT" + + # Some service rules + __iptables_rule http --rule "-A INPUT -p tcp --dport 80 -j ACCEPT" + __iptables_rule ssh --rule "-A INPUT -p tcp --dport 22 -j ACCEPT" + __iptables_rule https --rule "-A INPUT -p tcp --dport 443 -j ACCEPT" + + # Ensure some rules are not present anymore + __iptables_rule munin --rule "-A INPUT -p tcp --dport 4949 -j ACCEPT" \ + --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__iptables_apply`\ (7), :strong:`iptables`\ (8) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__issue.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__issue.rst.txt new file mode 100644 index 00000000..097f2c01 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__issue.rst.txt @@ -0,0 +1,47 @@ +cdist-type__issue(7) +==================== + +NAME +---- +cdist-type__issue - Manage issue + + +DESCRIPTION +----------- +This cdist type allows you to easily setup /etc/issue. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +source + If supplied, use this file as /etc/issue instead of default. + + + +EXAMPLES +-------- + +.. code-block:: sh + + __issue + + # When called from another type + __issue --source "$__type/files/myfancyissue" + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail.rst.txt new file mode 100644 index 00000000..7fc8f455 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail.rst.txt @@ -0,0 +1,124 @@ +cdist-type__jail(7) +=================== + +NAME +---- +cdist-type__jail - Manage FreeBSD jails + + +DESCRIPTION +----------- +This type is used on FreeBSD to manage jails by calling the appropriate per-version subtype. + + +REQUIRED PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present". + +jailbase + The location of the .tgz archive containing the base fs for your jails. + + +OPTIONAL PARAMETERS +------------------- +name + The name of the jail. Default is to use the object_id as the jail name. + +ip + The ifconfig style IP/netmask combination to use for the jail guest. If + the state parameter is "present," this parameter is required. + +hostname + The FQDN to use for the jail guest. Defaults to the name parameter. + +interface + The name of the physical interface on the jail server to bind the jail to. + Defaults to the first interface found in the output of ifconfig -l. + +devfs-ruleset + The name of the devfs ruleset to associate with the jail. Defaults to + "jailrules." This ruleset must be copied to the server via another type. + To use this option, devfs-enable must be "true." + +jaildir + The location on the remote server to use for hosting jail filesystems. + Defaults to /usr/jail. + +BOOLEAN PARAMETERS +------------------ +stopped + Do not start the jail + +devfs-disable + Whether to disallow devfs mounting within the jail + +onboot + Whether to add the jail to rc.conf's jail_list variable. + + +CAVEATS +------- +This type does not currently support modification of jail options. If, for +example a jail needs to have its IP address or netmask changed, the jail must +be removed then re-added with the correct IP address/netmask or the appropriate +line (jail__ip="...") modified within rc.conf through some alternate +means. + +MESSAGES +-------- +start + The jail was started +stop + The jail was stopped +create: + The jail was created +delete + The jail was deleted +onboot + The jail was configured to start on boot + +EXAMPLES +-------- + +.. code-block:: sh + + # Create a jail called www + __jail www --state present --ip "192.168.1.2" --jailbase /my/jail/base.tgz + + # Remove the jail called www + __jail www --state absent --jailbase /my/jail/base.tgz + + # The jail www should not be started + __jail www --state present --stopped \ + --ip "192.168.1.2 netmask 255.255.255.0" \ + --jailbase /my/jail/base.tgz + + # Use the name variable explicitly + __jail thisjail --state present --name www \ + --ip "192.168.1.2" \ + --jailbase /my/jail/base.tgz + + # Go nuts + __jail lotsofoptions --state present --name testjail \ + --ip "192.168.1.100 netmask 255.255.255.0" \ + --hostname "testjail.example.com" --interface "em0" \ + --onboot --jailbase /my/jail/base.tgz --jaildir /jails + + +SEE ALSO +-------- +:strong:`jail`\ (8) + + +AUTHORS +------- +Jake Guffey + + +COPYING +------- +Copyright \(C) 2012,2016 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail_freebsd10.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail_freebsd10.rst.txt new file mode 100644 index 00000000..9063f339 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail_freebsd10.rst.txt @@ -0,0 +1,123 @@ +cdist-type__jail_freebsd10(7) +============================= + +NAME +---- +cdist-type__jail_freeebsd10 - Manage FreeBSD jails + + +DESCRIPTION +----------- +This type is used on FreeBSD >= 10.0 to manage jails. + + +REQUIRED PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present". + +jailbase + The location of the .tgz archive containing the base fs for your jails. + + +OPTIONAL PARAMETERS +------------------- +name + The name of the jail. Default is to use the object_id as the jail name. + +ip + The ifconfig style IP/netmask combination to use for the jail guest. If + the state parameter is "present," this parameter is required. + +hostname + The FQDN to use for the jail guest. Defaults to the name parameter. + +interface + The name of the physical interface on the jail server to bind the jail to. + Defaults to the first interface found in the output of ifconfig -l. + +devfs-ruleset + The name of the devfs ruleset to associate with the jail. Defaults to + "jailrules." This ruleset must be copied to the server via another type. + To use this option, devfs-enable must be "true." + +jaildir + The location on the remote server to use for hosting jail filesystems. + Defaults to /usr/jail. + +BOOLEAN PARAMETERS +------------------ +stopped + Do not start the jail + +devfs-disable + Whether to disallow devfs mounting within the jail + +onboot + Whether to add the jail to rc.conf's jail_list variable. + + +CAVEATS +------- +This type does not currently support modification of jail options. If, for +example a jail needs to have its IP address or netmask changed, the jail must +be removed then re-added with the correct IP address/netmask or the appropriate +modifications to jail.conf need to be made through alternate means. + +MESSAGES +-------- +start + The jail was started +stop + The jail was stopped +create: + The jail was created +delete + The jail was deleted +onboot + The jail was configured to start on boot + +EXAMPLES +-------- + +.. code-block:: sh + + # Create a jail called www + __jail_freebsd10 www --state present --ip "192.168.1.2" --jailbase /my/jail/base.tgz + + # Remove the jail called www + __jail_freebsd10 www --state absent --jailbase /my/jail/base.tgz + + # The jail www should not be started + __jail_freebsd10 www --state present --stopped \ + --ip "192.168.1.2 netmask 255.255.255.0" \ + --jailbase /my/jail/base.tgz + + # Use the name variable explicitly + __jail_freebsd10 thisjail --state present --name www \ + --ip "192.168.1.2" \ + --jailbase /my/jail/base.tgz + + # Go nuts + __jail_freebsd10 lotsofoptions --state present --name testjail \ + --ip "192.168.1.100 netmask 255.255.255.0" \ + --hostname "testjail.example.com" --interface "em0" \ + --onboot --jailbase /my/jail/base.tgz --jaildir /jails + + +SEE ALSO +-------- +:strong:`jail`\ (8) + + +AUTHORS +------- +Jake Guffey + + +COPYING +------- +Copyright \(C) 2012-2016 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail_freebsd9.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail_freebsd9.rst.txt new file mode 100644 index 00000000..cc79c785 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__jail_freebsd9.rst.txt @@ -0,0 +1,124 @@ +cdist-type__jail_freebsd9(7) +============================ + +NAME +---- +cdist-type__jail_freebsd9 - Manage FreeBSD jails + + +DESCRIPTION +----------- +This type is used on FreeBSD <= 9.x to manage jails. + + +REQUIRED PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present". + +jailbase + The location of the .tgz archive containing the base fs for your jails. + + +OPTIONAL PARAMETERS +------------------- +name + The name of the jail. Default is to use the object_id as the jail name. + +ip + The ifconfig style IP/netmask combination to use for the jail guest. If + the state parameter is "present," this parameter is required. + +hostname + The FQDN to use for the jail guest. Defaults to the name parameter. + +interface + The name of the physical interface on the jail server to bind the jail to. + Defaults to the first interface found in the output of ifconfig -l. + +devfs-ruleset + The name of the devfs ruleset to associate with the jail. Defaults to + "jailrules." This ruleset must be copied to the server via another type. + To use this option, devfs-enable must be "true." + +jaildir + The location on the remote server to use for hosting jail filesystems. + Defaults to /usr/jail. + +BOOLEAN PARAMETERS +------------------ +stopped + Do not start the jail + +devfs-disable + Whether to disallow devfs mounting within the jail + +onboot + Whether to add the jail to rc.conf's jail_list variable. + + +CAVEATS +------- +This type does not currently support modification of jail options. If, for +example a jail needs to have its IP address or netmask changed, the jail must +be removed then re-added with the correct IP address/netmask or the appropriate +line (jail__ip="...") modified within rc.conf through some alternate +means. + +MESSAGES +-------- +start + The jail was started +stop + The jail was stopped +create: + The jail was created +delete + The jail was deleted +onboot + The jail was configured to start on boot + +EXAMPLES +-------- + +.. code-block:: sh + + # Create a jail called www + __jail_freebsd9 www --state present --ip "192.168.1.2" --jailbase /my/jail/base.tgz + + # Remove the jail called www + __jail_freebsd9 www --state absent --jailbase /my/jail/base.tgz + + # The jail www should not be started + __jail_freebsd9 www --state present --stopped \ + --ip "192.168.1.2 netmask 255.255.255.0" \ + --jailbase /my/jail/base.tgz + + # Use the name variable explicitly + __jail_freebsd9 thisjail --state present --name www \ + --ip "192.168.1.2" \ + --jailbase /my/jail/base.tgz + + # Go nuts + __jail_freebsd9 lotsofoptions --state present --name testjail \ + --ip "192.168.1.100 netmask 255.255.255.0" \ + --hostname "testjail.example.com" --interface "em0" \ + --onboot --jailbase /my/jail/base.tgz --jaildir /jails + + +SEE ALSO +-------- +:strong:`jail`\ (8) + + +AUTHORS +------- +Jake Guffey + + +COPYING +------- +Copyright \(C) 2012-2016 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__key_value.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__key_value.rst.txt new file mode 100644 index 00000000..34e4aab2 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__key_value.rst.txt @@ -0,0 +1,96 @@ +cdist-type__key_value(7) +======================== + +NAME +---- +cdist-type__key_value - Change property values in files + + +DESCRIPTION +----------- +This cdist type allows you to change values in a key value based config +file. + + +REQUIRED PARAMETERS +------------------- +file + The file to operate on. +delimiter + The delimiter which separates the key from the value. + + +OPTIONAL PARAMETERS +------------------- +state + present or absent, defaults to present. If present, sets the key to value, + if absent, removes the key from the file. +key + The key to change. Defaults to object_id. +value + The value for the key. Optional if state=absent, required otherwise. +comment + If supplied, the value will be inserted before the line with the key, + but only if the key or value must be changed. + You need to ensure yourself that the line is prefixed with the correct + comment sign. (for example # or ; or wathever ..) +onchange + The code to run if the key or value changes (i.e. is inserted, removed or replaced). + + +BOOLEAN PARAMETERS +------------------ +exact_delimiter + If supplied, treat additional whitespaces between key, delimiter and value + as wrong value. + + +MESSAGES +-------- +remove + Removed existing key and value +insert + Added key and value +change + Changed value of existing key +create + A new line was inserted in a new file + + +EXAMPLES +-------- + +.. code-block:: sh + + # Set the maximum system user id + __key_value SYS_UID_MAX --file /etc/login.defs --value 666 --delimiter ' ' + + # Same with fancy id + __key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \ + --delimiter ' ' + + # Enable packet forwarding + __key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \ + --delimiter ' = ' --comment '# my linux kernel should act as a router' + + # Remove existing key/value + __key_value LEGACY_KEY --file /etc/somefile --state absent --delimiter '=' + + +MORE INFORMATION +---------------- +This type try to handle as many values as possible, so it doesn't use regexes. +So you need to exactly specify the key and delimiter. Delimiter can be of any length. + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__keyboard.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__keyboard.rst.txt new file mode 100644 index 00000000..0eb4cde9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__keyboard.rst.txt @@ -0,0 +1,37 @@ +cdist-type__keyboard(7) +======================= + +NAME +---- +cdit-type__keyboard - Set keyboard layout + + +DESCRIPTION +----------- +This cdist type allows you to modify keyboard layout. + + +REQUIRED PARAMETERS +------------------- +type + Any valid type, for example "us" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Set keyboard type to "us" + __keyboard --type "us" + + +AUTHORS +------- +Carlos Ortigoza + + +COPYING +------- +Copyright \(C) 2016 Carlos Ortigoza. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__letsencrypt_cert.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__letsencrypt_cert.rst.txt new file mode 100644 index 00000000..85eb88ea --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__letsencrypt_cert.rst.txt @@ -0,0 +1,109 @@ +cdist-type__letsencrypt_cert(7) +=============================== + +NAME +---- + +cdist-type__letsencrypt_cert - Get an SSL certificate from Let's Encrypt + +DESCRIPTION +----------- + +Automatically obtain a Let's Encrypt SSL certificate using Certbot. + +REQUIRED PARAMETERS +------------------- + +object id + A cert name. If domain parameter is not specified then it is used + as a domain to be included in the certificate. + +admin-email + Where to send Let's Encrypt emails like "certificate needs renewal". + +OPTIONAL PARAMETERS +------------------- + +state + 'present' or 'absent', defaults to 'present' where: + + present + if the certificate does not exist, it will be obtained + absent + the certificate will be removed + +webroot + The path to your webroot, as set up in your webserver config. If this + parameter is not present, Certbot will be run in standalone mode. + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- + +renew-hook + Renew hook command directly passed to Certbot in cron job. + +domain + Domains to be included in the certificate. When specified then object id + is not used as a domain. + +BOOLEAN PARAMETERS +------------------ + +automatic-renewal + Install a cron job, which attempts to renew certificates daily. + +staging + Obtain a test certificate from a staging server. + +MESSAGES +-------- + +change + Certificate was changed. + +create + Certificate was created. + +remove + Certificate was removed. + +EXAMPLES +-------- + +.. code-block:: sh + + # use object id as domain + __letsencrypt_cert example.com \ + --admin-email root@example.com \ + --automatic-renewal \ + --renew-hook "service nginx reload" \ + --webroot /data/letsencrypt/root + +.. code-block:: sh + + # domain parameter is specified so object id is not used as domain + # and example.com needs to be included again with domain parameter + __letsencrypt_cert example.com \ + --admin-email root@example.com \ + --automatic-renewal \ + --domain example.com \ + --domain foo.example.com \ + --domain bar.example.com \ + --renew-hook "service nginx reload" \ + --webroot /data/letsencrypt/root + +AUTHORS +------- + +| Nico Schottelius +| Kamila Součková +| Darko Poljak +| Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2017-2018 Nico Schottelius, Kamila Součková, Darko Poljak and +Ľubomír Kučera. You can redistribute it and/or modify it under the terms of +the GNU General Public License as published by the Free Software Foundation, +either version 3 of the License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__line.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__line.rst.txt new file mode 100644 index 00000000..f76cab64 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__line.rst.txt @@ -0,0 +1,116 @@ +cdist-type__line(7) +=================== + +NAME +---- +cdist-type__line - Manage lines in files + + +DESCRIPTION +----------- +This cdist type allows you to add lines and remove lines from files. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +after + Insert the given line after this pattern. + +before + Insert the given line before this pattern. + +file + If supplied, use this as the destination file. + Otherwise the object_id is used. + +line + Specifies the line which should be absent or present. + + Must be present, if state is 'present'. + Ignored if regex is given and state is 'absent'. + +regex + If state is 'present', search for this pattern and if it matches add + the given line. + + If state is 'absent', ensure all lines matching the regular expression + are absent. + + The regular expression is interpreted by awk's match function. + +state + 'present' or 'absent', defaults to 'present' + +onchange + The code to run if line is added, removed or updated. + + +BOOLEAN PARAMETERS +------------------ +None. + + +MESSAGES +-------- +added + The line was added. + +updated + The line or its position was changed. + +removed + The line was removed. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Manage a hosts entry for www.example.com. + __line /etc/hosts \ + --line '127.0.0.2 www.example.com' + + # Manage another hosts entry for test.example.com. + __line hosts:test.example.com \ + --file /etc/hosts \ + --line '127.0.0.3 test.example.com' + + # Remove the line starting with TIMEZONE from the /etc/rc.conf file. + __line legacy_timezone \ + --file /etc/rc.conf \ + --regex 'TIMEZONE=.*' \ + --state absent + + # Insert a line before another one. + __line password-auth-local:classify \ + --file /etc/pam.d/password-auth-local \ + --line '-session required pam_exec.so debug log=/tmp/classify.log /usr/local/libexec/classify' \ + --before '^session[[:space:]]+include[[:space:]]+password-auth-ac$' + + # Insert a line after another one. + __line password-auth-local:classify \ + --file /etc/pam.d/password-auth-local \ + --line '-session required pam_exec.so debug log=/tmp/classify.log /usr/local/libexec/classify' \ + --after '^session[[:space:]]+include[[:space:]]+password-auth-ac$' + + +SEE ALSO +-------- +:strong:`cdist-type`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2018 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__link.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__link.rst.txt new file mode 100644 index 00000000..2e81aea9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__link.rst.txt @@ -0,0 +1,76 @@ +cdist-type__link(7) +=================== + +NAME +---- +cdist-type__link - Manage links (hard and symbolic) + + +DESCRIPTION +----------- +This cdist type allows you to manage hard and symbolic links. +The given object id is the destination for the link. + + +REQUIRED PARAMETERS +------------------- +source + Specifies the link source. + +type + Specifies the link type: Either hard or symbolic. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + + +MESSAGES +-------- + +created + Link to destination was created. + +removed + Link to destination was removed. + +removed (directory) + Destination was removed because state is ``present`` and destination was directory. + +removed (wrongsource) + Destination was removed because state is ``present`` and destination link source was wrong. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create hard link of /etc/shadow + __link /root/shadow --source /etc/shadow --type hard + + # Relative symbolic link + __link /etc/apache2/sites-enabled/www.test.ch \ + --source ../sites-available/www.test.ch \ + --type symbolic + + # Absolute symbolic link + __link /opt/plone --source /home/services/plone --type symbolic + + # Remove link + __link /opt/plone --state absent + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__locale.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__locale.rst.txt new file mode 100644 index 00000000..e36ab061 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__locale.rst.txt @@ -0,0 +1,50 @@ +cdist-type__locale(7) +===================== + +NAME +---- +cdist-type__locale - Configure locales + + +DESCRIPTION +----------- +This cdist type allows you to setup locales. On systems that don't +support locale setting like alpine/musl libc, it is a no-op. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to present + + +EXAMPLES +-------- + +.. code-block:: sh + + # Add locale de_CH.UTF-8 + __locale de_CH.UTF-8 + + # Same as above, but more explicit + __locale de_CH.UTF-8 --state present + + # Remove colourful British English + __locale en_GB.UTF-8 --state absent + + +SEE ALSO +-------- +:strong:`locale`\ (1), :strong:`localedef`\ (1), :strong:`cdist-type__locale_system`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2013-2019 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License version 3 or +later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__locale_system.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__locale_system.rst.txt new file mode 100644 index 00000000..03d36960 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__locale_system.rst.txt @@ -0,0 +1,64 @@ +cdist-type__locale_system(7) +============================ + +NAME +---- +cdist-type__locale_system - Set system-wide locale + + +DESCRIPTION +----------- +This cdist type allows you to modify system-wide locale. +The name of the locale category is given as the object id +(usually you are probably interested in using LANG). + + +OPTIONAL PARAMETERS +------------------- + +state + present or absent, defaults to present. + If present, sets the locale category to the given value. + If absent, removes the locale category from the system file. + +value + The value for the locale category. + Defaults to en_US.UTF-8. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Set LANG to en_US.UTF-8 + __locale_system LANG + + # Same as above, but more explicit + __locale_system LANG --value en_US.UTF-8 + + # Set category LC_MESSAGES to de_CH.UTF-8 + __locale_system LC_MESSAGES --value de_CH.UTF-8 + + # Remove setting for LC_ALL + __locale_system LC_ALL --state absent + + + +SEE ALSO +-------- +:strong:`locale`\ (1), :strong:`localedef`\ (1), :strong:`cdist-type__locale`\ (7) + + +AUTHORS +------- +| Steven Armstrong +| Carlos Ortigoza +| Nico Schottelius + + +COPYING +------- +Copyright \(C) 2016 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License version 3 or +later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__motd.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__motd.rst.txt new file mode 100644 index 00000000..a567dc80 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__motd.rst.txt @@ -0,0 +1,65 @@ +cdist-type__motd(7) +=================== + +NAME +---- +cdist-type__motd - Manage message of the day + + +DESCRIPTION +----------- +This cdist type allows you to easily setup /etc/motd. + +.. note:: + In some OS, motd is a bit special, check `motd(5)`. + Currently Debian, Devuan, Ubuntu and FreeBSD are taken into account. + If your OS of choice does something besides /etc/motd, check the source + and contribute support for it. + Otherwise it will likely just work. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +source + If supplied, copy this file from the host running cdist to the target. + If source is '-' (dash), take what was written to stdin as the file content. + If not supplied, a default message will be placed onto the target. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Use cdist defaults + __motd + + # Supply source file from a different type + __motd --source "$__type/files/my-motd" + + # Supply source from stdin + __motd --source "-" < + + +COPYING +------- +Copyright \(C) 2020 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__mount.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mount.rst.txt new file mode 100644 index 00000000..d719a1cd --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mount.rst.txt @@ -0,0 +1,84 @@ +cdist-type__mount(7) +==================== + +NAME +---- +cdit-type__mount - Manage filesystem mounts + + +DESCRIPTION +----------- +Manage filesystem mounts either via /etc/fstab or manually. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +device + device to mount at path, defaults to 'none'. see mount(8) + +dump + value for the dump field in fstab. see fstab(5) + defaults to 0. + + This parameter is ignored, if the nofstab parameter is given. + +options + comma separated string of options, see mount(8) + +pass + value for the pass field in fstab. see fstab(5) + defaults to 0. + + This parameter is ignored, if the nofstab parameter is given. + +path + mount point where to mount the device, see mount(8). + Defaults to __object_id + +state + either present or absent. Defaults to present. + +type + vfstype, see mount(8) + + +BOOLEAN PARAMETERS +------------------ +nofstab + do not manage an entry in /etc/fstab + + +EXAMPLES +-------- + +.. code-block:: sh + + __mount /some/dir \ + --device /dev/sdc3 \ + --type xfs \ + --options "defaults,ro" + --dump 0 \ + --pass 1 + + __mount /var/lib/one \ + --device mfsmount \ + --type fuse \ + --options "mfsmaster=mfsmaster.domain.tld,mfssubfolder=/one,nonempty,_netdev" + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_database.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_database.rst.txt new file mode 100644 index 00000000..b3b56b5f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_database.rst.txt @@ -0,0 +1,55 @@ +cdist-type__mysql_database(7) +============================= + +NAME +---- +cdist-type__mysql_database - Manage a MySQL database + + +DESCRIPTION +----------- + +Create MySQL database and optionally user with all privileges. + + +OPTIONAL PARAMETERS +------------------- +name + Name of database. Defaults to object id. + +user + Create user and give all privileges to database. + +password + Password for user. + +state + Defaults to present. + If absent and user is also set, both will be removed (with privileges). + + +EXAMPLES +-------- + +.. code-block:: sh + + # just create database + __mysql_database foo + + # create database with respective user with all privileges to database + __mysql_database bar \ + --user name \ + --password secret + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_privileges.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_privileges.rst.txt new file mode 100644 index 00000000..b72c9eba --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_privileges.rst.txt @@ -0,0 +1,57 @@ +cdist-type__mysql_privileges(7) +=============================== + +NAME +---- +cdist-type__mysql_privileges - Manage MySQL privileges + + +DESCRIPTION +----------- + +Grant and revoke privileges of MySQL user. + + +REQUIRED PARAMETERS +------------------- +database + Name of database. + +user + Name of user. + + +OPTIONAL PARAMETERS +------------------- +privileges + Defaults to "all". + +table + Defaults to "*". + +host + Defaults to localhost. + +state + "present" grants and "absent" revokes. Defaults to present. + + +EXAMPLES +-------- + +.. code-block:: sh + + __mysql_privileges user-to-db --database db --user user + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_user.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_user.rst.txt new file mode 100644 index 00000000..c2b222d5 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__mysql_user.rst.txt @@ -0,0 +1,48 @@ +cdist-type__mysql_user(7) +========================= + +NAME +---- +cdist-type__mysql_user - Manage a MySQL user + + +DESCRIPTION +----------- + +Create MySQL user or change password for the user. + + +OPTIONAL PARAMETERS +------------------- +name + Name of user. Defaults to object id. + +host + Host of user. Defaults to localhost. + +password + Password of user. + +state + Defaults to present. + + +EXAMPLES +-------- + +.. code-block:: sh + + __mysql_user user --password secret + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__openldap_server.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__openldap_server.rst.txt new file mode 100644 index 00000000..a96c7dad --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__openldap_server.rst.txt @@ -0,0 +1,215 @@ +cdist-type__openldap_server(7) +============================== + +NAME +---- +cdist-type__openldap_server - Setup an openldap(4) server instance + + +DESCRIPTION +----------- +This type can be used to bootstrap an LDAP environment using openldap as slapd. + +It bootstraps the LDAP server with sane defaults and creates and manages the +base DN defined by `suffix`. + + +REQUIRED PARAMETERS +------------------- +manager-dn + The rootdn to set up in the directory. + E.g. `cn=manager,dc=ungleich,dc=ch`. See `slapd.conf(5)`. + +manager-password + The password for `manager-dn` in the directory. + This will be used to connect to the LDAP server on the first `slapd-url` + with the given `manager-dn`. + +manager-password-hash + The password for `manager-dn` in the directory. + This should be valid for `slapd.conf` like `{SSHA}qV+mCs3u8Q2sCmUXT4Ybw7MebHTASMyr`. + Generate e.g. with: `slappasswd -s weneedgoodsecurity`. + See `slappasswd(8C)`, `slapd.conf(5)`. + TODO: implement this: http://blog.adamsbros.org/2015/06/09/openldap-ssha-salted-hashes-by-hand/ + to derive from the manager-password parameter and ensure idempotency (care with salts). + At that point, manager-password-hash should be deprecated and ignored. + +serverid + The server for the directory. + E.g. `dc=ungleich,dc=ch`. See `slapd.conf(5)`. + +suffix + The suffix for the directory. + E.g. `dc=ungleich,dc=ch`. See `slapd.conf(5)`. + + +REQUIRED MULTIPLE PARAMETERS +---------------------------- +slapd-url + A URL for slapd to listen on. + Pass once for each URL you want to support, + e.g.: `--slapd-url ldaps://my.fqdn/ --slapd-url ldap://my.fqdn/`. + The first instance that is passed will be used as the main URL to + connect to this LDAP server + See the `-h` flag in `slapd(8C)`. + + +OPTIONAL PARAMETERS +------------------- +syncrepl-credentials + Only has an effect if `replicate` is set; required in that case. + This secret is shared amongst the hosts that will replicate the directory. + Note that each replication server needs this secret and it is saved in + plain text in the directory. + +syncrepl-searchbase + Only has an effect if `replicate` is set; required in that case. + The searchbase to use for replication. + E.g. `dc=ungleich,dc=ch`. See `slapd.conf(5)`. + +admin-email + Passed to `cdist-type__letsencrypt_cert`; has otherwise no use. + Required if using `__letsencrypt_cert`. + Where to send Let's Encrypt emails like "certificate needs renewal". + +tls-cipher-suite + Setting for TLSCipherSuite. + Defaults to `NORMAL` in a Debian-like OS and `HIGH:MEDIUM:+SSLv2` on FreeBSD. + See `slapd.conf(5)`. + +tls-cert + If defined, `__letsencrypt_cert` is not used and this must be the path in + the remote hosts to the PEM-encoded TLS certificate. + Requires: `tls-privkey` and `tls-ca`. + Permissions, existence and renewal of these files are left up to the + type's user. + +tls-privkey + Required if `tls-cert` is defined. + Path in the remote hosts to the PEM-encoded private key file. + +tls-ca + Required if `tls-cert` is defined. + Path in the remote hosts to the PEM-encoded CA certificate file. + +extra-config + Custom settings to be added in `slapd.conf(5)`. + + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- +syncrepl-host + Only has an effect if `replicate` is set; required in that case. + Set once per host that will replicate the directory. + +module + LDAP module to load. See `slapd.conf(5)`. Some dependencies might have to + be installed beforehand. Default value is OS-dependent, see manifest. + +schema + Name of LDAP schema to load. Must be the name without extension of a + `.schema` file in slapd's schema directory (usually `/etc/slapd/schema` or + `/usr/local/etc/openldap/schema`). + Example value: `inetorgperson` + The type user must ensure that the schema file is deployed. + This defaults to a sensible subset, for details see the type definition. + +description + The description of the base DN passed in the `suffix` parameter. + Defaults to `Managed by cdist, do not edit manually.` + + +BOOLEAN PARAMETERS +------------------ +staging + Passed to `cdist-type__letsencrypt_cert`; has otherwise no use. + Obtain a test certificate from a staging server. + +replicate + Whether to setup replication or not. + If present `syncrepl-credentials` and `syncrepl-host` are also required. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Example of a simple server with manual certificate management. + pki_prefix="/usr/local/etc/pki/realms/ldap.camilion.cloud" + __openldap_server \ + --manager-dn 'cn=manager,dc=camilion,dc=cloud' \ + --manager-password "foo" \ + --manager-password-hash '{SSHA}foo' \ + --serverid 0 \ + --suffix 'dc=camilion,dc=cloud' \ + --slapd-url 'ldaps://ldap.camilion.cloud' \ + --tls-cert "${pki_prefix}/default.crt" \ + --tls-privkey "${pki_prefix}/default.key" \ + --tls-ca "${pki_prefix}/CA.crt" + + # The created basedn looks as follows: + # + # dn: dc=camilion,dc=cloud + # objectClass: top + # objectClass: dcObject + # objectClass: organization + # o: Managed by cdist, do not edit manually. + # dc: camilion + # + # Do not change it manually, the type will overwrite your changes. + + + # + # Changing to a replicated setup is a simple change to something like: + # + # Example for multiple servers with replication and automatic + # Let's Encrypt certificate management through certbot. + id=1 + for host in ldap-test1.ungleich.ch ldap-test2.ungleich.ch; do + echo "__ungleich_ldap \ + --manager-dn 'cn=manager,dc=ungleich,dc=ch' \ + --manager-psasword 'foo' \ + --manager-password-hash '{SSHA}fooo' \ + --serverid '${id}' \ + --suffix 'dc=ungleich,dc=ch' \ + --slapd-url ldap://${host} \ + --searchbase 'dc=ungleich,dc=ch' \ + --syncrepl-credentials 'fooo' \ + --syncrepl-host 'ldap-test1.ungleich.ch' \ + --syncrepl-host 'ldap-test2.ungleich.ch' \ + --description 'Ungleich LDAP server'" \ + --staging \ + | cdist config -i - -v ${host} + id=$((id + 1)) + done + + # The created basedn looks as follows: + # + # dn: dc=ungleich,dc=ch + # objectClass: top + # objectClass: dcObject + # objectClass: organization + # o: Ungleich LDAP server + # dc: ungleich + # + # Do not change it manually, the type will overwrite your changes. + + +SEE ALSO +-------- +:strong:`cdist-type__letsencrypt_cert`\ (7) + + +AUTHORS +------- +ungleich +Evilham + + +COPYING +------- +Copyright \(C) 2020 ungleich glarus ag. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package.rst.txt new file mode 100644 index 00000000..fc36402b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package.rst.txt @@ -0,0 +1,64 @@ +cdist-type__package(7) +====================== + +NAME +---- +cdist-type__package - Manage packages + + +DESCRIPTION +----------- +This cdist type allows you to install or uninstall packages on the target. +It dispatches the actual work to the package system dependent types. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + The name of the package to install. Default is to use the object_id as the + package name. +version + The version of the package to install. Default is to install the version + chosen by the local package manager. +type + The package type to use. Default is determined based on the $os explorer + variable. + e.g. + * __package_apt for Debian + * __package_emerge for Gentoo + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install the package vim on the target + __package vim --state present + + # Same but install specific version + __package vim --state present --version 7.3.50 + + # Force use of a specific package type + __package vim --state present --type __package_apt + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_apk.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_apk.rst.txt new file mode 100644 index 00000000..bc2408b4 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_apk.rst.txt @@ -0,0 +1,55 @@ +cdist-type__package_akp(7) +========================== + +NAME +---- +cdist-type__package_akp - Manage packages with akp + + +DESCRIPTION +----------- +apk is usually used on Alpine to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh in installed + __package_apk zsh --state present + + # Remove package + __package_apk apache2 --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2019 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_apt.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_apt.rst.txt new file mode 100644 index 00000000..a1691eac --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_apt.rst.txt @@ -0,0 +1,77 @@ +cdist-type__package_apt(7) +========================== + +NAME +---- +cdist-type__package_apt - Manage packages with apt-get + + +DESCRIPTION +----------- +apt-get is usually used on Debian and variants (like Ubuntu) to +manage packages. + +This type will also update package index, if it is older +than one day, to avoid missing package error messages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + +target-release + Passed on to apt-get install, see apt-get(8). + Essentially allows you to retrieve packages from a different release + +version + The version of the package to install. Default is to install the version + chosen by the local package manager. + + +BOOLEAN PARAMETERS +------------------ +purge-if-absent + If this parameter is given when state is `absent`, the package is + purged from the system (using `--purge`). + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh in installed + __package_apt zsh --state present + + # In case you only want *a* webserver, but don't care which one + __package_apt webserver --state present --name nginx + + # Remove obsolete package + __package_apt puppet --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_dpkg.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_dpkg.rst.txt new file mode 100644 index 00000000..828d8cdd --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_dpkg.rst.txt @@ -0,0 +1,93 @@ +cdist-type__package_dpkg(7) +=========================== + +NAME +---- +cdist-type__package_dpkg - Manage packages with dpkg + + +DESCRIPTION +----------- +This type is used on Debian and variants (like Ubuntu) to +install packages that are provided locally as \*.deb files. + +The object given to this type must be the name of the deb package. +The filename of the deb package has to follow Debian naming conventions, i.e. +`${binary:Package}_${Version}_${Architecture}.deb` (see `dpkg-query(1)` for +details). + + +OPTIONAL PARAMETERS +------------------- +state + `present` or `absent`, defaults to `present`. + +REQUIRED PARAMETERS +------------------- +source + path to the \*.deb package + + +BOOLEAN PARAMETERS +------------------ +purge-if-absent + If this parameter is given when state is `absent`, the package is + purged from the system (using `--purge`). + + +EXPLORER +-------- +pkg_state + Returns the full package name if package is installed, empty otherwise. + + +MESSAGES +-------- +installed + The deb-file was installed. + +removed (--remove) + The package was removed, keeping config. + +removed (--purge) + The package was removed including config (purged). + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install foo and bar packages + __package_dpkg foo_0.1_all.deb --source /tmp/foo_0.1_all.deb + __package_dpkg bar_1.4.deb --source $__type/files/bar_1.4.deb + + # uninstall baz: + __package_dpkg baz_1.4_amd64.deb \ + --source $__type/files/baz_1.4_amd64.deb \ + --state "absent" + # uninstall baz and also purge config-files: + __package_dpkg baz_1.4_amd64.deb \ + --source $__type/files/baz_1.4_amd64.deb \ + --purge-if-absent \ + --state "absent" + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7), :strong:`dpkg-query`\ (1) + + +AUTHORS +------- +| Tomas Pospisek +| Thomas Eckert + + +COPYING +------- +Copyright \(C) 2013 Tomas Pospisek. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. +This type is based on __package_apt. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_emerge.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_emerge.rst.txt new file mode 100644 index 00000000..88adaff0 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_emerge.rst.txt @@ -0,0 +1,63 @@ +cdist-type__package_emerge(7) +============================= + +NAME +---- +cdist-type__package_emerge - Manage packages with portage + + +DESCRIPTION +----------- +Portage is usually used on the gentoo distribution to manage packages. +This type requires app-portage/gentoolkit installed on the target host. +cdist-type__package_emerge_dependencies is supposed to install the needed +packages on the target host. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present". + +version + If supplied, use to install or uninstall a specific version of the package named. + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure sys-devel/gcc is installed + __package_emerge sys-devel/gcc --state present + + # If you want a specific version of a package + __package_emerge app-portage/gentoolkit --state present --version 0.3.0.8-r2 + + # Remove package + __package_emerge sys-devel/gcc --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7), :strong:`cdist-type__package_emerge_dependencies`\ (7) + + +AUTHORS +------- +Thomas Oettli + + +COPYING +------- +Copyright \(C) 2013 Thomas Oettli. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_emerge_dependencies.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_emerge_dependencies.rst.txt new file mode 100644 index 00000000..598d31f1 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_emerge_dependencies.rst.txt @@ -0,0 +1,52 @@ +cdist-type__package_emerge_dependencies(7) +========================================== + +NAME +---- +cdist-type__package_emerge_dependencies - Install dependencies for __package_emerge + + +DESCRIPTION +----------- +Portage is usually used on the gentoo distribution to manage packages. +This type installs the following tools which are required by __package_emerge to work: + +* app-portage/flaggie +* app-portage/gentoolkit + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +None + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure app-portage/flaggie and app-portage/gentoolkit are installed + __package_emerge_dependencies + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7), :strong:`cdist-type__package_emerge`\ (7) + + +AUTHORS +------- +Thomas Oettli + + +COPYING +------- +Copyright \(C) 2013 Thomas Oettli. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_luarocks.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_luarocks.rst.txt new file mode 100644 index 00000000..5dc10195 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_luarocks.rst.txt @@ -0,0 +1,55 @@ +cdist-type__package_luarocks(7) +=============================== + +NAME +---- +cdist-type__package_luarocks - Manage luarocks packages + + +DESCRIPTION +----------- +LuaRocks is a deployment and management system for Lua modules. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure luasocket is installed + __package_luarocks luasocket --state present + + # Remove package + __package_luarocks luasocket --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Christian G. Warden + + +COPYING +------- +Copyright \(C) 2012 SwellPath, Inc. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_opkg.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_opkg.rst.txt new file mode 100644 index 00000000..0fd40b33 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_opkg.rst.txt @@ -0,0 +1,55 @@ +cdist-type__package_opkg(7) +=========================== + +NAME +---- +cdist-type__package_opkg - Manage packages with opkg + + +DESCRIPTION +----------- +opkg is usually used on OpenWRT to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure lsof is installed + __package_opkg lsof --state present + + # Remove obsolete package + __package_opkg dnsmasq --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Giel van Schijndel + + +COPYING +------- +Copyright \(C) 2012 Giel van Schijndel. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pacman.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pacman.rst.txt new file mode 100644 index 00000000..2686202d --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pacman.rst.txt @@ -0,0 +1,58 @@ +cdist-type__package_pacman(7) +============================= + +NAME +---- +cdist-type__package_pacman - Manage packages with pacman + + +DESCRIPTION +----------- +Pacman is usually used on the Archlinux distribution to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh in installed + __package_pacman zsh --state present + + # If you don't want to follow pythonX packages, but always use python + __package_pacman python --state present --name python2 + + # Remove obsolete package + __package_pacman puppet --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pip.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pip.rst.txt new file mode 100644 index 00000000..234ceee2 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pip.rst.txt @@ -0,0 +1,65 @@ +cdist-type__package_pip(7) +========================== + +NAME +---- +cdist-type__package_pip - Manage packages with pip + + +DESCRIPTION +----------- +Pip is used in Python environments to install packages. +It is also included in the python virtualenv environment. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +pip + Instead of using pip from PATH, use the specific pip path. + +state + Either "present" or "absent", defaults to "present" + +runas + Run pip as specified user. By default it runs as root. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install a package + __package_pip pyro --state present + + # Use pip in a virtualenv located at /root/shinken_virtualenv + __package_pip pyro --state present --pip /root/shinken_virtualenv/bin/pip + + # Use pip in a virtualenv located at /foo/shinken_virtualenv as user foo + __package_pip pyro --state present --pip /foo/shinken_virtualenv/bin/pip --runas foo + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkg_freebsd.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkg_freebsd.rst.txt new file mode 100644 index 00000000..b06c7faf --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkg_freebsd.rst.txt @@ -0,0 +1,70 @@ +cdist-type__package_pkg_freebsd(7) +================================== + +NAME +---- +cdist-type__package_pkg_freebsd - Manage FreeBSD packages + + +DESCRIPTION +----------- +This type is usually used on FreeBSD to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +flavor + If supplied, use to avoid ambiguity. + +version + If supplied, use to install a specific version of the package named. + +pkgsite + If supplied, use to install from a specific package repository. + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh is installed + __package_pkg_freebsd zsh --state present + + # Ensure vim is installed, use flavor no_x11 + __package_pkg_freebsd vim --state present --flavor no_x11 + + # If you don't want to follow pythonX packages, but always use python + __package_pkg_freebsd python --state present --name python2 + + # Remove obsolete package + __package_pkg_freebsd puppet --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Jake Guffey + + +COPYING +------- +Copyright \(C) 2012 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkg_openbsd.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkg_openbsd.rst.txt new file mode 100644 index 00000000..dcfd0719 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkg_openbsd.rst.txt @@ -0,0 +1,71 @@ +cdist-type__package_pkg(7) +========================== + +NAME +---- +cdist-type__package_pkg - Manage OpenBSD packages + + +DESCRIPTION +----------- +This type is usually used on OpenBSD to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +flavor + If supplied, use to avoid ambiguity. + +version + If supplied, use to avoid ambiguity. + +state + Either "present" or "absent", defaults to "present" + +pkg_path + Manually specify a PKG_PATH to add packages from. + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh is installed + __package_pkg_openbsd zsh --state present + + # Ensure vim is installed, use flavor no_x11 + __package_pkg_openbsd vim --state present --flavor no_x11 + + # If you don't want to follow pythonX packages, but always use python + __package_pkg_openbsd python --state present --name python2 + + # Remove obsolete package + __package_pkg_openbsd puppet --state absent + + # Add a package using a particular mirror + __package_pkg_openbsd bash \ + --pkg_path http://openbsd.mirrorcatalogs.com/snapshots/packages/amd64 + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Andi Brönnimann + + +COPYING +------- +Copyright \(C) 2011 Andi Brönnimann. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkgng_freebsd.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkgng_freebsd.rst.txt new file mode 100644 index 00000000..251e2c5f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_pkgng_freebsd.rst.txt @@ -0,0 +1,101 @@ +cdist-type__package_pkgng_freebsd(7) +==================================== + +NAME +---- +cdist-type__package_pkgng_freebsd - Manage FreeBSD packages with pkg-ng + + +DESCRIPTION +----------- +This type is usually used on FreeBSD to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +flavor + If supplied, use to avoid ambiguity. + +version + If supplied, use to install a specific version of the package named. + +repo + If supplied, use to install the package named from a particular repo. + +state + Either "present" or "absent", defaults to "present" + + +BOOLEAN PARAMETERS +------------------ +upgrade + If supplied, allow upgrading to the latest version of a package. + + +CAVEATS +------- +This type requires that repository definitions already exist in /etc/pkg/\*.conf. +Ensure that they exist prior to use of this type with __file. + +pkg-ng can't upgrade a package to a specific version. If this type needs to +upgrade a package, it can only ugprade to the latest available version. If the +"upgrade" parameter is not given and an upgrade needs to occur, an error will result. + + +MESSAGES +-------- +install + The package was installed +remove + The package was removed +upgrade + The package was upgraded +exist + The package was already present and thus not installed + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh is installed + __package_pkgng_freebsd zsh --state present + + # Ensure vim is installed, use flavor no_x11 + __package_pkgng_freebsd vim --state present --flavor no_x11 + + # If you don't want to follow pythonX packages, but always use python + __package_pkgng_freebsd python --state present --name python2 + + # Install a package from a particular repository when multiples exist + __package_pkgng_freebsd bash --state present --repo myrepo + + # Remove obsolete package + __package_pkgng_freebsd puppet --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Jake Guffey + + +COPYING +------- +Copyright \(C) 2014 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_rubygem.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_rubygem.rst.txt new file mode 100644 index 00000000..96ad21f7 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_rubygem.rst.txt @@ -0,0 +1,56 @@ +cdist-type__package_rubygem(7) +============================== + +NAME +---- +cdist-type__package_rubygem - Manage rubygem packages + + +DESCRIPTION +----------- +Rubygems is the default package management system for the Ruby programming language. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure sinatra is installed + __package_rubygem sinatra --state present + + # Remove package + __package_rubygem rails --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Chase Allen James + + +COPYING +------- + +Copyright \(C) 2011 Chase Allen James. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_update_index.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_update_index.rst.txt new file mode 100644 index 00000000..3cd787b9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_update_index.rst.txt @@ -0,0 +1,71 @@ +cdist-type__package_update_index(7) +=================================== + +NAME +---- +cdist-type__update_index - Update the package index + + +DESCRIPTION +----------- +This cdist type allows you to update the package index on the target. +It will automatically use the appropriate package manager. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +type + The package manager to use. Default is determined based on the $os + explorer variable. + e.g. + * apt for Debian + * yum for Red Hat + * pacman for Arch Linux + +maxage + Available for package manager apt and pacman, max time in seconds since + last update. Repo update is skipped if maxage is not reached yet. + +MESSAGES +-------- +apt-cache updated (age was: currage) + apt-cache was updated (run of `apt-get update`). `currage` is the time + in seconds since the previous run. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Update the package index on the target + __package_update_index + + # Force use of a specific package manager + __package_update_index --type apt + + # Only update every hour: + __package_update_index --maxage 3600 --type apt + + # same as above (on apt-type systems): + __package_update_index --maxage 3600 + +AUTHORS +------- +| Ricardo Catalinas Jiménez +| Thomas Eckert +| Stu Zhao + + +COPYING +------- + +Copyright \(C) 2014 Ricardo Catalinas Jiménez. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_upgrade_all.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_upgrade_all.rst.txt new file mode 100644 index 00000000..e9e2b8ce --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_upgrade_all.rst.txt @@ -0,0 +1,62 @@ +cdist-type__package_upgrade_all(7) +================================== + +NAME +---- +cdist-type__package_upgrade_all - Upgrade all the installed packages + + +DESCRIPTION +----------- +This cdist type allows you to upgrade all the installed packages on the +target. It will automatically use the appropriate package manager. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +type + The package manager to use. Default is determined based on the $os + explorer variable. + e.g. + * apt for Debian + * yum for Red Hat + * pacman for Arch Linux + + +BOOLEAN PARAMETERS +------------------ +apt-dist-upgrade + Do dist-upgrade instead of upgrade. + +apt-clean + Clean out the local repository of retrieved package files. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Upgrade all the installed packages on the target + __package_upgrade_all + + # Force use of a specific package manager + __package_upgrade_all --type apt + + +AUTHORS +------- +Ricardo Catalinas Jiménez + +COPYING +------- + +Copyright \(C) 2014 Ricardo Catalinas Jiménez. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_yum.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_yum.rst.txt new file mode 100644 index 00000000..45ad9a55 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_yum.rst.txt @@ -0,0 +1,65 @@ +cdist-type__package_yum(7) +========================== + +NAME +---- +cdist-type__package_yum - Manage packages with yum + + +DESCRIPTION +----------- +Yum is usually used on the Fedora distribution to manage packages. +If you specify an unknown package, yum will display the +slightly confusing error message "Error: Nothing to do". + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" +url + URL to use for the package + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh in installed + __package_yum zsh --state present + + # If you don't want to follow pythonX packages, but always use python + __package_yum python --state present --name python2 + + # Remove obsolete package + __package_yum puppet --state absent + + __package epel-release-6-8 \ + --url http://mirror.switch.ch/ftp/mirror/epel/6/i386/epel-release-6-8.noarch.rpm + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_zypper.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_zypper.rst.txt new file mode 100644 index 00000000..0051359b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__package_zypper.rst.txt @@ -0,0 +1,73 @@ +cdist-type__package_zypper(7) +============================= + +NAME +---- +cdist-type__package_zypper - Manage packages with zypper + + +DESCRIPTION +----------- +Zypper is usually used on the SuSE distribution to manage packages. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +name + If supplied, use the name and not the object id as the package name. + +state + Either "present" or "absent", defaults to "present" + +version + The version of the package to install. Default is to install the version + chosen by the local package manager. For a list of available versions, + have a look at the output of "zypper se -s packagename" + +ptype + Either "package", "patch", "pattern", "product" or "srcpackage", defaults to "package". For a description see man zypper. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure zsh is installed + __package_zypper zsh --state present + + # If you don't want to follow pythonX packages, but always use python + __package_zypper python --state present --name python2 + + # Ensure binutils is installed and the version is forced to be 2.23.1-0.19.2 + __package_zypper binutils --state present --version 2.23.1-0.19.2 + + # Remove package + __package_zypper cfengine --state absent + + # install all packages which belongs to pattern x11 + __package_zypper x11 --ptype pattern --state present + + +SEE ALSO +-------- +:strong:`cdist-type__package`\ (7) + + +AUTHORS +------- +Daniel Heule + + +COPYING +------- +Copyright \(C) 2012 Nico Schottelius. +Copyright \(C) 2013 Daniel Heule. +You can redistribute it and/or modify it under the terms of the +GNU General Public License as published by the Free Software Foundation, +either version 3 of the License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__pacman_conf.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pacman_conf.rst.txt new file mode 100644 index 00000000..6b8adfc9 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pacman_conf.rst.txt @@ -0,0 +1,75 @@ +cdist-type__pacman_conf(7) +========================== + +NAME +---- +cdist-type__pacman_conf - Manage pacman configuration + + +DESCRIPTION +----------- +The type allows you to configure options section, add or delete repositories and manage mirrorlists + + +REQUIRED PARAMETERS +------------------- +section + 'options' for configure options section + + Otherwise it specifies a repository or a plain file + +key + Specifies the key which will be set + + If section = 'options' or file is not set the key will + be checked against available keys from pacman.conf + +value + Specifies the value which will be set against the key + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + +file + Specifies the filename. + + The managed file will be named like 'plain_file_filename' + + If supplied the key will not be checked. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Manage options section in pacman.conf + __pacman_conf options_Architecture --section options --key Architecture --value auto + + # Add new repository + __pacman_conf localrepo_Server --section localrepo --key Server --value "file:///var/cache/pacman/pkg" + + # Add mirror to a mirrorlist + __pacman_conf customlist_Server --file customlist --section customlist --key Server\ + --value "file:///var/cache/pacman/pkg" + + +SEE ALSO +-------- +:strong:`grep`\ (1) + + +AUTHORS +------- +Dominique Roux + + +COPYING +------- +Copyright \(C) 2015 Dominique Roux. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__pacman_conf_integrate.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pacman_conf_integrate.rst.txt new file mode 100644 index 00000000..c21b56d8 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pacman_conf_integrate.rst.txt @@ -0,0 +1,51 @@ +cdist-type__pacman_conf_integrate(7) +==================================== + +NAME +---- +cdist-type__pacman_conf_integrate - Integrate default pacman.conf to cdist conform and vice versa + + +DESCRIPTION +----------- +The type allows you to convert the default pacman.conf to a cdist conform one and vice versa + + +REQUIRED PARAMETERS +------------------- +None. + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent', defaults to 'present' + + +EXAMPLES +-------- + +.. code-block:: sh + + # Convert normal to cdist conform + __pacman_conf_integrate convert + + # Convert cdist conform to normal + __pacman_conf_integrate convert --state absent + + +SEE ALSO +-------- +:strong:`grep`\ (1) + + +AUTHORS +------- +Dominique Roux + + +COPYING +------- +Copyright \(C) 2015 Dominique Roux. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__pf_apply_anchor.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pf_apply_anchor.rst.txt new file mode 100644 index 00000000..aef6cdf4 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pf_apply_anchor.rst.txt @@ -0,0 +1,62 @@ +cdist-type__pf_apply_anchor(7) +============================== + +NAME +---- +cdist-type__pf_apply_anchor - Apply a pf(4) anchor on $__target_host + + +DESCRIPTION +----------- +This type is used on \*BSD systems to manage anchors for the pf firewall. + +Notice this type does not take care of copying the ruleset, that must be +done by the user with, e.g. `__file`. + + +OPTIONAL PARAMETERS +------------------- +anchor_name + The name of the anchor to apply. If not set, `${__object_id}` is used. + This type requires `/etc/pf.d/${anchor_name}` to exist on + `$__target_host`. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Copy anchor file to ${__target_host} + __file "/etc/pf.d/80_dns" --source - < +Kamila Součková +Jake Guffey + + +COPYING +------- +Copyright \(C) 2020 Evilham. +Copyright \(C) 2016 Kamila Součková. +Copyright \(C) 2012 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__pf_ruleset.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pf_ruleset.rst.txt new file mode 100644 index 00000000..db8873ac --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pf_ruleset.rst.txt @@ -0,0 +1,59 @@ +cdist-type__pf_ruleset(7) +========================= + +NAME +---- +cdist-type__pf_ruleset - Copy a pf(4) ruleset to $__target_host + + +DESCRIPTION +----------- +This type is used on \*BSD systems to manage the pf firewall's ruleset. + +It will also enable and disable the pf firewall as requested in the `state` +parameter. + + +REQUIRED PARAMETERS +------------------- +state + Either "absent" (no ruleset at all) or "present", defaults to "present". + + +OPTIONAL PARAMETERS +------------------- +source + Required when state is "present". + Defines the ruleset to load onto the $__target_host for `pf(4)`. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Remove the current ruleset in place and disable pf + __pf_ruleset --state absent + + # Enable pf with the ruleset defined in $__manifest/files/pf.conf + __pf_ruleset --state present --source $__manifest/files/pf.conf + + +SEE ALSO +-------- +:strong:`pf`\ (4) + + +AUTHORS +------- +Kamila Součková +Jake Guffey + + +COPYING +------- +Copyright \(C) 2016 Kamila Součková. +Copyright \(C) 2012 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ping.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ping.rst.txt new file mode 100644 index 00000000..e08643dc --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ping.rst.txt @@ -0,0 +1,43 @@ +cdist-type__ping(7) +================================== + +NAME +---- +cdist-type__ping - Try to connect to host and return 'pong' on success + + +DESCRIPTION +----------- +A simple type which tries to connect to a remote host and runs a simple command +to ensure everything is working. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __ping + + +AUTHORS +------- +Olliver Schinagl + + +COPYING +------- +Copyright \(C) 2018 Schinagl. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix.rst.txt new file mode 100644 index 00000000..43b158e0 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix.rst.txt @@ -0,0 +1,42 @@ +cdist-type__postfix(7) +====================== + +NAME +---- +cdist-type__postfix - Install postfix + + +DESCRIPTION +----------- +This space intentionally left blank. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __postfix + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_master.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_master.rst.txt new file mode 100644 index 00000000..07756f74 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_master.rst.txt @@ -0,0 +1,84 @@ +cdist-type__postfix_master(7) +============================= + +NAME +---- +cdist-type__postfix_master - Configure postfix master.cf + + +DESCRIPTION +----------- +See master(5) for more information. + + +REQUIRED PARAMETERS +------------------- +type + See master(5) +command + See master(5) + + +BOOLEAN PARAMETERS +------------------ +noreload + don't reload postfix after changes + + +OPTIONAL PARAMETERS +------------------- +state + present or absent, defaults to present + +service + +private + +unpriv + +chroot + +wakeup + +maxproc + +option + Pass an option to a service. Same as using -o in master.cf. + Can be specified multiple times. + +comment + a textual comment to add with the master.cf entry + + +EXAMPLES +-------- + +.. code-block:: sh + + __postfix_master smtp --type inet --command smtpd + + __postfix_master smtp --type inet --chroot y --command smtpd \ + --option smtpd_enforce_tls=yes \ + --option smtpd_sasl_auth_enable=yes \ + --option smtpd_client_restrictions=permit_sasl_authenticated,reject + + __postfix_master submission --type inet --command smtpd \ + --comment "Run alternative smtp on submission port" + + +SEE ALSO +-------- +:strong:`master`\ (5) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_postconf.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_postconf.rst.txt new file mode 100644 index 00000000..3222d4a7 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_postconf.rst.txt @@ -0,0 +1,54 @@ +cdist-type__postfix_postconf(7) +=============================== + +NAME +---- +cdist-type__postfix_postconf - Configure postfix main.cf + + +DESCRIPTION +----------- +See postconf(5) for possible keys and values. + +Note that this type directly runs the postconf executable. +It does not make changes to /etc/postfix/main.cf itself. + + +REQUIRED PARAMETERS +------------------- +value + the value for the postfix parameter + + +OPTIONAL PARAMETERS +------------------- +key + the name of the parameter. Defaults to __object_id + + +EXAMPLES +-------- + +.. code-block:: sh + + __postfix_postconf mydomain --value somedomain.com + + __postfix_postconf bind-to-special-ip --key smtp_bind_address --value 127.0.0.5 + + +SEE ALSO +-------- +:strong:`postconf`\ (5) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_postmap.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_postmap.rst.txt new file mode 100644 index 00000000..2a82b44a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_postmap.rst.txt @@ -0,0 +1,42 @@ +cdist-type__postfix_postmap(7) +============================== + +NAME +---- +cdist-type__postfix_postmap - Run postmap on the given file + + +DESCRIPTION +----------- +This space intentionally left blank. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __postfix_postmap /etc/postfix/generic + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_reload.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_reload.rst.txt new file mode 100644 index 00000000..944e22fa --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postfix_reload.rst.txt @@ -0,0 +1,42 @@ +cdist-type__postfix_reload(7) +============================= + +NAME +---- +cdist-type__postfix_reload - Tell postfix to reload its configuration + + +DESCRIPTION +----------- +This space intentionally left blank. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + __postfix_reload + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_database.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_database.rst.txt new file mode 100644 index 00000000..870b4917 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_database.rst.txt @@ -0,0 +1,58 @@ +cdist-type__postgres_database(7) +================================ + +NAME +---- +cdist-type__postgres_database - Create/drop postgres databases + + +DESCRIPTION +----------- +This cdist type allows you to create or drop postgres databases. + + +OPTIONAL PARAMETERS +------------------- +state + Either 'present' or 'absent', defaults to 'present'. + +owner + Specifies the database user who will own the new database. + +encoding + Specifies the character encoding scheme to be used in this database. + +lc-collate + Specifies the LC_COLLATE setting to be used in this database. + +lc-ctype + Specifies the LC_CTYPE setting to be used in this database. + +template + Specifies the template database from which to build this database. + + +EXAMPLES +-------- + +.. code-block:: sh + + __postgres_database mydbname --owner mydbusername + + +SEE ALSO +-------- +:strong:`cdist-type__postgres_role`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_extension.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_extension.rst.txt new file mode 100644 index 00000000..79645b2b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_extension.rst.txt @@ -0,0 +1,59 @@ +cdist-type__postgres_extension(7) +================================= + +NAME +---- +cdist-type__postgres_extension - manage postgres extensions + + +DESCRIPTION +----------- +This cdist type allows you to create or drop postgres extensions. + +The object you need to pass to __postgres_extension consists of +the database name and the extension name joined by a colon in the +following form: + +.. code-block:: sh + + dbname:extension + +f.ex. + +.. code-block:: sh + + rails_test:unaccent + + +OPTIONAL PARAMETERS +------------------- +state + either "present" or "absent", defaults to "present" + + +EXAMPLES +-------- + +.. code-block:: sh + + __postgres_extension rails_test:unaccent + __postgres_extension --present rails_test:unaccent + __postgres_extension --absent rails_test:unaccent + + +SEE ALSO +-------- +:strong:`cdist-type__postgre_database`\ (7) + +Postgres "Create Extension" documentation at: . + +AUTHOR +------- +Tomas Pospisek + +COPYING +------- +Copyright \(C) 2014 Tomas Pospisek. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_role.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_role.rst.txt new file mode 100644 index 00000000..11fd73d5 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__postgres_role.rst.txt @@ -0,0 +1,67 @@ +cdist-type__postgres_role(7) +============================ + +NAME +---- +cdist-type__postgres_role - Manage postgres roles + + +DESCRIPTION +----------- +This cdist type allows you to create or drop postgres roles. + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" + +All other parameters map directly to the corresponding postgres createrole +parameters. + +password + +BOOLEAN PARAMETERS +------------------ +All parameter map directly to the corresponding postgres createrole +parameters. + +login +createdb +createrole +superuser +inherit + +EXAMPLES +-------- + +.. code-block:: sh + + __postgres_role myrole + + __postgres_role myrole --password 'secret' + + __postgres_role admin --password 'very-secret' --superuser + + __postgres_role dbcustomer --password 'bla' --createdb + + +SEE ALSO +-------- +:strong:`cdist-type__postgres_database`\ (7) + +postgresql documentation at: +. + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__process.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__process.rst.txt new file mode 100644 index 00000000..e7303c55 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__process.rst.txt @@ -0,0 +1,84 @@ +cdist-type__process(7) +====================== + +NAME +---- +cdist-type__process - Start or stop process + + +DESCRIPTION +----------- +This cdist type allows you to define the state of a process. + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" + +name + Process name to match on when using pgrep -f -x. + + This is useful, if the name starts with a "/", + because the leading slash is stripped away from + the object id by cdist. + +stop + Executable to use for stopping the process. + +start + Executable to use for starting the process. + + +MESSAGES +-------- +started + The process was started. + +stopped + The process was stopped. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Start if not running + __process /usr/sbin/syslog-ng --state present + + # Start if not running with a different binary + __process /usr/sbin/nginx --state present --start "/etc/rc.d/nginx start" + + # Stop the process using kill (the type default) - DO NOT USE THIS + __process /usr/sbin/sshd --state absent + + # Stop the process using /etc/rc.d/sshd stop - THIS ONE NOT AS WELL + __process /usr/sbin/sshd --state absent --stop "/etc/rc.d/sshd stop" + + # Ensure cups is running, which runs with -C ...: + __process cups --start "/etc/rc.d/cups start" --state present \ + --name "/usr/sbin/cupsd -C /etc/cups/cupsd.conf" + + # Ensure rpc.statd is running (which usually runs with -L) using a regexp + __process rpcstatd --state present --start "/etc/init.d/statd start" \ + --name "rpc.statd.*" + + +SEE ALSO +-------- +:strong:`cdist-type__start_on_boot`\ (7) + + +AUTHORS +------- +| Nico Schottelius +| Thomas Eckert + + +COPYING +------- +Copyright \(C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_alertmanager.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_alertmanager.rst.txt new file mode 100644 index 00000000..67e97eaf --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_alertmanager.rst.txt @@ -0,0 +1,61 @@ +cdist-type__prometheus_alertmanager(7) +====================================== + +NAME +---- +cdist-type__prometheus_alertmanager - install Alertmanager + + +DESCRIPTION +----------- +Install and configure Prometheus Alertmanager (https://prometheus.io/docs/alerting/alertmanager/). + +Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter `--install-from-backports` helps.) + + +REQUIRED PARAMETERS +------------------- +config + Alertmanager configuration file. It will be saved as /etc/alertmanager/alertmanager.yml on the target. + + +OPTIONAL PARAMETERS +------------------- +storage-path + Where to put data. Default: /data/alertmanager. (Directory will be created if needed.) +retention-days + How long to retain data. Default: 90 days. + + +BOOLEAN PARAMETERS +------------------ +install-from-backports + Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version. + + +EXAMPLES +-------- + +.. code-block:: sh + + __prometheus_alertmanager \ + --install-from-backports \ + --config "$__manifest/files/alertmanager.yml" \ + --storage-path /data/alertmanager + + +SEE ALSO +-------- +:strong:`cdist-type__prometheus_server`\ (7), :strong:`cdist-type__grafana_dashboard`\ (7), +Prometheus alerting documentation: https://prometheus.io/docs/alerting/overview/ + +AUTHORS +------- +Kamila Součková + +COPYING +------- +Copyright \(C) 2018 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_exporter.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_exporter.rst.txt new file mode 100644 index 00000000..3b1ee4d7 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_exporter.rst.txt @@ -0,0 +1,70 @@ +cdist-type__prometheus_exporter(7) +================================== + +NAME +---- +cdist-type__prometheus_exporter - install some Prometheus exporters + + +DESCRIPTION +----------- +Install and configure some exporters to be used by the Prometheus monitoring system (https://prometheus.io/). + +This type creates a daemontools-compatible service directory under /service/$__object_id. +Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable). + +This type installs and builds the latest version from git, using go get. A recent version of golang as well +as build tools (make, g++, etc.) must be available. + +Currently supported exporters: + +- node +- blackbox +- ceph + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +exporter + Which exporter to install and configure. Default: $__object_id. + Currently supported: node, blackbox, ceph. + + +BOOLEAN PARAMETERS +------------------ +add-consul-service + Add this exporter as a Consul service for automatic service discovery. + + +EXAMPLES +-------- + +.. code-block:: sh + + __daemontools + __golang_from_vendor --version 1.9 # required for prometheus and many exporters + + require="__daemontools __golang_from_vendor" __prometheus_exporter node + + +SEE ALSO +-------- +:strong:`cdist-type__daemontools`\ (7), :strong:`cdist-type__golang_from_vendor`\ (7), +:strong:`cdist-type__prometheus_server`\ (7), +Prometheus documentation: https://prometheus.io/docs/introduction/overview/ + +AUTHORS +------- +Kamila Součková + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_server.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_server.rst.txt new file mode 100644 index 00000000..ab6a3c9b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__prometheus_server.rst.txt @@ -0,0 +1,67 @@ +cdist-type__prometheus_server(7) +================================ + +NAME +---- +cdist-type__prometheus_server - install Prometheus + + +DESCRIPTION +----------- +Install and configure Prometheus (https://prometheus.io/). + +Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter `--install-from-backports` helps.) + +REQUIRED PARAMETERS +------------------- +config + Prometheus configuration file. It will be saved as /etc/prometheus/prometheus.yml on the target. + + +OPTIONAL PARAMETERS +------------------- +retention-days + How long to keep data. Default: 30 +rule-files + Path to rule files. They will be installed under /etc/prometheus/. You need to include `rule_files: [/etc/prometheus/]` in the config file if you use this. +storage-path + Where to put data. Default: /data/prometheus. (Directory will be created if needed.) + + +BOOLEAN PARAMETERS +------------------ +install-from-backports + Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version. + + +EXAMPLES +-------- + +.. code-block:: sh + + PROMPORT=9090 + ALERTPORT=9093 + + __prometheus_server \ + --install-from-backports \ + --config "$__manifest/files/prometheus.yml" \ + --retention-days 14 \ + --storage-path /data/prometheus \ + --rule-files "$__manifest/files/*.rules" + + +SEE ALSO +-------- +:strong:`cdist-type__prometheus_alertmanager`\ (7), :strong:`cdist-type__grafana_dashboard`\ (7), +Prometheus documentation: https://prometheus.io/docs/introduction/overview/ + +AUTHORS +------- +Kamila Součková + +COPYING +------- +Copyright \(C) 2018 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__pyvenv.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pyvenv.rst.txt new file mode 100644 index 00000000..8085ff12 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__pyvenv.rst.txt @@ -0,0 +1,78 @@ +cdist-type__pyvenv(7) +===================== + +NAME +---- +cdist-type__pyvenv - Create or remove python virtual environment + + +DESCRIPTION +----------- +This cdist type allows you to create or remove python virtual +environment using pyvenv on python3 -m venv. +It assumes pyvenv is already installed. Concrete package depends +on concrete OS and/or OS version/distribution. +Ensure this for e.g. in your init manifest as in the following example: + +.. code-block sh + + case "$__target_host" in + localhost) + __package python3-venv --state present + require="__package/python3-venv" __pyvenv /home/darko/testenv --pyvenv "pyvenv-3.4" --owner darko --group darko --mode 740 --state present + require="__pyvenv/home/darko/testenv" __package_pip docopt --pip /home/darko/testenv/bin/pip --runas darko --state present + ;; + esac + + +REQUIRED PARAMETERS +------------------- +None + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" + +group + Group to chgrp to + +mode + Unix permissions, suitable for chmod + +owner + User to chown to + +pyvenv + Use this specific pyvenv + +venvparams + Specific parameters to pass to pyvenv invocation + + +EXAMPLES +-------- + +.. code-block:: sh + + __pyvenv /home/services/djangoenv + + # Use specific pyvenv + __pyvenv /home/foo/fooenv --pyvenv /usr/local/bin/pyvenv-3.4 + + # Create python virtualenv for user foo. + __pyvenv /home/foo/fooenv --group foo --user foo + + # Create python virtualenv with specific parameters. + __pyvenv /home/services/djangoenv --venvparams "--copies --system-site-packages" + + +AUTHORS +------- +Darko Poljak + + +COPYING +------- +Copyright \(C) 2016 Darko Poljak. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__qemu_img.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__qemu_img.rst.txt new file mode 100644 index 00000000..210c7f5f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__qemu_img.rst.txt @@ -0,0 +1,53 @@ +cdist-type__qemu_img(7) +======================= + +NAME +---- +cdist-type__qemu_img - Manage VM disk images + + +DESCRIPTION +----------- +The qemu-img program is used to create qemu images for +qemu and (qemu-)kvm. + + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" +size + Size of the image in qemu-img compatible units. + + Required if state is "present". + + +EXAMPLES +-------- + +.. code-block:: sh + + # Create a 50G size image + __qemu_img /home/services/kvm/vm/myvmname/system-disk --size 50G + + # Remove image + __qemu_img /home/services/kvm/vm/myoldvm/system-disk --state absent + + +SEE ALSO +-------- +:strong:`qemu-img`\ (1) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2012-2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__rbenv.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rbenv.rst.txt new file mode 100644 index 00000000..607019cf --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rbenv.rst.txt @@ -0,0 +1,49 @@ +cdist-type__rbenv(7) +==================== + +NAME +---- +cdist-type__rbenv - Manage rbenv installation + + +DESCRIPTION +----------- +This cdist type allows you to manage rbenv installations. +It also installs ruby-build. + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" + +owner + Which user should own the rbenv installation, defaults to root + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install rbenv including ruby-build for nico + __rbenv /home/nico + + # Install rbenv including ruby-build for nico + __rbenv /home/nico --owner nico + + # Bastian does not need rbenv anymore, he began to code C99 + __rbenv /home/bastian --state absent + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2012-2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__rsync.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rsync.rst.txt new file mode 100644 index 00000000..94b06d63 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rsync.rst.txt @@ -0,0 +1,114 @@ +cdist-type__rsync(7) +==================== + +NAME +---- +cdist-type__rsync - Mirror directories using rsync + + +DESCRIPTION +----------- +WARNING: This type is of BETA quality: + +- it has not been tested widely +- interfaces *may* change +- if there is a better approach to solve the problem -> the type may even vanish + +If you are fine with these constraints, please read on. + + +This cdist type allows you to mirror local directories to the +target host using rsync. Rsync will be installed in the manifest of the type. +If group or owner are giveng, a recursive chown will be executed on the +target host. + +A slash will be appended to the source directory so that only the contents +of the directory are taken and not the directory name itself. + + +REQUIRED PARAMETERS +------------------- +source + Where to take files from + + +OPTIONAL PARAMETERS +------------------- +group + Group to chgrp to. + +owner + User to chown to. + +destination + Use this as the base destination instead of the object id + +remote-user + Use this user instead of the default "root" for rsync operations. + + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- +rsync-opts + Use this option to give rsync options with. + See rsync(1) for available options. + Only "--" options are supported. + Write the options without the beginning "--" + Can be specified multiple times. + + +MESSAGES +-------- +NONE + + +EXAMPLES +-------- + +.. code-block:: sh + + # You can use any source directory + __rsync /tmp/testdir \ + --source /etc + + # Use source from type + __rsync /etc \ + --source "$__type/files/package" + + # Allow multiple __rsync objects to write to the same dir + __rsync mystuff \ + --destination /usr/local/bin \ + --source "$__type/files/package" + + __rsync otherstuff \ + --destination /usr/local/bin \ + --source "$__type/files/package2" + + # Use rsync option --exclude + __rsync /tmp/testdir \ + --source /etc \ + --rsync-opts exclude=sshd_conf + + # Use rsync with multiple options --exclude --dry-run + __rsync /tmp/testing \ + --source /home/tester \ + --rsync-opts exclude=id_rsa \ + --rsync-opts dry-run + + +SEE ALSO +-------- +:strong:`rsync`\ (1) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2015 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm.rst.txt new file mode 100644 index 00000000..3a914304 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm.rst.txt @@ -0,0 +1,46 @@ +cdist-type__rvm(7) +================== + +NAME +---- +cdist-type__rvm - Install rvm for a given user + + +DESCRIPTION +----------- +RVM is the Ruby enVironment Manager for the Ruby programming language. + + +REQUIRED PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present". + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install rvm for user billie + __rvm billie --state present + + # Remove rvm + __rvm billie --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__rvm_gem`\ (7), :strong:`cdist-type__rvm_gemset`\ (7), +:strong:`cdist-type__rvm_ruby`\ (7) + + +AUTHORS +------- +Evax Software + + +COPYING +------- +Copyright \(C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_gem.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_gem.rst.txt new file mode 100644 index 00000000..5f3fba97 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_gem.rst.txt @@ -0,0 +1,58 @@ +cdist-type__rvm_gemset(7) +========================== + +NAME +---- +cdist-type__rvm_gemset - Manage Ruby gems through rvm + + +DESCRIPTION +----------- +RVM is the Ruby enVironment Manager for the Ruby programming language. + + +REQUIRED PARAMETERS +------------------- +user + The remote user account to use +gemset + The gemset to use +state + Either "present" or "absent", defaults to "present". + +OPTIONAL PARAMETERS +------------------- +default + Make the selected gemset the default + +EXAMPLES +-------- + +.. code-block:: sh + + # Install the rails gem in gemset ruby-1.9.3-p0@myset for user bill + __rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill --state present + + # Do the same and also make ruby-1.9.3-p0@myset the default gemset + __rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill \ + --state present --default + + # Remove it + __rvm_ruby rails --gemset ruby-1.9.3-p0@myset --user bill --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__rvm`\ (7), :strong:`cdist-type__rvm_gemset`\ (7), +:strong:`cdist-type__rvm_ruby`\ (7) + + +AUTHORS +------- +Evax Software + + +COPYING +------- +Copyright \(C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_gemset.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_gemset.rst.txt new file mode 100644 index 00000000..fca4c36a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_gemset.rst.txt @@ -0,0 +1,56 @@ +cdist-type__rvm_gemset(7) +========================== + +NAME +---- +cdist-type__rvm_gemset - Manage gemsets through rvm + + +DESCRIPTION +----------- +RVM is the Ruby enVironment Manager for the Ruby programming language. + + +REQUIRED PARAMETERS +------------------- +user + The remote user account to use +state + Either "present" or "absent", defaults to "present". + +BOOLEAN PARAMETERS +------------------- +default + If present, set the given gemset as default. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install the gemset @myset for user charles on based on ruby-1.9.3-0 + __rvm_gemset ruby-1.9.3-p0@myset --user charles --state present + + # Do the same and make ruby-1.9.3-p0@myset the default gemset + __rvm_gemset ruby-1.9.3-p0@myset --user charles --state present --default + + # Remove the gemset @myset for user john + __rvm_ruby ruby-1.9.3-p0@myset --user john --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__rvm`\ (7), :strong:`cdist-type__rvm_gem`\ (7), +:strong:`cdist-type__rvm_ruby`\ (7) + + +AUTHORS +------- +Evax Software + + +COPYING +------- +Copyright \(C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_ruby.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_ruby.rst.txt new file mode 100644 index 00000000..f6e71e12 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__rvm_ruby.rst.txt @@ -0,0 +1,57 @@ +cdist-type__rvm_ruby(7) +======================= + +NAME +---- +cdist-type__rvm_ruby - Manage ruby installations through rvm + + +DESCRIPTION +----------- +RVM is the Ruby enVironment Manager for the Ruby programming language. + + +REQUIRED PARAMETERS +------------------- +user + The remote user account to use +state + Either "present" or "absent", defaults to "present". + + +BOOLEAN PARAMETERS +------------------ +default + Set the given version as default + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install ruby 1.9.3 through rvm for user thelonious + __rvm_ruby ruby-1.9.3-p0 --user thelonious --state present + + # Install ruby 1.9.3 through rvm for user ornette and make it the default + __rvm_ruby ruby-1.9.3-p0 --user ornette --state present --default + + # Remove ruby 1.9.3 for user john + __rvm_ruby ruby-1.9.3-p0 --user john --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__rvm`\ (7), :strong:`cdist-type__rvm_gem`\ (7), +:strong:`cdist-type__rvm_gemset`\ (7) + + +AUTHORS +------- +Evax Software + + +COPYING +------- +Copyright \(C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__sensible_editor.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__sensible_editor.rst.txt new file mode 100644 index 00000000..9b805e06 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__sensible_editor.rst.txt @@ -0,0 +1,78 @@ +cdist-type__sensible_editor(7) +============================== + +NAME +---- +cdist-type__sensible_editor - Select the sensible-editor + + +DESCRIPTION +----------- +This cdist type allows you to select the :strong:`sensible-editor` for +a given user. + + +REQUIRED PARAMETERS +------------------- +editor + Name or path of the editor to be selected. + On systems other than Debian derivatives an absolute path is required. + + It is permissible to omit this parameter if --state is absent. + + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', or 'exists'. Defaults to 'present', where: + + present + the sensible-editor is exactly what is specified in --editor. + absent + no sensible-editor configuration is present. + exists + the sensible-editor will be set to what is specified in --editor, + unless there already is a configuration on the target system. + + +EXAMPLES +-------- + +.. code-block:: sh + + __sensible_editor root --editor /bin/ed # ed(1) is the standard + __sensible_editor noob --editor nano + + +LIMITATIONS +----------- + +This type depends upon the :strong:`sensible-editor`\ (1) script which +is part of the sensible-utils package. + +Therefore, the following operating systems are supported: + * Debian 8 (jessie) or later + * Devuan + * Ubuntu 8.10 (intrepid) or later + * RHEL/CentOS 7 or later (EPEL repo required) + * Fedora 21 or later + +Note: on old versions of Ubuntu the sensible-* utils are part of the +debianutils package. + +SEE ALSO +-------- +:strong:`select-editor`\ (1), :strong:`sensible-editor`\ (1). + + +AUTHOR +------- +Dennis Camera + + +COPYING +------- +Copyright \(C) 2019 Dennis Camera. +You can redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__service.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__service.rst.txt new file mode 100644 index 00000000..f9b23d5b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__service.rst.txt @@ -0,0 +1,51 @@ +cdist-type__service(7) +====================== + +NAME +---- +cdist-type__service - Run action on a system service + + +DESCRIPTION +----------- +This type allows you to run an action against a system service. + + +REQUIRED PARAMETERS +------------------- +action + Arbitrary parameter passed as action. Usually 'start', 'stop', 'reload' or 'restart'. + +OPTIONAL PARAMETERS +------------------- +None. + + +BOOLEAN PARAMETERS +------------------ +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Restart nginx service. + __service nginx --action restart + + # Stop postfix service. + __service postfix --action stop + + +AUTHORS +------- +Timothée Floure + + +COPYING +------- +Copyright \(C) 2019 Timothée Floure. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_authorized_key.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_authorized_key.rst.txt new file mode 100644 index 00000000..5bae02aa --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_authorized_key.rst.txt @@ -0,0 +1,82 @@ +cdist-type__ssh_authorized_key(7) +================================= + +NAME +---- +cdist-type__ssh_authorized_key - Manage a single ssh authorized key entry + + +DESCRIPTION +----------- +Manage a single authorized key entry in an authorized_key file. +This type was created to be used by the __ssh_authorized_keys type. + + +REQUIRED PARAMETERS +------------------- +file + The authorized_keys file where the given key should be managed. + +key + The ssh key which shall be managed in this authorized_keys file. + Must be a string containing the ssh keytype, base 64 encoded key and + optional trailing comment which shall be added to the given + authorized_keys file. + + +OPTIONAL PARAMETERS +------------------- +comment + Use this comment instead of the one which may be trailing in the key. + +option + An option to set for this authorized_key entry. + Can be specified multiple times. + See sshd(8) for available options. + +state + If the managed key should be 'present' or 'absent', defaults to 'present'. + + +MESSAGES +-------- +added to `file` (`entry`) + The key `entry` (with optional comment) was added to `file`. + +removed from `file` (`entry`) + The key `entry` (with optional comment) was removed from `file`. + + +EXAMPLES +-------- + +.. code-block:: sh + + __ssh_authorized_key some-id \ + --file "/home/user/.ssh/autorized_keys" \ + --key "$(cat ~/.ssh/id_rsa.pub)" + + __ssh_authorized_key some-id \ + --file "/home/user/.ssh/autorized_keys" \ + --key "$(cat ~/.ssh/id_rsa.pub)" \ + --option 'command="/path/to/script"' \ + --option 'environment="FOO=bar"' \ + --comment 'one to rule them all' + + +SEE ALSO +-------- +:strong:`cdist-type__ssh_authorized_keys`\ (7), :strong:`sshd`\ (8) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_authorized_keys.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_authorized_keys.rst.txt new file mode 100644 index 00000000..dac6adeb --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_authorized_keys.rst.txt @@ -0,0 +1,133 @@ +cdist-type__ssh_authorized_keys(7) +================================== + +NAME +---- +cdist-type__ssh_authorized_keys - Manage ssh authorized_keys files + + +DESCRIPTION +----------- +Adds or removes ssh keys from a authorized_keys file. + +This type uses the __ssh_dot_ssh type to manage the directory containing +the authorized_keys file. You can disable this feature with the --noparent +boolean parameter. + +The existence, ownership and permissions of the authorized_keys file itself are +also managed. This can be disabled with the --nofile boolean parameter. It is +then left to the user to ensure that the file exists and that ownership and +permissions work with ssh. + + +REQUIRED MULTIPLE PARAMETERS +---------------------------- +key + An ssh key which shall be managed in this authorized_keys file. + Must be a string containing the ssh keytype, base 64 encoded key and + optional trailing comment which shall be added to the given + authorized_keys file. + Can be specified multiple times. + + +OPTIONAL PARAMETERS +------------------- +comment + Use this comment instead of the one which may be trailing in each key. + +file + An alternative destination file, defaults to ~$owner/.ssh/authorized_keys. + +option + An option to set for all authorized_key entries in the key parameter. + Can be specified multiple times. + See sshd(8) for available options. + +owner + The user owning the authorized_keys file, defaults to object_id. + +state + If the given keys should be 'present' or 'absent', defaults to 'present'. + + +BOOLEAN PARAMETERS +------------------ +noparent + Don't create or change ownership and permissions of the directory containing + the authorized_keys file. + +nofile + Don't manage existence, ownership and permissions of the the authorized_keys + file. + +remove-unknown + Remove undefined keys. + + +EXAMPLES +-------- + +.. code-block:: sh + + # add your ssh key to remote root's authorized_keys file + __ssh_authorized_keys root \ + --key "$(cat ~/.ssh/id_rsa.pub)" + + # same as above, but make sure your key is only key in + # root's authorized_keys file + __ssh_authorized_keys root \ + --key "$(cat ~/.ssh/id_rsa.pub)" \ + --remove-unknown + + # allow key to login as user-name + __ssh_authorized_keys user-name \ + --key "ssh-rsa AXYZAAB3NzaC1yc2..." + + # allow key to login as user-name with options and expicit comment + __ssh_authorized_keys user-name \ + --key "ssh-rsa AXYZAAB3NzaC1yc2..." \ + --option no-agent-forwarding \ + --option 'from="*.example.com"' \ + --comment 'backup server' + + # same as above, but with explicit owner and two keys + # note that the options are set for all given keys + __ssh_authorized_keys some-fancy-id \ + --owner user-name \ + --key "ssh-rsa AXYZAAB3NzaC1yc2..." \ + --key "ssh-rsa AZXYAAB3NzaC1yc2..." \ + --option no-agent-forwarding \ + --option 'from="*.example.com"' \ + --comment 'backup server' + + # authorized_keys file in non standard location + __ssh_authorized_keys some-fancy-id \ + --file /etc/ssh/keys/user-name/authorized_keys \ + --owner user-name \ + --key "ssh-rsa AXYZAAB3NzaC1yc2..." + + # same as above, but directory and authorized_keys file is created elswhere + __ssh_authorized_keys some-fancy-id \ + --file /etc/ssh/keys/user-name/authorized_keys \ + --owner user-name \ + --noparent \ + --nofile \ + --key "ssh-rsa AXYZAAB3NzaC1yc2..." + + +SEE ALSO +-------- +:strong:`sshd`\ (8) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012-2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_dot_ssh.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_dot_ssh.rst.txt new file mode 100644 index 00000000..7d35affa --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ssh_dot_ssh.rst.txt @@ -0,0 +1,49 @@ +cdist-type__ssh_dot_ssh(7) +========================== + +NAME +---- +cdist-type__ssh_dot_ssh - Manage .ssh directory + + +DESCRIPTION +----------- +Adds or removes .ssh directory to a user home. + +This type is being used by __ssh_authorized_keys. + + +OPTIONAL PARAMETERS +------------------- +state + if the directory should be 'present' or 'absent', defaults to 'present'. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure root has ~/.ssh with the right permissions + __ssh_dot_ssh root + + # Nico does not need ~/.ssh anymore + __ssh_dot_ssh nico --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__ssh_authorized_keys`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__staged_file.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__staged_file.rst.txt new file mode 100644 index 00000000..9a6ba732 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__staged_file.rst.txt @@ -0,0 +1,115 @@ +cdist-type__staged_file(7) +========================== + +NAME +---- +cdist-type__staged_file - Manage staged files + + +DESCRIPTION +----------- +Manages a staged file that is downloaded on the server (the machine running +cdist) and then deployed to the target host using the __file type. + + +REQUIRED PARAMETERS +------------------- +source + the URL from which to retrieve the source file. + e.g. + + * https://dl.bintray.com/mitchellh/consul/0.4.1_linux_amd64.zip + * file:///path/to/local/file + +cksum + the output of running the command: `cksum $source-file` + e.g.:: + + $ echo foobar > /tmp/foobar + $ cksum /tmp/foobar + 857691210 7 /tmp/foobar + + If either checksum or file size has changed the file will be + (re)fetched from the --source. The file name can be omitted and is + ignored if given. + + +OPTIONAL PARAMETERS +------------------- +fetch-command + the command used to fetch the staged file using printf formatting. + Where a single %s will be replaced with the value of the given --source + parameter. The --fetch-command is expected to output the fetched file to + stdout. + Defaults to 'curl -s -L "%s"'. + +group + see cdist-type__file + +owner + see cdist-type__file + +mode + see cdist-type__file + +prepare-command + the optional command used to prepare or preprocess the staged file for later + use by the file type. + If given, it must be a string in printf formatting where a single %s will + be replaced with the last segment (filename) of the value of the given + --source parameter. + It is executed in the same directory into which the fetched file has been + saved. The --prepare-command is expected to output the final file to stdout. + + So for example given a --source of https://example.com/my-zip.zip, and a + --prepare-command of 'unzip -p "%s"', the code `unzip -p "my-zip.zip"` will + be executed in the folder containing the downloaded file my-zip.zip. + A more complex example might be --prepare-command 'tar -xz "%s"; cat path/from/archive' +stage-dir + the directory in which to store downloaded and prepared files. + Defaults to '/var/tmp/cdist/__staged_file' + +state + see cdist-type__file + + +EXAMPLES +-------- + +.. code-block:: sh + + __staged_file /usr/local/bin/consul \ + --source file:///path/to/local/copy/consul \ + --cksum '428915666 15738724' \ + --state present \ + --group root \ + --owner root \ + --mode 755 + + __staged_file /usr/local/bin/consul \ + --source https://dl.bintray.com/mitchellh/consul/0.4.1_linux_amd64.zip \ + --cksum '428915666 15738724' \ + --fetch-command 'curl -s -L "%s"' \ + --prepare-command 'unzip -p "%s"' \ + --state present \ + --group root \ + --owner root \ + --mode 755 + + +SEE ALSO +-------- +:strong:`cdist-type__file`\ (7) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__start_on_boot.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__start_on_boot.rst.txt new file mode 100644 index 00000000..f8afe94b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__start_on_boot.rst.txt @@ -0,0 +1,61 @@ +cdist-type__start_on_boot(7) +============================ + +NAME +---- +cdist-type__start_on_boot - Manage stuff to be started at boot + + +DESCRIPTION +----------- +This cdist type allows you to enable or disable stuff to be started +at boot of your operating system. + +Warning: This type has not been tested intensively and is not fully +supported. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent", defaults to "present" +target_runlevel + Runlevel which should be modified, defaults to "default" (only used on gentoo systems). + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure snmpd is started at boot + __start_on_boot snmpd + + # Same, but more explicit + __start_on_boot snmpd --state present + + # Ensure legacy configuration management will not be started + __start_on_boot puppet --state absent + + +SEE ALSO +-------- +:strong:`cdist-type__process`\ (7) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2012-2019 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__sysctl.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__sysctl.rst.txt new file mode 100644 index 00000000..dbb9a1ac --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__sysctl.rst.txt @@ -0,0 +1,46 @@ +cdist-type__sysctl(7) +===================== + +NAME +---- +cdist-type__sysctl - manage sysctl settings + + +DESCRIPTION +----------- +Manages permanent as well as runtime sysctl settings. +Permament settings are set by managing entries in /etc/sysctl.conf. +Runtime settings are set by directly calling the sysctl executable. + + +REQUIRED PARAMETERS +------------------- +value + The value to set for the given key (object_id) + + +EXAMPLES +-------- + +.. code-block:: sh + + __sysctl net.ipv4.ip_forward --value 1 + + # On some operating systems, e.g. NetBSD, to prevent an error if the + # MIB style name does not exist (e.g. optional kernel components), + # name and value can be separated by `?=`. The same effect can be achieved + # in cdist by appending a `?` to the key: + + __sysctl ddb.onpanic? --value -1 + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2014 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 or +later (GPLv3+). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__systemd_service.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__systemd_service.rst.txt new file mode 100644 index 00000000..7eca398b --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__systemd_service.rst.txt @@ -0,0 +1,110 @@ +cdist-type__systemd-service(7) +============================== + +NAME +---- +cdist-type__systemd-service - Controls a systemd service state + +DESCRIPTION +----------- +This type controls systemd services to define a state of the service, +or an action like reloading or restarting. It is useful to reload a +service after configuration applied or shutdown one service. + +The activation or deactivation is out of scope. Look for the +:strong:`cdist-type__systemd_util`\ (7) type instead. + +REQUIRED PARAMETERS +------------------- + +None. + +OPTIONAL PARAMETERS +------------------- + +name + String which will used as name instead of the object id. + +state + The state which the service should be in: + + running + Service should run (default) + + stoppend + Service should stopped + +action + Executes an action on on the service. It will only execute it if the + service keeps the state **running**. There are following actions, where: + + reload + Reloads the service + + restart + Restarts the service + +BOOLEAN PARAMETERS +------------------ + +if-required + Only execute the action if minimum one required type outputs a message to + **$__messages_out**. Through this, the action should only executed if a + dependency did something. The action will not executed if no dependencies + given. + +MESSAGES +-------- + +start + Started the service + +stop + Stopped the service + +restart + Restarted the service + +reload + Reloaded the service + +ABORTS +------ +Aborts in following cases: + +systemd or the service does not exist + +EXAMPLES +-------- +.. code-block:: sh + + # service must run + __systemd_service nginx + + # service must stopped + __systemd_service sshd \ + --state stopped + + # restart the service + __systemd_service apache2 \ + --action restart + + # makes sure the service exist with an alternative name + __systemd_service foo \ + --name sshd + + # reload the service for a modified configuration file + # only reloads the service if the file really changed + require="__config_file/etc/foo.conf" __systemd_service foo \ + --action reload --if-required + +AUTHORS +------- +Matthias Stecher + +COPYRIGHT +--------- +Copyright \(C) 2020 Matthias Stecher. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__systemd_unit.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__systemd_unit.rst.txt new file mode 100644 index 00000000..25a4e501 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__systemd_unit.rst.txt @@ -0,0 +1,89 @@ +cdist-type__systemd_unit(7) +=========================== + +NAME +---- + +cdist-type__systemd_unit - Install a systemd unit + +DESCRIPTION +----------- + +This type manages systemd units in ``/etc/systemd/system/``. It can install, +enable and start a systemd unit. This is particularly useful on systems which +take advantage of systemd heavily (e.g., CoreOS). For more information about +systemd units, see SYSTEMD.UNIT(5). + +REQUIRED PARAMETERS +------------------- + +None. + +OPTIONAL PARAMETERS +------------------- + +enablement-state + 'enabled', 'disabled' or 'masked', where: + + enabled + enables the unit + disabled + disables the unit + masked + masks the unit + +source + Path to the config file. If source is '-' (dash), take what was written to + stdin as the config file content. + +state + 'present' or 'absent', defaults to 'present' where: + + present + the unit (or its mask) is installed + absent + The unit is stopped, disabled and uninstalled. If the unit was masked, + the mask is removed. + +BOOLEAN PARAMETERS +------------------ + +restart + Start the unit if it was inactive. Restart the unit if the unit file + changed. Stop the unit if new ``enablement-state`` is ``masked``. + +MESSAGES +-------- + +None. + +EXAMPLES +-------- + +.. code-block:: sh + + # Installs, enables and starts foobar.service + __systemd_unit foobar.service \ + --source "${__manifest}/files/foobar.service" \ + --enablement-state enabled \ + --restart + + # Disables the unit + __systemd_unit foobar.service --enablement-state disabled + + # Stops, disables and uninstalls foobar.service + __systemd_unit foobar.service --state absent + + +AUTHORS +------- + +Ľubomír Kučera + +COPYING +------- + +Copyright \(C) 2017 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__timezone.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__timezone.rst.txt new file mode 100644 index 00000000..8a945c16 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__timezone.rst.txt @@ -0,0 +1,45 @@ +cdist-type__timezone(7) +======================= + +NAME +---- +cdist-type__timezone - Allows one to configure the desired localtime timezone. + + +DESCRIPTION +----------- +This type creates a symlink (/etc/localtime) to the selected timezone +(which should be available in /usr/share/zoneinfo). + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +None. + + +EXAMPLES +-------- + +.. code-block:: sh + + #Set up Europe/Andorra as our timezone. + __timezone Europe/Andorra + + #Set up US/Central as our timezone. + __timezone US/Central + + +AUTHORS +------- +Ramon Salvadó + + +COPYING +------- +Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3). diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ufw.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ufw.rst.txt new file mode 100644 index 00000000..cc64fbb5 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ufw.rst.txt @@ -0,0 +1,59 @@ +cdist-type__ufw(7) +================== + +NAME +---- +cdist-type__ufw - Install the Uncomplicated FireWall + + +DESCRIPTION +----------- +Installs the Uncomplicated FireWall. Most modern distributions carry UFW in their main repositories, but on CentOS this type will automatically enable the EPEL repository. + +Some global configuration can also be set with this type. + +OPTIONAL PARAMETERS +------------------- +state + Either "enabled", "running", "present", or "absent". Defaults to "enabled", which registers UFW to start on boot. + +logging + Either "off", "low", "medium", "high", or "full". Will be passed to `ufw logging`. If not specified, logging level is not modified. + +default_incoming + Either "allow", "deny", or "reject". The default policy for dealing with ingress packets. + +default_outgoing + Either "allow", "deny", or "reject". The default policy for dealing with egress packets. + +default_routed + Either "allow", "deny", or "reject". The default policy for dealing with routed packets (passing through this machine). + + +EXAMPLES +-------- + +.. code-block:: sh + + # Install UFW + __ufw + # Setup UFW with maximum logging and no restrictions on routed packets. + __ufw --logging full --default_routed allow + + +SEE ALSO +-------- +:strong:`ufw`\ (8) + + +AUTHORS +------- +Mark Polyakov + + +COPYING +------- +Copyright \(C) 2019 Mark Polyakov. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__ufw_rule.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ufw_rule.rst.txt new file mode 100644 index 00000000..996557f8 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__ufw_rule.rst.txt @@ -0,0 +1,53 @@ +cdist-type__ufw_rule(7) +======================= + +NAME +---- +cdist-type__ufw_rule - A single UFW rule + + +DESCRIPTION +----------- +Adds or removes a single UFW rule. This type supports adding and deleting rules for port ranges or applications. + +Understanding what is "to" and what is "from" can be confusing. If the rule is ingress (default), then "from" is the remote machine and "to" is the local one. The opposite is true for egress traffic (--out). + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent". Defaults to "present". If "absent", only removes rules that exactly match the rule expected. + +rule + A firewall rule in UFW syntax. This is what you would usually write after `ufw` on the command line. Defaults to "allow" followed by the object ID. You can use either the short syntax (just allow|deny|reject|limit followed by a port or application name) or the full syntax. Do not include `delete` in your command. Set `--state absent` instead. + +EXAMPLES +-------- + +.. code-block:: sh + + # open port 80 (ufw allow 80) + __ufw_rule 80 + # Allow mosh application (if installed) + __ufw_rule mosh + # Allow all traffic from local network (ufw allow from 10.0.0.0/24) + __ufw_rule local --rule 'allow from 10.0.0.0/24' + # Block egress traffic from port 25 to 111.55.55.55 on interface eth0 + __ufw_rule block_smtp --rule 'deny out on eth0 from any port 25 to 111.55.55.55' + + +SEE ALSO +-------- +:strong:`ufw`\ (8) + + +AUTHORS +------- +Mark Polyakov + + +COPYING +------- +Copyright \(C) 2019 Mark Polyakov. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__unpack.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__unpack.rst.txt new file mode 100644 index 00000000..8fe96e43 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__unpack.rst.txt @@ -0,0 +1,79 @@ +cdist-type__unpack(7) +===================== + +NAME +---- +cdist-type__unpack - Unpack archives + + +DESCRIPTION +----------- +Unpack ``.tar``, ``.tgz``, ``.tar.*``, ``.7z``, ``.bz2``, ``.gz``, +``.lzma``, ``.xz``, ``.rar`` and ``.zip`` archives. Archive type is +detected by extension. + +To achieve idempotency, checksum file will be created in target. See +``--sum-file`` parameter for details. + + +REQUIRED PARAMETERS +------------------- +destination + Depending on archive format file or directory to where archive + contents will be written. + + +OPTIONAL PARAMETERS +------------------- +sum-file + Override archive's checksum file in target. By default + ``XXX.cdist__unpack_sum`` will be used, where ``XXX`` is source + archive path. This file must be kept in target's persistent storage. + +tar-strip + Tarball specific. See ``man tar`` for ``--strip-components``. + + +OPTIONAL BOOLEAN PARAMETERS +--------------------------- +backup-destination + By default destination file will be overwritten. In case destination + is directory, files from archive will be added to or overwritten in + directory. This parameter moves existing destination to + ``XXX.cdist__unpack_backup_YYY``, where ``XXX`` is destination and + ``YYY`` current UNIX timestamp. + +preserve-archive + Don't delete archive after unpacking. + + +EXAMPLES +-------- + +.. code-block:: sh + + __directory /opt/cpma + + require='__directory/opt/cpma' \ + __download /opt/cpma/cnq3.zip \ + --url https://cdn.playmorepromode.com/files/cnq3/cnq3-1.51.zip \ + --sum md5:46da3021ca9eace277115ec9106c5b46 + + require='__download/opt/cpma/cnq3.zip' \ + __unpack /opt/cpma/cnq3.zip \ + --backup-destination \ + --preserve-archive \ + --destination /opt/cpma/server + + +AUTHORS +------- +Ander Punnar + + +COPYING +------- +Copyright \(C) 2020 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__update_alternatives.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__update_alternatives.rst.txt new file mode 100644 index 00000000..73d82d11 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__update_alternatives.rst.txt @@ -0,0 +1,46 @@ +cdist-type__update_alternatives(7) +================================== + +NAME +---- +cdist-type__update_alternatives - Configure alternatives + + +DESCRIPTION +----------- +On Debian and alike systems update-alternatives(1) can be used +to setup alternatives for various programs. +One of the most common used targets is the "editor". + + +REQUIRED PARAMETERS +------------------- +path + Use this path for the given alternative + + +EXAMPLES +-------- + +.. code-block:: sh + + # Setup vim as the default editor + __update_alternatives editor --path /usr/bin/vim.basic + + +SEE ALSO +-------- +:strong:`cdist-type__debconf_set_selections`\ (7), :strong:`update-alternatives`\ (8) + + +AUTHORS +------- +Nico Schottelius + + +COPYING +------- +Copyright \(C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__user.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__user.rst.txt new file mode 100644 index 00000000..ef6b77af --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__user.rst.txt @@ -0,0 +1,105 @@ +cdist-type__user(7) +=================== + +NAME +---- +cdist-type__user - Manage users + + +DESCRIPTION +----------- +This cdist type allows you to create or modify users on the target. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + absent or present, defaults to present + +comment + see usermod(8) + +home + see above + +gid + see above + +password + see above + +shell + see above + +uid + see above + + +BOOLEAN PARAMETERS +------------------ +system + see useradd(8), apply only on user create + +create-home + see useradd(8), apply only on user create + +remove-home + see userdel(8), apply only on user delete + + +MESSAGES +-------- +mod + User is modified + +add + New user added + +userdel -r + If user was deleted with homedir + +userdel + If user was deleted (keeping homedir) + +EXAMPLES +-------- + +.. code-block:: sh + + # Create user account for foobar with operating system default settings + __user foobar + + # Same but with a different shell + __user foobar --shell /bin/zsh + + # Same but for a system account + __user foobar --system + + # Set explicit uid and home + __user foobar --uid 1001 --shell /bin/zsh --home /home/foobar + + # Drop user if exists + __user foobar --state absent + + +SEE ALSO +-------- +:strong:`pw`\ (8), :strong:`usermod`\ (8) + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__user_groups.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__user_groups.rst.txt new file mode 100644 index 00000000..6767b7a8 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__user_groups.rst.txt @@ -0,0 +1,52 @@ +cdist-type__user_groups(7) +========================== + +NAME +---- +cdist-type__user_groups - Manage user groups + + +DESCRIPTION +----------- +Adds or removes a user from one or more groups. + + +REQUIRED PARAMETERS +------------------- +group + the group to which this user should be added or removed. + Can be specified multiple times. + + +OPTIONAL PARAMETERS +------------------- +user + the name of the user. Defaults to object_id + +state + absent or present. Defaults to present. + + +EXAMPLES +-------- + +.. code-block:: sh + + __user_groups nginx --group webuser1 --group webuser2 + + # remove user nginx from groups webuser2 + __user_groups nginx-webuser2 --user nginx \ + --group webuser2 --state absent + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_apache.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_apache.rst.txt new file mode 100644 index 00000000..8358c821 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_apache.rst.txt @@ -0,0 +1,79 @@ +cdist-type__xymon_apache(7) +=========================== + +NAME +---- +cdist-type__xymon_apache - Configure apache2-webserver for Xymon + + +DESCRIPTION +----------- +This cdist type installs and configures apache2 to be used "exclusively" (in +the sense that no other use is taken care of) with Xymon (the systems and +network monitor). + +It depends on `__xymon_server`. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', defaults to 'present'. + +ipacl + IP(-ranges) that have access to the Xymon webpages and CGIs. Apache2-style + syntax suitable for `Require ip ...`. Example: `192.168.1.0/24 10.0.0.0/8` + + +MESSAGES +-------- +mod:rewrite enabled + apache module enabled +conf:xymon enabled + apache config for xymon enabled +apache restarted + apache2.service was reloaded +apache reloaded + apache2.service was restarted + + +EXPLORERS +--------- +active-conf + lists apache2 `conf-enabled` +active-modules + lists active apache2-modules + + +EXAMPLES +-------- + +.. code-block:: sh + + # minmal, only localhost-access: + __xymon_apache + # allow more IPs to access the Xymon-webinterface: + __xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8" --state "present" + + +SEE ALSO +-------- +:strong:`cdist__xymon_server`\ (7) + + +AUTHORS +------- +Thomas Eckert + + +COPYING +------- +Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_client.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_client.rst.txt new file mode 100644 index 00000000..05d085dc --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_client.rst.txt @@ -0,0 +1,66 @@ +cdist-type__xymon_client(7) +=========================== + +NAME +---- +cdist-type__xymon_client - Install the Xymon client + + +DESCRIPTION +----------- +This cdist type installs the Xymon client and configures it to report with +FQDN. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', defaults to 'present'. + +servers + One or more IP addresses (space separated) of the Xymon server(s) to report + to. While DNS-names are ok it is discouraged, defaults to 127.0.0.1. + + +BOOLEAN PARAMETERS +------------------ +msgcache + Enable xymon `msgcache`. Note: XYMONSERVER has to be `127.0.0.1` for using + `msgcache` (see `msgcache (8)` of the xymon documentation for details). + +EXAMPLES +-------- + +.. code-block:: sh + + # minimal, report to 127.0.0.1 + __xymon_client + + # specify server: + __xymon_client --servers "192.168.1.1" + + # activate `msgcache` for passive client: + __xymon_client --msgcache + + +SEE ALSO +-------- +:strong:`cdist__xymon_server`\ (7), :strong:`xymon`\ (7), :strong:`msgcache`\ (8) + + +AUTHORS +------- +Thomas Eckert + + +COPYING +------- +Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_config.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_config.rst.txt new file mode 100644 index 00000000..8adfbe1f --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_config.rst.txt @@ -0,0 +1,78 @@ +cdist-type__xymon_config(7) +=========================== + +NAME +---- +cdist-type__xymon_config - Deploy a Xymon configuration-directory + + +DESCRIPTION +----------- +This cdist type deploys a full Xymon configuration directory from the files-dir +to the host. This type requires an installed Xymon server, e.g. deployed by +`__xymon_server`. + +WARNING: This type _replaces_ the `/etc/xymon/`-directory! The previous +contents is replaced/deleted! + + +REQUIRED PARAMETERS +------------------- +confdir + The directory in `./files/` that contains the `/etc/xymon/`-content to be + deployed. + + +OPTIONAL PARAMETERS +------------------- +owner + passed as-is as `--owner` to `__rsync` + +group + passed as-is as `--group` to `__rsync` + + +OPTIONAL MULTIPLE PARAMETERS +---------------------------- +rsync-opts + identical to __rsync type, only `--`-options are supported + + +REQUIRED FILES +-------------- +The directory specified by `confdir` has to contain a valid xymon-configuration +(`/etc/xymon/`) _plus_ the `ext/`-directory that normally resides in +`/usr/lib/xymon/server/`. + + +EXAMPLES +-------- + +.. code-block:: sh + + __xymon_config --confdir=xymon.example.com + # this will replace /etc/xymon/ on the target host with + # the contents from __xymon_config/files/xymon.example.com/ + + ## the same but set ownership to `xymon:xymon` and exclude + ## the `netrc`-file: + __xymon_config --confdir=xymon.example.com \ + --owner xymon --group xymon \ + --rsync-opts "exclude=netrc" + + +SEE ALSO +-------- +:strong:`cdist__xymon_server`\ (7), :strong:`cdist__rsync`\ (7), :strong:`xymon`\ (7) + +AUTHORS +------- +Thomas Eckert + + +COPYING +------- +Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_server.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_server.rst.txt new file mode 100644 index 00000000..a9a180e1 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__xymon_server.rst.txt @@ -0,0 +1,87 @@ +cdist-type__xymon_server(7) +=========================== + +NAME +---- +cdist-type__xymon_server - Install a Xymon server + + +DESCRIPTION +----------- +This cdist type installs a Xymon (https://www.xymon.com/) server and (optional) +required helper packages. + +This includes the Xymon client as a dependency, so NO NEED to install +`__xymon_client` separately. + +To access the webinterface a webserver is required. The cdist-type +`__xymon_apache` can be used to install and configure the apache webserver for +the use with Xymon. + +Further and day-to-day configuration of Xymon can either be done manually in +`/etc/xymon/` or the directory can be deployed and managed by `__xymon_config`. + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present', 'absent', defaults to 'present'. If '--install_helpers' is + specified for 'absent' the helper packages will be un-installed. + + +BOOLEAN PARAMETERS +------------------ +install_helpers + Install helper packages used by Xymon (fping, heirloom-mailx, traceroute, + ntpdate). + + +EXAMPLES +-------- + +.. code-block:: sh + + # minmal + __xymon_server + + # the same + __xymon_server --state present + + # also install helper packages: + __xymon_server --install_helpers + + # examples to give a more complete picture: __xymon_server installed on + # `xymon.example.com` w/ IP 192.168.1.1: + # + # install webserver and grant 2 private subnets access to the webinterface: + __xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8" + # deploy server-configuration with __xymon_config: + __xymon_config --confdir=xymon.example.com + + # install xymon-client on other machines (not needed on the server): + __xymon_client --servers "192.168.1.1" + + + +SEE ALSO +-------- +:strong:`cdist__xymon_apache`\ (7), :strong:`cdist__xymon_config`\ (7), +:strong:`cdist__xymon_client`\ (7), :strong:`xymon`\ (7) + + +AUTHORS +------- +Thomas Eckert + + +COPYING +------- +Copyright \(C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__yum_repo.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__yum_repo.rst.txt new file mode 100644 index 00000000..94366c3a --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__yum_repo.rst.txt @@ -0,0 +1,124 @@ +cdist-type__yum_repo(7) +======================= + +NAME +---- +cdist-type__yum_repo - Manage yum repositories + + +DESCRIPTION +----------- +For all undocumented parameters see yum.conf(5). + + +REQUIRED PARAMETERS +------------------- +None. + + +OPTIONAL PARAMETERS +------------------- +state + 'present' or 'absent'. Defaults to 'present' + +repositoryid + Defaults to __object_id. + +name + +baseurl + Can be specified multiple times. + +metalink + +mirrorlist + +gpgkey + Can be specified multiple times. + +gpgcakey + +gpgcheck + +exclude + +includepkgs + +failovermethod + +timeout + +http_caching + +retries + +throttle + +bandwidth + +sslcacert + +sslverify + +sslclientcert + +sslclientkey + +ssl_check_cert_permissions + +metadata_expire + +mirrorlist_expire + +proxy + +proxy_username + +proxy_password + +username + +password + +cost + + +BOOLEAN PARAMETERS +------------------ +enabled + +repo_gpgcheck + +disablegroups + ! enablegroups + +keepalive + +skip_if_unavailable + + +EXAMPLES +-------- + +.. code-block:: sh + + __yum_repo epel \ + --name 'Extra Packages for Enterprise Linux 6 - $basearch' \ + --mirrorlist 'https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch' \ + --failovermethod priority \ + --enabled \ + --gpgcheck 1 \ + --gpgkey https://fedoraproject.org/static/0608B895.txt + + +AUTHORS +------- +Steven Armstrong + + +COPYING +------- +Copyright \(C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__zypper_repo.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__zypper_repo.rst.txt new file mode 100644 index 00000000..73799d91 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__zypper_repo.rst.txt @@ -0,0 +1,73 @@ +cdist-type__zypper_repo(7) +========================== + +NAME +---- +cdist-type__zypper_repo - Repository management with zypper + + +DESCRIPTION +----------- +zypper is usually used on the SuSE distribution to manage repositories. + + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +state + Either "present" or "absent" or "enabled" or "disabled", defaults to "present" + + * **present** - make sure that the repo is available, needs uri and repo_desc for all following states, the repo can be searched via repo_id or uri + * **absent** - drop the repo if found + + * **enabled** - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo + * **disabled** - instead of absent (drop), a repo can also set to disabled, which makes it inaccessible + +uri + If supplied, use the uri and not the object id as repo uri. + +repo_desc + If supplied, use the description and not the object id as repo description, only used if the state is present and the repo has to be created + +repo_id + If supplied, use the id and not the object id as repo id, can be used with state absent, enabled and disabled + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure testrepo in installed + __zypper_repo testrepo --state present --uri http://url.to.your.repo/with/path + + # Drop repo by repo uri + __zypper_repo testrepo --state absent --uri http://url.to.your.repo/with/path + + # Drop repo by id number (attention: repos are always numbered from 1 to max) + __zypper_repo testrepo --state absent --repo_id 1 + + # enable repo by id + __zypper_repo testrepo2 --state enabled --repo_id 2 + + # enable repo by uri + __zypper_repo testrepo3 --state enabled --uri http://url.to.your.repo/with/path + + # disable a repo works like enabling it + __zypper_repo testrepo4 --state disabled --repo_id 4 + + +AUTHORS +------- +Daniel Heule + + +COPYING +------- +Copyright \(C) 2013 Daniel Heule. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_sources/man7/cdist-type__zypper_service.rst.txt b/src/extra/manual/6.7.0/_sources/man7/cdist-type__zypper_service.rst.txt new file mode 100644 index 00000000..e082dc02 --- /dev/null +++ b/src/extra/manual/6.7.0/_sources/man7/cdist-type__zypper_service.rst.txt @@ -0,0 +1,66 @@ +cdist-type__zypper_service(7) +============================= + +NAME +---- +cdist-type__zypper_service - Service management with zypper + + +DESCRIPTION +----------- +zypper is usually used on SuSE systems to manage services. + + +REQUIRED PARAMETERS +------------------- +uri + Uri of the service + + +OPTIONAL PARAMETERS +------------------- +service_desc + If supplied, use the service_desc and not the object id as description for the service. + +state + Either "present" or "absent", defaults to "present" + +type + Defaults to "ris", the standard type of services at SLES11. For other values, see manpage of zypper. + + +BOOLEAN PARAMETERS +------------------ +remove-all-other-services + Drop all other services found on the target host before adding the new one. + +remove-all-repos + If supplied, remove all existing repos prior to setup the new service. + + +EXAMPLES +-------- + +.. code-block:: sh + + # Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded + __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos + + # Ensure that internal SLES11 SP3 RIS is in installed, no changes to other services or repos + __zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" + + # Drop service by uri, no changes to other services or repos + __zypper_service INTERNAL_SLES11_SP3 --state absent --uri "http://path/to/your/ris/dir" + + +AUTHORS +------- +Daniel Heule + + +COPYING +------- +Copyright \(C) 2013 Daniel Heule. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/src/extra/manual/6.7.0/_static/basic.css b/src/extra/manual/6.7.0/_static/basic.css new file mode 100644 index 00000000..01192852 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/basic.css @@ -0,0 +1,768 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 450px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px 7px 0 7px; + background-color: #ffe; + width: 40%; + float: right; +} + +p.sidebar-title { + font-weight: bold; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic { + border: 1px solid #ccc; + padding: 7px 7px 0 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +div.admonition dl { + margin-bottom: 0; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > p:first-child, +td > p:first-child { + margin-top: 0px; +} + +th > p:last-child, +td > p:last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist td { + vertical-align: top; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +li > p:first-child { + margin-top: 0px; +} + +li > p:last-child { + margin-bottom: 0px; +} + +dl.footnote > dt, +dl.citation > dt { + float: left; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > p:first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0.5em; + content: ":"; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; +} + +td.linenos pre { + padding: 5px 0px; + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + margin-left: 0.5em; +} + +table.highlighttable td { + padding: 0 0.5em 0 0.5em; +} + +div.code-block-caption { + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +div.code-block-caption + div > div.highlight > pre { + margin-top: 0; +} + +div.doctest > div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + padding: 1em 1em 0; +} + +div.literal-block-wrapper div.highlight { + margin: 0; +} + +code.descname { + background-color: transparent; + font-weight: bold; + font-size: 1.2em; +} + +code.descclassname { + background-color: transparent; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: relative; + left: 0px; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/src/extra/manual/6.7.0/_static/cdist-logo.jpeg b/src/extra/manual/6.7.0/_static/cdist-logo.jpeg new file mode 100644 index 00000000..9bfa2529 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/cdist-logo.jpeg differ diff --git a/src/extra/manual/6.7.0/_static/cdist-logo.png b/src/extra/manual/6.7.0/_static/cdist-logo.png new file mode 100644 index 00000000..13c27927 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/cdist-logo.png differ diff --git a/src/extra/manual/6.7.0/_static/css/badge_only.css b/src/extra/manual/6.7.0/_static/css/badge_only.css new file mode 100644 index 00000000..3c33cef5 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/css/badge_only.css @@ -0,0 +1 @@ +.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-weight:normal;font-style:normal;src:url("../fonts/fontawesome-webfont.eot");src:url("../fonts/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff") format("woff"),url("../fonts/fontawesome-webfont.ttf") format("truetype"),url("../fonts/fontawesome-webfont.svg#FontAwesome") format("svg")}.fa:before{display:inline-block;font-family:FontAwesome;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa{display:inline-block;text-decoration:inherit}li .fa{display:inline-block}li .fa-large:before,li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-0.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before,ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before{content:""}.icon-book:before{content:""}.fa-caret-down:before{content:""}.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.icon-caret-up:before{content:""}.fa-caret-left:before{content:""}.icon-caret-left:before{content:""}.fa-caret-right:before{content:""}.icon-caret-right:before{content:""}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}} diff --git a/src/extra/manual/6.7.0/_static/css/theme.css b/src/extra/manual/6.7.0/_static/css/theme.css new file mode 100644 index 00000000..aed8cef0 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/css/theme.css @@ -0,0 +1,6 @@ +/* sphinx_rtd_theme version 0.4.3 | MIT license */ +/* Built 20190212 16:02 */ +*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}audio,canvas,video{display:inline-block;*display:inline;*zoom:1}audio:not([controls]){display:none}[hidden]{display:none}*{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%}body{margin:0}a:hover,a:active{outline:0}abbr[title]{border-bottom:1px dotted}b,strong{font-weight:bold}blockquote{margin:0}dfn{font-style:italic}ins{background:#ff9;color:#000;text-decoration:none}mark{background:#ff0;color:#000;font-style:italic;font-weight:bold}pre,code,.rst-content tt,.rst-content code,kbd,samp{font-family:monospace,serif;_font-family:"courier new",monospace;font-size:1em}pre{white-space:pre}q{quotes:none}q:before,q:after{content:"";content:none}small{font-size:85%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-0.5em}sub{bottom:-0.25em}ul,ol,dl{margin:0;padding:0;list-style:none;list-style-image:none}li{list-style:none}dd{margin:0}img{border:0;-ms-interpolation-mode:bicubic;vertical-align:middle;max-width:100%}svg:not(:root){overflow:hidden}figure{margin:0}form{margin:0}fieldset{border:0;margin:0;padding:0}label{cursor:pointer}legend{border:0;*margin-left:-7px;padding:0;white-space:normal}button,input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}button,input{line-height:normal}button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;*overflow:visible}button[disabled],input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0;*width:13px;*height:13px}input[type="search"]{-webkit-appearance:textfield;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;box-sizing:content-box}input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}textarea{overflow:auto;vertical-align:top;resize:vertical}table{border-collapse:collapse;border-spacing:0}td{vertical-align:top}.chromeframe{margin:.2em 0;background:#ccc;color:#000;padding:.2em 0}.ir{display:block;border:0;text-indent:-999em;overflow:hidden;background-color:transparent;background-repeat:no-repeat;text-align:left;direction:ltr;*line-height:0}.ir br{display:none}.hidden{display:none !important;visibility:hidden}.visuallyhidden{border:0;clip:rect(0 0 0 0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.visuallyhidden.focusable:active,.visuallyhidden.focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.invisible{visibility:hidden}.relative{position:relative}big,small{font-size:100%}@media print{html,body,section{background:none !important}*{box-shadow:none !important;text-shadow:none !important;filter:none !important;-ms-filter:none !important}a,a:visited{text-decoration:underline}.ir a:after,a[href^="javascript:"]:after,a[href^="#"]:after{content:""}pre,blockquote{page-break-inside:avoid}thead{display:table-header-group}tr,img{page-break-inside:avoid}img{max-width:100% !important}@page{margin:.5cm}p,h2,.rst-content .toctree-wrapper p.caption,h3{orphans:3;widows:3}h2,.rst-content .toctree-wrapper p.caption,h3{page-break-after:avoid}}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition,.btn,input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"],select,textarea,.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a,.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a,.wy-nav-top a{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:""}.clearfix:after{clear:both}/*! + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url("../fonts/fontawesome-webfont.eot?v=4.7.0");src:url("../fonts/fontawesome-webfont.eot?#iefix&v=4.7.0") format("embedded-opentype"),url("../fonts/fontawesome-webfont.woff2?v=4.7.0") format("woff2"),url("../fonts/fontawesome-webfont.woff?v=4.7.0") format("woff"),url("../fonts/fontawesome-webfont.ttf?v=4.7.0") format("truetype"),url("../fonts/fontawesome-webfont.svg?v=4.7.0#fontawesomeregular") format("svg");font-weight:normal;font-style:normal}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.3333333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.2857142857em;text-align:center}.fa-ul{padding-left:0;margin-left:2.1428571429em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.1428571429em;width:2.1428571429em;top:.1428571429em;text-align:center}.fa-li.fa-lg{left:-1.8571428571em}.fa-border{padding:.2em .25em .15em;border:solid 0.08em #eee;border-radius:.1em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.wy-menu-vertical li span.fa-pull-left.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-left.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-left.toctree-expand,.rst-content .fa-pull-left.admonition-title,.rst-content h1 .fa-pull-left.headerlink,.rst-content h2 .fa-pull-left.headerlink,.rst-content h3 .fa-pull-left.headerlink,.rst-content h4 .fa-pull-left.headerlink,.rst-content h5 .fa-pull-left.headerlink,.rst-content h6 .fa-pull-left.headerlink,.rst-content dl dt .fa-pull-left.headerlink,.rst-content p.caption .fa-pull-left.headerlink,.rst-content table>caption .fa-pull-left.headerlink,.rst-content .code-block-caption .fa-pull-left.headerlink,.rst-content tt.download span.fa-pull-left:first-child,.rst-content code.download span.fa-pull-left:first-child,.fa-pull-left.icon{margin-right:.3em}.fa.fa-pull-right,.wy-menu-vertical li span.fa-pull-right.toctree-expand,.wy-menu-vertical li.on a span.fa-pull-right.toctree-expand,.wy-menu-vertical li.current>a span.fa-pull-right.toctree-expand,.rst-content .fa-pull-right.admonition-title,.rst-content h1 .fa-pull-right.headerlink,.rst-content h2 .fa-pull-right.headerlink,.rst-content h3 .fa-pull-right.headerlink,.rst-content h4 .fa-pull-right.headerlink,.rst-content h5 .fa-pull-right.headerlink,.rst-content h6 .fa-pull-right.headerlink,.rst-content dl dt .fa-pull-right.headerlink,.rst-content p.caption .fa-pull-right.headerlink,.rst-content table>caption .fa-pull-right.headerlink,.rst-content .code-block-caption .fa-pull-right.headerlink,.rst-content tt.download span.fa-pull-right:first-child,.rst-content code.download span.fa-pull-right:first-child,.fa-pull-right.icon{margin-left:.3em}.pull-right{float:right}.pull-left{float:left}.fa.pull-left,.wy-menu-vertical li span.pull-left.toctree-expand,.wy-menu-vertical li.on a span.pull-left.toctree-expand,.wy-menu-vertical li.current>a span.pull-left.toctree-expand,.rst-content .pull-left.admonition-title,.rst-content h1 .pull-left.headerlink,.rst-content h2 .pull-left.headerlink,.rst-content h3 .pull-left.headerlink,.rst-content h4 .pull-left.headerlink,.rst-content h5 .pull-left.headerlink,.rst-content h6 .pull-left.headerlink,.rst-content dl dt .pull-left.headerlink,.rst-content p.caption .pull-left.headerlink,.rst-content table>caption .pull-left.headerlink,.rst-content .code-block-caption .pull-left.headerlink,.rst-content tt.download span.pull-left:first-child,.rst-content code.download span.pull-left:first-child,.pull-left.icon{margin-right:.3em}.fa.pull-right,.wy-menu-vertical li span.pull-right.toctree-expand,.wy-menu-vertical li.on a span.pull-right.toctree-expand,.wy-menu-vertical li.current>a span.pull-right.toctree-expand,.rst-content .pull-right.admonition-title,.rst-content h1 .pull-right.headerlink,.rst-content h2 .pull-right.headerlink,.rst-content h3 .pull-right.headerlink,.rst-content h4 .pull-right.headerlink,.rst-content h5 .pull-right.headerlink,.rst-content h6 .pull-right.headerlink,.rst-content dl dt .pull-right.headerlink,.rst-content p.caption .pull-right.headerlink,.rst-content table>caption .pull-right.headerlink,.rst-content .code-block-caption .pull-right.headerlink,.rst-content tt.download span.pull-right:first-child,.rst-content code.download span.pull-right:first-child,.pull-right.icon{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}.fa-pulse{-webkit-animation:fa-spin 1s infinite steps(8);animation:fa-spin 1s infinite steps(8)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scale(-1, 1);-ms-transform:scale(-1, 1);transform:scale(-1, 1)}.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";-webkit-transform:scale(1, -1);-ms-transform:scale(1, -1);transform:scale(1, -1)}:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-flip-horizontal,:root .fa-flip-vertical{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:""}.fa-music:before{content:""}.fa-search:before,.icon-search:before{content:""}.fa-envelope-o:before{content:""}.fa-heart:before{content:""}.fa-star:before{content:""}.fa-star-o:before{content:""}.fa-user:before{content:""}.fa-film:before{content:""}.fa-th-large:before{content:""}.fa-th:before{content:""}.fa-th-list:before{content:""}.fa-check:before{content:""}.fa-remove:before,.fa-close:before,.fa-times:before{content:""}.fa-search-plus:before{content:""}.fa-search-minus:before{content:""}.fa-power-off:before{content:""}.fa-signal:before{content:""}.fa-gear:before,.fa-cog:before{content:""}.fa-trash-o:before{content:""}.fa-home:before,.icon-home:before{content:""}.fa-file-o:before{content:""}.fa-clock-o:before{content:""}.fa-road:before{content:""}.fa-download:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{content:""}.fa-arrow-circle-o-down:before{content:""}.fa-arrow-circle-o-up:before{content:""}.fa-inbox:before{content:""}.fa-play-circle-o:before{content:""}.fa-rotate-right:before,.fa-repeat:before{content:""}.fa-refresh:before{content:""}.fa-list-alt:before{content:""}.fa-lock:before{content:""}.fa-flag:before{content:""}.fa-headphones:before{content:""}.fa-volume-off:before{content:""}.fa-volume-down:before{content:""}.fa-volume-up:before{content:""}.fa-qrcode:before{content:""}.fa-barcode:before{content:""}.fa-tag:before{content:""}.fa-tags:before{content:""}.fa-book:before,.icon-book:before{content:""}.fa-bookmark:before{content:""}.fa-print:before{content:""}.fa-camera:before{content:""}.fa-font:before{content:""}.fa-bold:before{content:""}.fa-italic:before{content:""}.fa-text-height:before{content:""}.fa-text-width:before{content:""}.fa-align-left:before{content:""}.fa-align-center:before{content:""}.fa-align-right:before{content:""}.fa-align-justify:before{content:""}.fa-list:before{content:""}.fa-dedent:before,.fa-outdent:before{content:""}.fa-indent:before{content:""}.fa-video-camera:before{content:""}.fa-photo:before,.fa-image:before,.fa-picture-o:before{content:""}.fa-pencil:before{content:""}.fa-map-marker:before{content:""}.fa-adjust:before{content:""}.fa-tint:before{content:""}.fa-edit:before,.fa-pencil-square-o:before{content:""}.fa-share-square-o:before{content:""}.fa-check-square-o:before{content:""}.fa-arrows:before{content:""}.fa-step-backward:before{content:""}.fa-fast-backward:before{content:""}.fa-backward:before{content:""}.fa-play:before{content:""}.fa-pause:before{content:""}.fa-stop:before{content:""}.fa-forward:before{content:""}.fa-fast-forward:before{content:""}.fa-step-forward:before{content:""}.fa-eject:before{content:""}.fa-chevron-left:before{content:""}.fa-chevron-right:before{content:""}.fa-plus-circle:before{content:""}.fa-minus-circle:before{content:""}.fa-times-circle:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before{content:""}.fa-check-circle:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before{content:""}.fa-question-circle:before{content:""}.fa-info-circle:before{content:""}.fa-crosshairs:before{content:""}.fa-times-circle-o:before{content:""}.fa-check-circle-o:before{content:""}.fa-ban:before{content:""}.fa-arrow-left:before{content:""}.fa-arrow-right:before{content:""}.fa-arrow-up:before{content:""}.fa-arrow-down:before{content:""}.fa-mail-forward:before,.fa-share:before{content:""}.fa-expand:before{content:""}.fa-compress:before{content:""}.fa-plus:before{content:""}.fa-minus:before{content:""}.fa-asterisk:before{content:""}.fa-exclamation-circle:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before,.rst-content .admonition-title:before{content:""}.fa-gift:before{content:""}.fa-leaf:before{content:""}.fa-fire:before,.icon-fire:before{content:""}.fa-eye:before{content:""}.fa-eye-slash:before{content:""}.fa-warning:before,.fa-exclamation-triangle:before{content:""}.fa-plane:before{content:""}.fa-calendar:before{content:""}.fa-random:before{content:""}.fa-comment:before{content:""}.fa-magnet:before{content:""}.fa-chevron-up:before{content:""}.fa-chevron-down:before{content:""}.fa-retweet:before{content:""}.fa-shopping-cart:before{content:""}.fa-folder:before{content:""}.fa-folder-open:before{content:""}.fa-arrows-v:before{content:""}.fa-arrows-h:before{content:""}.fa-bar-chart-o:before,.fa-bar-chart:before{content:""}.fa-twitter-square:before{content:""}.fa-facebook-square:before{content:""}.fa-camera-retro:before{content:""}.fa-key:before{content:""}.fa-gears:before,.fa-cogs:before{content:""}.fa-comments:before{content:""}.fa-thumbs-o-up:before{content:""}.fa-thumbs-o-down:before{content:""}.fa-star-half:before{content:""}.fa-heart-o:before{content:""}.fa-sign-out:before{content:""}.fa-linkedin-square:before{content:""}.fa-thumb-tack:before{content:""}.fa-external-link:before{content:""}.fa-sign-in:before{content:""}.fa-trophy:before{content:""}.fa-github-square:before{content:""}.fa-upload:before{content:""}.fa-lemon-o:before{content:""}.fa-phone:before{content:""}.fa-square-o:before{content:""}.fa-bookmark-o:before{content:""}.fa-phone-square:before{content:""}.fa-twitter:before{content:""}.fa-facebook-f:before,.fa-facebook:before{content:""}.fa-github:before,.icon-github:before{content:""}.fa-unlock:before{content:""}.fa-credit-card:before{content:""}.fa-feed:before,.fa-rss:before{content:""}.fa-hdd-o:before{content:""}.fa-bullhorn:before{content:""}.fa-bell:before{content:""}.fa-certificate:before{content:""}.fa-hand-o-right:before{content:""}.fa-hand-o-left:before{content:""}.fa-hand-o-up:before{content:""}.fa-hand-o-down:before{content:""}.fa-arrow-circle-left:before,.icon-circle-arrow-left:before{content:""}.fa-arrow-circle-right:before,.icon-circle-arrow-right:before{content:""}.fa-arrow-circle-up:before{content:""}.fa-arrow-circle-down:before{content:""}.fa-globe:before{content:""}.fa-wrench:before{content:""}.fa-tasks:before{content:""}.fa-filter:before{content:""}.fa-briefcase:before{content:""}.fa-arrows-alt:before{content:""}.fa-group:before,.fa-users:before{content:""}.fa-chain:before,.fa-link:before,.icon-link:before{content:""}.fa-cloud:before{content:""}.fa-flask:before{content:""}.fa-cut:before,.fa-scissors:before{content:""}.fa-copy:before,.fa-files-o:before{content:""}.fa-paperclip:before{content:""}.fa-save:before,.fa-floppy-o:before{content:""}.fa-square:before{content:""}.fa-navicon:before,.fa-reorder:before,.fa-bars:before{content:""}.fa-list-ul:before{content:""}.fa-list-ol:before{content:""}.fa-strikethrough:before{content:""}.fa-underline:before{content:""}.fa-table:before{content:""}.fa-magic:before{content:""}.fa-truck:before{content:""}.fa-pinterest:before{content:""}.fa-pinterest-square:before{content:""}.fa-google-plus-square:before{content:""}.fa-google-plus:before{content:""}.fa-money:before{content:""}.fa-caret-down:before,.wy-dropdown .caret:before,.icon-caret-down:before{content:""}.fa-caret-up:before{content:""}.fa-caret-left:before{content:""}.fa-caret-right:before{content:""}.fa-columns:before{content:""}.fa-unsorted:before,.fa-sort:before{content:""}.fa-sort-down:before,.fa-sort-desc:before{content:""}.fa-sort-up:before,.fa-sort-asc:before{content:""}.fa-envelope:before{content:""}.fa-linkedin:before{content:""}.fa-rotate-left:before,.fa-undo:before{content:""}.fa-legal:before,.fa-gavel:before{content:""}.fa-dashboard:before,.fa-tachometer:before{content:""}.fa-comment-o:before{content:""}.fa-comments-o:before{content:""}.fa-flash:before,.fa-bolt:before{content:""}.fa-sitemap:before{content:""}.fa-umbrella:before{content:""}.fa-paste:before,.fa-clipboard:before{content:""}.fa-lightbulb-o:before{content:""}.fa-exchange:before{content:""}.fa-cloud-download:before{content:""}.fa-cloud-upload:before{content:""}.fa-user-md:before{content:""}.fa-stethoscope:before{content:""}.fa-suitcase:before{content:""}.fa-bell-o:before{content:""}.fa-coffee:before{content:""}.fa-cutlery:before{content:""}.fa-file-text-o:before{content:""}.fa-building-o:before{content:""}.fa-hospital-o:before{content:""}.fa-ambulance:before{content:""}.fa-medkit:before{content:""}.fa-fighter-jet:before{content:""}.fa-beer:before{content:""}.fa-h-square:before{content:""}.fa-plus-square:before{content:""}.fa-angle-double-left:before{content:""}.fa-angle-double-right:before{content:""}.fa-angle-double-up:before{content:""}.fa-angle-double-down:before{content:""}.fa-angle-left:before{content:""}.fa-angle-right:before{content:""}.fa-angle-up:before{content:""}.fa-angle-down:before{content:""}.fa-desktop:before{content:""}.fa-laptop:before{content:""}.fa-tablet:before{content:""}.fa-mobile-phone:before,.fa-mobile:before{content:""}.fa-circle-o:before{content:""}.fa-quote-left:before{content:""}.fa-quote-right:before{content:""}.fa-spinner:before{content:""}.fa-circle:before{content:""}.fa-mail-reply:before,.fa-reply:before{content:""}.fa-github-alt:before{content:""}.fa-folder-o:before{content:""}.fa-folder-open-o:before{content:""}.fa-smile-o:before{content:""}.fa-frown-o:before{content:""}.fa-meh-o:before{content:""}.fa-gamepad:before{content:""}.fa-keyboard-o:before{content:""}.fa-flag-o:before{content:""}.fa-flag-checkered:before{content:""}.fa-terminal:before{content:""}.fa-code:before{content:""}.fa-mail-reply-all:before,.fa-reply-all:before{content:""}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:""}.fa-location-arrow:before{content:""}.fa-crop:before{content:""}.fa-code-fork:before{content:""}.fa-unlink:before,.fa-chain-broken:before{content:""}.fa-question:before{content:""}.fa-info:before{content:""}.fa-exclamation:before{content:""}.fa-superscript:before{content:""}.fa-subscript:before{content:""}.fa-eraser:before{content:""}.fa-puzzle-piece:before{content:""}.fa-microphone:before{content:""}.fa-microphone-slash:before{content:""}.fa-shield:before{content:""}.fa-calendar-o:before{content:""}.fa-fire-extinguisher:before{content:""}.fa-rocket:before{content:""}.fa-maxcdn:before{content:""}.fa-chevron-circle-left:before{content:""}.fa-chevron-circle-right:before{content:""}.fa-chevron-circle-up:before{content:""}.fa-chevron-circle-down:before{content:""}.fa-html5:before{content:""}.fa-css3:before{content:""}.fa-anchor:before{content:""}.fa-unlock-alt:before{content:""}.fa-bullseye:before{content:""}.fa-ellipsis-h:before{content:""}.fa-ellipsis-v:before{content:""}.fa-rss-square:before{content:""}.fa-play-circle:before{content:""}.fa-ticket:before{content:""}.fa-minus-square:before{content:""}.fa-minus-square-o:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before{content:""}.fa-level-up:before{content:""}.fa-level-down:before{content:""}.fa-check-square:before{content:""}.fa-pencil-square:before{content:""}.fa-external-link-square:before{content:""}.fa-share-square:before{content:""}.fa-compass:before{content:""}.fa-toggle-down:before,.fa-caret-square-o-down:before{content:""}.fa-toggle-up:before,.fa-caret-square-o-up:before{content:""}.fa-toggle-right:before,.fa-caret-square-o-right:before{content:""}.fa-euro:before,.fa-eur:before{content:""}.fa-gbp:before{content:""}.fa-dollar:before,.fa-usd:before{content:""}.fa-rupee:before,.fa-inr:before{content:""}.fa-cny:before,.fa-rmb:before,.fa-yen:before,.fa-jpy:before{content:""}.fa-ruble:before,.fa-rouble:before,.fa-rub:before{content:""}.fa-won:before,.fa-krw:before{content:""}.fa-bitcoin:before,.fa-btc:before{content:""}.fa-file:before{content:""}.fa-file-text:before{content:""}.fa-sort-alpha-asc:before{content:""}.fa-sort-alpha-desc:before{content:""}.fa-sort-amount-asc:before{content:""}.fa-sort-amount-desc:before{content:""}.fa-sort-numeric-asc:before{content:""}.fa-sort-numeric-desc:before{content:""}.fa-thumbs-up:before{content:""}.fa-thumbs-down:before{content:""}.fa-youtube-square:before{content:""}.fa-youtube:before{content:""}.fa-xing:before{content:""}.fa-xing-square:before{content:""}.fa-youtube-play:before{content:""}.fa-dropbox:before{content:""}.fa-stack-overflow:before{content:""}.fa-instagram:before{content:""}.fa-flickr:before{content:""}.fa-adn:before{content:""}.fa-bitbucket:before,.icon-bitbucket:before{content:""}.fa-bitbucket-square:before{content:""}.fa-tumblr:before{content:""}.fa-tumblr-square:before{content:""}.fa-long-arrow-down:before{content:""}.fa-long-arrow-up:before{content:""}.fa-long-arrow-left:before{content:""}.fa-long-arrow-right:before{content:""}.fa-apple:before{content:""}.fa-windows:before{content:""}.fa-android:before{content:""}.fa-linux:before{content:""}.fa-dribbble:before{content:""}.fa-skype:before{content:""}.fa-foursquare:before{content:""}.fa-trello:before{content:""}.fa-female:before{content:""}.fa-male:before{content:""}.fa-gittip:before,.fa-gratipay:before{content:""}.fa-sun-o:before{content:""}.fa-moon-o:before{content:""}.fa-archive:before{content:""}.fa-bug:before{content:""}.fa-vk:before{content:""}.fa-weibo:before{content:""}.fa-renren:before{content:""}.fa-pagelines:before{content:""}.fa-stack-exchange:before{content:""}.fa-arrow-circle-o-right:before{content:""}.fa-arrow-circle-o-left:before{content:""}.fa-toggle-left:before,.fa-caret-square-o-left:before{content:""}.fa-dot-circle-o:before{content:""}.fa-wheelchair:before{content:""}.fa-vimeo-square:before{content:""}.fa-turkish-lira:before,.fa-try:before{content:""}.fa-plus-square-o:before,.wy-menu-vertical li span.toctree-expand:before{content:""}.fa-space-shuttle:before{content:""}.fa-slack:before{content:""}.fa-envelope-square:before{content:""}.fa-wordpress:before{content:""}.fa-openid:before{content:""}.fa-institution:before,.fa-bank:before,.fa-university:before{content:""}.fa-mortar-board:before,.fa-graduation-cap:before{content:""}.fa-yahoo:before{content:""}.fa-google:before{content:""}.fa-reddit:before{content:""}.fa-reddit-square:before{content:""}.fa-stumbleupon-circle:before{content:""}.fa-stumbleupon:before{content:""}.fa-delicious:before{content:""}.fa-digg:before{content:""}.fa-pied-piper-pp:before{content:""}.fa-pied-piper-alt:before{content:""}.fa-drupal:before{content:""}.fa-joomla:before{content:""}.fa-language:before{content:""}.fa-fax:before{content:""}.fa-building:before{content:""}.fa-child:before{content:""}.fa-paw:before{content:""}.fa-spoon:before{content:""}.fa-cube:before{content:""}.fa-cubes:before{content:""}.fa-behance:before{content:""}.fa-behance-square:before{content:""}.fa-steam:before{content:""}.fa-steam-square:before{content:""}.fa-recycle:before{content:""}.fa-automobile:before,.fa-car:before{content:""}.fa-cab:before,.fa-taxi:before{content:""}.fa-tree:before{content:""}.fa-spotify:before{content:""}.fa-deviantart:before{content:""}.fa-soundcloud:before{content:""}.fa-database:before{content:""}.fa-file-pdf-o:before{content:""}.fa-file-word-o:before{content:""}.fa-file-excel-o:before{content:""}.fa-file-powerpoint-o:before{content:""}.fa-file-photo-o:before,.fa-file-picture-o:before,.fa-file-image-o:before{content:""}.fa-file-zip-o:before,.fa-file-archive-o:before{content:""}.fa-file-sound-o:before,.fa-file-audio-o:before{content:""}.fa-file-movie-o:before,.fa-file-video-o:before{content:""}.fa-file-code-o:before{content:""}.fa-vine:before{content:""}.fa-codepen:before{content:""}.fa-jsfiddle:before{content:""}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-saver:before,.fa-support:before,.fa-life-ring:before{content:""}.fa-circle-o-notch:before{content:""}.fa-ra:before,.fa-resistance:before,.fa-rebel:before{content:""}.fa-ge:before,.fa-empire:before{content:""}.fa-git-square:before{content:""}.fa-git:before{content:""}.fa-y-combinator-square:before,.fa-yc-square:before,.fa-hacker-news:before{content:""}.fa-tencent-weibo:before{content:""}.fa-qq:before{content:""}.fa-wechat:before,.fa-weixin:before{content:""}.fa-send:before,.fa-paper-plane:before{content:""}.fa-send-o:before,.fa-paper-plane-o:before{content:""}.fa-history:before{content:""}.fa-circle-thin:before{content:""}.fa-header:before{content:""}.fa-paragraph:before{content:""}.fa-sliders:before{content:""}.fa-share-alt:before{content:""}.fa-share-alt-square:before{content:""}.fa-bomb:before{content:""}.fa-soccer-ball-o:before,.fa-futbol-o:before{content:""}.fa-tty:before{content:""}.fa-binoculars:before{content:""}.fa-plug:before{content:""}.fa-slideshare:before{content:""}.fa-twitch:before{content:""}.fa-yelp:before{content:""}.fa-newspaper-o:before{content:""}.fa-wifi:before{content:""}.fa-calculator:before{content:""}.fa-paypal:before{content:""}.fa-google-wallet:before{content:""}.fa-cc-visa:before{content:""}.fa-cc-mastercard:before{content:""}.fa-cc-discover:before{content:""}.fa-cc-amex:before{content:""}.fa-cc-paypal:before{content:""}.fa-cc-stripe:before{content:""}.fa-bell-slash:before{content:""}.fa-bell-slash-o:before{content:""}.fa-trash:before{content:""}.fa-copyright:before{content:""}.fa-at:before{content:""}.fa-eyedropper:before{content:""}.fa-paint-brush:before{content:""}.fa-birthday-cake:before{content:""}.fa-area-chart:before{content:""}.fa-pie-chart:before{content:""}.fa-line-chart:before{content:""}.fa-lastfm:before{content:""}.fa-lastfm-square:before{content:""}.fa-toggle-off:before{content:""}.fa-toggle-on:before{content:""}.fa-bicycle:before{content:""}.fa-bus:before{content:""}.fa-ioxhost:before{content:""}.fa-angellist:before{content:""}.fa-cc:before{content:""}.fa-shekel:before,.fa-sheqel:before,.fa-ils:before{content:""}.fa-meanpath:before{content:""}.fa-buysellads:before{content:""}.fa-connectdevelop:before{content:""}.fa-dashcube:before{content:""}.fa-forumbee:before{content:""}.fa-leanpub:before{content:""}.fa-sellsy:before{content:""}.fa-shirtsinbulk:before{content:""}.fa-simplybuilt:before{content:""}.fa-skyatlas:before{content:""}.fa-cart-plus:before{content:""}.fa-cart-arrow-down:before{content:""}.fa-diamond:before{content:""}.fa-ship:before{content:""}.fa-user-secret:before{content:""}.fa-motorcycle:before{content:""}.fa-street-view:before{content:""}.fa-heartbeat:before{content:""}.fa-venus:before{content:""}.fa-mars:before{content:""}.fa-mercury:before{content:""}.fa-intersex:before,.fa-transgender:before{content:""}.fa-transgender-alt:before{content:""}.fa-venus-double:before{content:""}.fa-mars-double:before{content:""}.fa-venus-mars:before{content:""}.fa-mars-stroke:before{content:""}.fa-mars-stroke-v:before{content:""}.fa-mars-stroke-h:before{content:""}.fa-neuter:before{content:""}.fa-genderless:before{content:""}.fa-facebook-official:before{content:""}.fa-pinterest-p:before{content:""}.fa-whatsapp:before{content:""}.fa-server:before{content:""}.fa-user-plus:before{content:""}.fa-user-times:before{content:""}.fa-hotel:before,.fa-bed:before{content:""}.fa-viacoin:before{content:""}.fa-train:before{content:""}.fa-subway:before{content:""}.fa-medium:before{content:""}.fa-yc:before,.fa-y-combinator:before{content:""}.fa-optin-monster:before{content:""}.fa-opencart:before{content:""}.fa-expeditedssl:before{content:""}.fa-battery-4:before,.fa-battery:before,.fa-battery-full:before{content:""}.fa-battery-3:before,.fa-battery-three-quarters:before{content:""}.fa-battery-2:before,.fa-battery-half:before{content:""}.fa-battery-1:before,.fa-battery-quarter:before{content:""}.fa-battery-0:before,.fa-battery-empty:before{content:""}.fa-mouse-pointer:before{content:""}.fa-i-cursor:before{content:""}.fa-object-group:before{content:""}.fa-object-ungroup:before{content:""}.fa-sticky-note:before{content:""}.fa-sticky-note-o:before{content:""}.fa-cc-jcb:before{content:""}.fa-cc-diners-club:before{content:""}.fa-clone:before{content:""}.fa-balance-scale:before{content:""}.fa-hourglass-o:before{content:""}.fa-hourglass-1:before,.fa-hourglass-start:before{content:""}.fa-hourglass-2:before,.fa-hourglass-half:before{content:""}.fa-hourglass-3:before,.fa-hourglass-end:before{content:""}.fa-hourglass:before{content:""}.fa-hand-grab-o:before,.fa-hand-rock-o:before{content:""}.fa-hand-stop-o:before,.fa-hand-paper-o:before{content:""}.fa-hand-scissors-o:before{content:""}.fa-hand-lizard-o:before{content:""}.fa-hand-spock-o:before{content:""}.fa-hand-pointer-o:before{content:""}.fa-hand-peace-o:before{content:""}.fa-trademark:before{content:""}.fa-registered:before{content:""}.fa-creative-commons:before{content:""}.fa-gg:before{content:""}.fa-gg-circle:before{content:""}.fa-tripadvisor:before{content:""}.fa-odnoklassniki:before{content:""}.fa-odnoklassniki-square:before{content:""}.fa-get-pocket:before{content:""}.fa-wikipedia-w:before{content:""}.fa-safari:before{content:""}.fa-chrome:before{content:""}.fa-firefox:before{content:""}.fa-opera:before{content:""}.fa-internet-explorer:before{content:""}.fa-tv:before,.fa-television:before{content:""}.fa-contao:before{content:""}.fa-500px:before{content:""}.fa-amazon:before{content:""}.fa-calendar-plus-o:before{content:""}.fa-calendar-minus-o:before{content:""}.fa-calendar-times-o:before{content:""}.fa-calendar-check-o:before{content:""}.fa-industry:before{content:""}.fa-map-pin:before{content:""}.fa-map-signs:before{content:""}.fa-map-o:before{content:""}.fa-map:before{content:""}.fa-commenting:before{content:""}.fa-commenting-o:before{content:""}.fa-houzz:before{content:""}.fa-vimeo:before{content:""}.fa-black-tie:before{content:""}.fa-fonticons:before{content:""}.fa-reddit-alien:before{content:""}.fa-edge:before{content:""}.fa-credit-card-alt:before{content:""}.fa-codiepie:before{content:""}.fa-modx:before{content:""}.fa-fort-awesome:before{content:""}.fa-usb:before{content:""}.fa-product-hunt:before{content:""}.fa-mixcloud:before{content:""}.fa-scribd:before{content:""}.fa-pause-circle:before{content:""}.fa-pause-circle-o:before{content:""}.fa-stop-circle:before{content:""}.fa-stop-circle-o:before{content:""}.fa-shopping-bag:before{content:""}.fa-shopping-basket:before{content:""}.fa-hashtag:before{content:""}.fa-bluetooth:before{content:""}.fa-bluetooth-b:before{content:""}.fa-percent:before{content:""}.fa-gitlab:before,.icon-gitlab:before{content:""}.fa-wpbeginner:before{content:""}.fa-wpforms:before{content:""}.fa-envira:before{content:""}.fa-universal-access:before{content:""}.fa-wheelchair-alt:before{content:""}.fa-question-circle-o:before{content:""}.fa-blind:before{content:""}.fa-audio-description:before{content:""}.fa-volume-control-phone:before{content:""}.fa-braille:before{content:""}.fa-assistive-listening-systems:before{content:""}.fa-asl-interpreting:before,.fa-american-sign-language-interpreting:before{content:""}.fa-deafness:before,.fa-hard-of-hearing:before,.fa-deaf:before{content:""}.fa-glide:before{content:""}.fa-glide-g:before{content:""}.fa-signing:before,.fa-sign-language:before{content:""}.fa-low-vision:before{content:""}.fa-viadeo:before{content:""}.fa-viadeo-square:before{content:""}.fa-snapchat:before{content:""}.fa-snapchat-ghost:before{content:""}.fa-snapchat-square:before{content:""}.fa-pied-piper:before{content:""}.fa-first-order:before{content:""}.fa-yoast:before{content:""}.fa-themeisle:before{content:""}.fa-google-plus-circle:before,.fa-google-plus-official:before{content:""}.fa-fa:before,.fa-font-awesome:before{content:""}.fa-handshake-o:before{content:""}.fa-envelope-open:before{content:""}.fa-envelope-open-o:before{content:""}.fa-linode:before{content:""}.fa-address-book:before{content:""}.fa-address-book-o:before{content:""}.fa-vcard:before,.fa-address-card:before{content:""}.fa-vcard-o:before,.fa-address-card-o:before{content:""}.fa-user-circle:before{content:""}.fa-user-circle-o:before{content:""}.fa-user-o:before{content:""}.fa-id-badge:before{content:""}.fa-drivers-license:before,.fa-id-card:before{content:""}.fa-drivers-license-o:before,.fa-id-card-o:before{content:""}.fa-quora:before{content:""}.fa-free-code-camp:before{content:""}.fa-telegram:before{content:""}.fa-thermometer-4:before,.fa-thermometer:before,.fa-thermometer-full:before{content:""}.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:""}.fa-thermometer-2:before,.fa-thermometer-half:before{content:""}.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:""}.fa-thermometer-0:before,.fa-thermometer-empty:before{content:""}.fa-shower:before{content:""}.fa-bathtub:before,.fa-s15:before,.fa-bath:before{content:""}.fa-podcast:before{content:""}.fa-window-maximize:before{content:""}.fa-window-minimize:before{content:""}.fa-window-restore:before{content:""}.fa-times-rectangle:before,.fa-window-close:before{content:""}.fa-times-rectangle-o:before,.fa-window-close-o:before{content:""}.fa-bandcamp:before{content:""}.fa-grav:before{content:""}.fa-etsy:before{content:""}.fa-imdb:before{content:""}.fa-ravelry:before{content:""}.fa-eercast:before{content:""}.fa-microchip:before{content:""}.fa-snowflake-o:before{content:""}.fa-superpowers:before{content:""}.fa-wpexplorer:before{content:""}.fa-meetup:before{content:""}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0, 0, 0, 0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}.fa,.wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,.rst-content .admonition-title,.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink,.rst-content tt.download span:first-child,.rst-content code.download span:first-child,.icon,.wy-dropdown .caret,.wy-inline-validate.wy-inline-validate-success .wy-input-context,.wy-inline-validate.wy-inline-validate-danger .wy-input-context,.wy-inline-validate.wy-inline-validate-warning .wy-input-context,.wy-inline-validate.wy-inline-validate-info .wy-input-context{font-family:inherit}.fa:before,.wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li.on a span.toctree-expand:before,.wy-menu-vertical li.current>a span.toctree-expand:before,.rst-content .admonition-title:before,.rst-content h1 .headerlink:before,.rst-content h2 .headerlink:before,.rst-content h3 .headerlink:before,.rst-content h4 .headerlink:before,.rst-content h5 .headerlink:before,.rst-content h6 .headerlink:before,.rst-content dl dt .headerlink:before,.rst-content p.caption .headerlink:before,.rst-content table>caption .headerlink:before,.rst-content .code-block-caption .headerlink:before,.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before,.icon:before,.wy-dropdown .caret:before,.wy-inline-validate.wy-inline-validate-success .wy-input-context:before,.wy-inline-validate.wy-inline-validate-danger .wy-input-context:before,.wy-inline-validate.wy-inline-validate-warning .wy-input-context:before,.wy-inline-validate.wy-inline-validate-info .wy-input-context:before{font-family:"FontAwesome";display:inline-block;font-style:normal;font-weight:normal;line-height:1;text-decoration:inherit}a .fa,a .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li a span.toctree-expand,.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand,a .rst-content .admonition-title,.rst-content a .admonition-title,a .rst-content h1 .headerlink,.rst-content h1 a .headerlink,a .rst-content h2 .headerlink,.rst-content h2 a .headerlink,a .rst-content h3 .headerlink,.rst-content h3 a .headerlink,a .rst-content h4 .headerlink,.rst-content h4 a .headerlink,a .rst-content h5 .headerlink,.rst-content h5 a .headerlink,a .rst-content h6 .headerlink,.rst-content h6 a .headerlink,a .rst-content dl dt .headerlink,.rst-content dl dt a .headerlink,a .rst-content p.caption .headerlink,.rst-content p.caption a .headerlink,a .rst-content table>caption .headerlink,.rst-content table>caption a .headerlink,a .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption a .headerlink,a .rst-content tt.download span:first-child,.rst-content tt.download a span:first-child,a .rst-content code.download span:first-child,.rst-content code.download a span:first-child,a .icon{display:inline-block;text-decoration:inherit}.btn .fa,.btn .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .btn span.toctree-expand,.btn .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .btn span.toctree-expand,.btn .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .btn span.toctree-expand,.btn .rst-content .admonition-title,.rst-content .btn .admonition-title,.btn .rst-content h1 .headerlink,.rst-content h1 .btn .headerlink,.btn .rst-content h2 .headerlink,.rst-content h2 .btn .headerlink,.btn .rst-content h3 .headerlink,.rst-content h3 .btn .headerlink,.btn .rst-content h4 .headerlink,.rst-content h4 .btn .headerlink,.btn .rst-content h5 .headerlink,.rst-content h5 .btn .headerlink,.btn .rst-content h6 .headerlink,.rst-content h6 .btn .headerlink,.btn .rst-content dl dt .headerlink,.rst-content dl dt .btn .headerlink,.btn .rst-content p.caption .headerlink,.rst-content p.caption .btn .headerlink,.btn .rst-content table>caption .headerlink,.rst-content table>caption .btn .headerlink,.btn .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .btn .headerlink,.btn .rst-content tt.download span:first-child,.rst-content tt.download .btn span:first-child,.btn .rst-content code.download span:first-child,.rst-content code.download .btn span:first-child,.btn .icon,.nav .fa,.nav .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .nav span.toctree-expand,.nav .wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.on a .nav span.toctree-expand,.nav .wy-menu-vertical li.current>a span.toctree-expand,.wy-menu-vertical li.current>a .nav span.toctree-expand,.nav .rst-content .admonition-title,.rst-content .nav .admonition-title,.nav .rst-content h1 .headerlink,.rst-content h1 .nav .headerlink,.nav .rst-content h2 .headerlink,.rst-content h2 .nav .headerlink,.nav .rst-content h3 .headerlink,.rst-content h3 .nav .headerlink,.nav .rst-content h4 .headerlink,.rst-content h4 .nav .headerlink,.nav .rst-content h5 .headerlink,.rst-content h5 .nav .headerlink,.nav .rst-content h6 .headerlink,.rst-content h6 .nav .headerlink,.nav .rst-content dl dt .headerlink,.rst-content dl dt .nav .headerlink,.nav .rst-content p.caption .headerlink,.rst-content p.caption .nav .headerlink,.nav .rst-content table>caption .headerlink,.rst-content table>caption .nav .headerlink,.nav .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .nav .headerlink,.nav .rst-content tt.download span:first-child,.rst-content tt.download .nav span:first-child,.nav .rst-content code.download span:first-child,.rst-content code.download .nav span:first-child,.nav .icon{display:inline}.btn .fa.fa-large,.btn .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .btn span.fa-large.toctree-expand,.btn .rst-content .fa-large.admonition-title,.rst-content .btn .fa-large.admonition-title,.btn .rst-content h1 .fa-large.headerlink,.rst-content h1 .btn .fa-large.headerlink,.btn .rst-content h2 .fa-large.headerlink,.rst-content h2 .btn .fa-large.headerlink,.btn .rst-content h3 .fa-large.headerlink,.rst-content h3 .btn .fa-large.headerlink,.btn .rst-content h4 .fa-large.headerlink,.rst-content h4 .btn .fa-large.headerlink,.btn .rst-content h5 .fa-large.headerlink,.rst-content h5 .btn .fa-large.headerlink,.btn .rst-content h6 .fa-large.headerlink,.rst-content h6 .btn .fa-large.headerlink,.btn .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .btn .fa-large.headerlink,.btn .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .btn .fa-large.headerlink,.btn .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .btn .fa-large.headerlink,.btn .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .btn .fa-large.headerlink,.btn .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .btn span.fa-large:first-child,.btn .rst-content code.download span.fa-large:first-child,.rst-content code.download .btn span.fa-large:first-child,.btn .fa-large.icon,.nav .fa.fa-large,.nav .wy-menu-vertical li span.fa-large.toctree-expand,.wy-menu-vertical li .nav span.fa-large.toctree-expand,.nav .rst-content .fa-large.admonition-title,.rst-content .nav .fa-large.admonition-title,.nav .rst-content h1 .fa-large.headerlink,.rst-content h1 .nav .fa-large.headerlink,.nav .rst-content h2 .fa-large.headerlink,.rst-content h2 .nav .fa-large.headerlink,.nav .rst-content h3 .fa-large.headerlink,.rst-content h3 .nav .fa-large.headerlink,.nav .rst-content h4 .fa-large.headerlink,.rst-content h4 .nav .fa-large.headerlink,.nav .rst-content h5 .fa-large.headerlink,.rst-content h5 .nav .fa-large.headerlink,.nav .rst-content h6 .fa-large.headerlink,.rst-content h6 .nav .fa-large.headerlink,.nav .rst-content dl dt .fa-large.headerlink,.rst-content dl dt .nav .fa-large.headerlink,.nav .rst-content p.caption .fa-large.headerlink,.rst-content p.caption .nav .fa-large.headerlink,.nav .rst-content table>caption .fa-large.headerlink,.rst-content table>caption .nav .fa-large.headerlink,.nav .rst-content .code-block-caption .fa-large.headerlink,.rst-content .code-block-caption .nav .fa-large.headerlink,.nav .rst-content tt.download span.fa-large:first-child,.rst-content tt.download .nav span.fa-large:first-child,.nav .rst-content code.download span.fa-large:first-child,.rst-content code.download .nav span.fa-large:first-child,.nav .fa-large.icon{line-height:.9em}.btn .fa.fa-spin,.btn .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .btn span.fa-spin.toctree-expand,.btn .rst-content .fa-spin.admonition-title,.rst-content .btn .fa-spin.admonition-title,.btn .rst-content h1 .fa-spin.headerlink,.rst-content h1 .btn .fa-spin.headerlink,.btn .rst-content h2 .fa-spin.headerlink,.rst-content h2 .btn .fa-spin.headerlink,.btn .rst-content h3 .fa-spin.headerlink,.rst-content h3 .btn .fa-spin.headerlink,.btn .rst-content h4 .fa-spin.headerlink,.rst-content h4 .btn .fa-spin.headerlink,.btn .rst-content h5 .fa-spin.headerlink,.rst-content h5 .btn .fa-spin.headerlink,.btn .rst-content h6 .fa-spin.headerlink,.rst-content h6 .btn .fa-spin.headerlink,.btn .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .btn .fa-spin.headerlink,.btn .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .btn .fa-spin.headerlink,.btn .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .btn .fa-spin.headerlink,.btn .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .btn .fa-spin.headerlink,.btn .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .btn span.fa-spin:first-child,.btn .rst-content code.download span.fa-spin:first-child,.rst-content code.download .btn span.fa-spin:first-child,.btn .fa-spin.icon,.nav .fa.fa-spin,.nav .wy-menu-vertical li span.fa-spin.toctree-expand,.wy-menu-vertical li .nav span.fa-spin.toctree-expand,.nav .rst-content .fa-spin.admonition-title,.rst-content .nav .fa-spin.admonition-title,.nav .rst-content h1 .fa-spin.headerlink,.rst-content h1 .nav .fa-spin.headerlink,.nav .rst-content h2 .fa-spin.headerlink,.rst-content h2 .nav .fa-spin.headerlink,.nav .rst-content h3 .fa-spin.headerlink,.rst-content h3 .nav .fa-spin.headerlink,.nav .rst-content h4 .fa-spin.headerlink,.rst-content h4 .nav .fa-spin.headerlink,.nav .rst-content h5 .fa-spin.headerlink,.rst-content h5 .nav .fa-spin.headerlink,.nav .rst-content h6 .fa-spin.headerlink,.rst-content h6 .nav .fa-spin.headerlink,.nav .rst-content dl dt .fa-spin.headerlink,.rst-content dl dt .nav .fa-spin.headerlink,.nav .rst-content p.caption .fa-spin.headerlink,.rst-content p.caption .nav .fa-spin.headerlink,.nav .rst-content table>caption .fa-spin.headerlink,.rst-content table>caption .nav .fa-spin.headerlink,.nav .rst-content .code-block-caption .fa-spin.headerlink,.rst-content .code-block-caption .nav .fa-spin.headerlink,.nav .rst-content tt.download span.fa-spin:first-child,.rst-content tt.download .nav span.fa-spin:first-child,.nav .rst-content code.download span.fa-spin:first-child,.rst-content code.download .nav span.fa-spin:first-child,.nav .fa-spin.icon{display:inline-block}.btn.fa:before,.wy-menu-vertical li span.btn.toctree-expand:before,.rst-content .btn.admonition-title:before,.rst-content h1 .btn.headerlink:before,.rst-content h2 .btn.headerlink:before,.rst-content h3 .btn.headerlink:before,.rst-content h4 .btn.headerlink:before,.rst-content h5 .btn.headerlink:before,.rst-content h6 .btn.headerlink:before,.rst-content dl dt .btn.headerlink:before,.rst-content p.caption .btn.headerlink:before,.rst-content table>caption .btn.headerlink:before,.rst-content .code-block-caption .btn.headerlink:before,.rst-content tt.download span.btn:first-child:before,.rst-content code.download span.btn:first-child:before,.btn.icon:before{opacity:.5;-webkit-transition:opacity .05s ease-in;-moz-transition:opacity .05s ease-in;transition:opacity .05s ease-in}.btn.fa:hover:before,.wy-menu-vertical li span.btn.toctree-expand:hover:before,.rst-content .btn.admonition-title:hover:before,.rst-content h1 .btn.headerlink:hover:before,.rst-content h2 .btn.headerlink:hover:before,.rst-content h3 .btn.headerlink:hover:before,.rst-content h4 .btn.headerlink:hover:before,.rst-content h5 .btn.headerlink:hover:before,.rst-content h6 .btn.headerlink:hover:before,.rst-content dl dt .btn.headerlink:hover:before,.rst-content p.caption .btn.headerlink:hover:before,.rst-content table>caption .btn.headerlink:hover:before,.rst-content .code-block-caption .btn.headerlink:hover:before,.rst-content tt.download span.btn:first-child:hover:before,.rst-content code.download span.btn:first-child:hover:before,.btn.icon:hover:before{opacity:1}.btn-mini .fa:before,.btn-mini .wy-menu-vertical li span.toctree-expand:before,.wy-menu-vertical li .btn-mini span.toctree-expand:before,.btn-mini .rst-content .admonition-title:before,.rst-content .btn-mini .admonition-title:before,.btn-mini .rst-content h1 .headerlink:before,.rst-content h1 .btn-mini .headerlink:before,.btn-mini .rst-content h2 .headerlink:before,.rst-content h2 .btn-mini .headerlink:before,.btn-mini .rst-content h3 .headerlink:before,.rst-content h3 .btn-mini .headerlink:before,.btn-mini .rst-content h4 .headerlink:before,.rst-content h4 .btn-mini .headerlink:before,.btn-mini .rst-content h5 .headerlink:before,.rst-content h5 .btn-mini .headerlink:before,.btn-mini .rst-content h6 .headerlink:before,.rst-content h6 .btn-mini .headerlink:before,.btn-mini .rst-content dl dt .headerlink:before,.rst-content dl dt .btn-mini .headerlink:before,.btn-mini .rst-content p.caption .headerlink:before,.rst-content p.caption .btn-mini .headerlink:before,.btn-mini .rst-content table>caption .headerlink:before,.rst-content table>caption .btn-mini .headerlink:before,.btn-mini .rst-content .code-block-caption .headerlink:before,.rst-content .code-block-caption .btn-mini .headerlink:before,.btn-mini .rst-content tt.download span:first-child:before,.rst-content tt.download .btn-mini span:first-child:before,.btn-mini .rst-content code.download span:first-child:before,.rst-content code.download .btn-mini span:first-child:before,.btn-mini .icon:before{font-size:14px;vertical-align:-15%}.wy-alert,.rst-content .note,.rst-content .attention,.rst-content .caution,.rst-content .danger,.rst-content .error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .warning,.rst-content .seealso,.rst-content .admonition-todo,.rst-content .admonition{padding:12px;line-height:24px;margin-bottom:24px;background:#e7f2fa}.wy-alert-title,.rst-content .admonition-title{color:#fff;font-weight:bold;display:block;color:#fff;background:#6ab0de;margin:-12px;padding:6px 12px;margin-bottom:12px}.wy-alert.wy-alert-danger,.rst-content .wy-alert-danger.note,.rst-content .wy-alert-danger.attention,.rst-content .wy-alert-danger.caution,.rst-content .danger,.rst-content .error,.rst-content .wy-alert-danger.hint,.rst-content .wy-alert-danger.important,.rst-content .wy-alert-danger.tip,.rst-content .wy-alert-danger.warning,.rst-content .wy-alert-danger.seealso,.rst-content .wy-alert-danger.admonition-todo,.rst-content .wy-alert-danger.admonition{background:#fdf3f2}.wy-alert.wy-alert-danger .wy-alert-title,.rst-content .wy-alert-danger.note .wy-alert-title,.rst-content .wy-alert-danger.attention .wy-alert-title,.rst-content .wy-alert-danger.caution .wy-alert-title,.rst-content .danger .wy-alert-title,.rst-content .error .wy-alert-title,.rst-content .wy-alert-danger.hint .wy-alert-title,.rst-content .wy-alert-danger.important .wy-alert-title,.rst-content .wy-alert-danger.tip .wy-alert-title,.rst-content .wy-alert-danger.warning .wy-alert-title,.rst-content .wy-alert-danger.seealso .wy-alert-title,.rst-content .wy-alert-danger.admonition-todo .wy-alert-title,.rst-content .wy-alert-danger.admonition .wy-alert-title,.wy-alert.wy-alert-danger .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-danger .admonition-title,.rst-content .wy-alert-danger.note .admonition-title,.rst-content .wy-alert-danger.attention .admonition-title,.rst-content .wy-alert-danger.caution .admonition-title,.rst-content .danger .admonition-title,.rst-content .error .admonition-title,.rst-content .wy-alert-danger.hint .admonition-title,.rst-content .wy-alert-danger.important .admonition-title,.rst-content .wy-alert-danger.tip .admonition-title,.rst-content .wy-alert-danger.warning .admonition-title,.rst-content .wy-alert-danger.seealso .admonition-title,.rst-content .wy-alert-danger.admonition-todo .admonition-title,.rst-content .wy-alert-danger.admonition .admonition-title{background:#f29f97}.wy-alert.wy-alert-warning,.rst-content .wy-alert-warning.note,.rst-content .attention,.rst-content .caution,.rst-content .wy-alert-warning.danger,.rst-content .wy-alert-warning.error,.rst-content .wy-alert-warning.hint,.rst-content .wy-alert-warning.important,.rst-content .wy-alert-warning.tip,.rst-content .warning,.rst-content .wy-alert-warning.seealso,.rst-content .admonition-todo,.rst-content .wy-alert-warning.admonition{background:#ffedcc}.wy-alert.wy-alert-warning .wy-alert-title,.rst-content .wy-alert-warning.note .wy-alert-title,.rst-content .attention .wy-alert-title,.rst-content .caution .wy-alert-title,.rst-content .wy-alert-warning.danger .wy-alert-title,.rst-content .wy-alert-warning.error .wy-alert-title,.rst-content .wy-alert-warning.hint .wy-alert-title,.rst-content .wy-alert-warning.important .wy-alert-title,.rst-content .wy-alert-warning.tip .wy-alert-title,.rst-content .warning .wy-alert-title,.rst-content .wy-alert-warning.seealso .wy-alert-title,.rst-content .admonition-todo .wy-alert-title,.rst-content .wy-alert-warning.admonition .wy-alert-title,.wy-alert.wy-alert-warning .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-warning .admonition-title,.rst-content .wy-alert-warning.note .admonition-title,.rst-content .attention .admonition-title,.rst-content .caution .admonition-title,.rst-content .wy-alert-warning.danger .admonition-title,.rst-content .wy-alert-warning.error .admonition-title,.rst-content .wy-alert-warning.hint .admonition-title,.rst-content .wy-alert-warning.important .admonition-title,.rst-content .wy-alert-warning.tip .admonition-title,.rst-content .warning .admonition-title,.rst-content .wy-alert-warning.seealso .admonition-title,.rst-content .admonition-todo .admonition-title,.rst-content .wy-alert-warning.admonition .admonition-title{background:#f0b37e}.wy-alert.wy-alert-info,.rst-content .note,.rst-content .wy-alert-info.attention,.rst-content .wy-alert-info.caution,.rst-content .wy-alert-info.danger,.rst-content .wy-alert-info.error,.rst-content .wy-alert-info.hint,.rst-content .wy-alert-info.important,.rst-content .wy-alert-info.tip,.rst-content .wy-alert-info.warning,.rst-content .seealso,.rst-content .wy-alert-info.admonition-todo,.rst-content .wy-alert-info.admonition{background:#e7f2fa}.wy-alert.wy-alert-info .wy-alert-title,.rst-content .note .wy-alert-title,.rst-content .wy-alert-info.attention .wy-alert-title,.rst-content .wy-alert-info.caution .wy-alert-title,.rst-content .wy-alert-info.danger .wy-alert-title,.rst-content .wy-alert-info.error .wy-alert-title,.rst-content .wy-alert-info.hint .wy-alert-title,.rst-content .wy-alert-info.important .wy-alert-title,.rst-content .wy-alert-info.tip .wy-alert-title,.rst-content .wy-alert-info.warning .wy-alert-title,.rst-content .seealso .wy-alert-title,.rst-content .wy-alert-info.admonition-todo .wy-alert-title,.rst-content .wy-alert-info.admonition .wy-alert-title,.wy-alert.wy-alert-info .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-info .admonition-title,.rst-content .note .admonition-title,.rst-content .wy-alert-info.attention .admonition-title,.rst-content .wy-alert-info.caution .admonition-title,.rst-content .wy-alert-info.danger .admonition-title,.rst-content .wy-alert-info.error .admonition-title,.rst-content .wy-alert-info.hint .admonition-title,.rst-content .wy-alert-info.important .admonition-title,.rst-content .wy-alert-info.tip .admonition-title,.rst-content .wy-alert-info.warning .admonition-title,.rst-content .seealso .admonition-title,.rst-content .wy-alert-info.admonition-todo .admonition-title,.rst-content .wy-alert-info.admonition .admonition-title{background:#6ab0de}.wy-alert.wy-alert-success,.rst-content .wy-alert-success.note,.rst-content .wy-alert-success.attention,.rst-content .wy-alert-success.caution,.rst-content .wy-alert-success.danger,.rst-content .wy-alert-success.error,.rst-content .hint,.rst-content .important,.rst-content .tip,.rst-content .wy-alert-success.warning,.rst-content .wy-alert-success.seealso,.rst-content .wy-alert-success.admonition-todo,.rst-content .wy-alert-success.admonition{background:#dbfaf4}.wy-alert.wy-alert-success .wy-alert-title,.rst-content .wy-alert-success.note .wy-alert-title,.rst-content .wy-alert-success.attention .wy-alert-title,.rst-content .wy-alert-success.caution .wy-alert-title,.rst-content .wy-alert-success.danger .wy-alert-title,.rst-content .wy-alert-success.error .wy-alert-title,.rst-content .hint .wy-alert-title,.rst-content .important .wy-alert-title,.rst-content .tip .wy-alert-title,.rst-content .wy-alert-success.warning .wy-alert-title,.rst-content .wy-alert-success.seealso .wy-alert-title,.rst-content .wy-alert-success.admonition-todo .wy-alert-title,.rst-content .wy-alert-success.admonition .wy-alert-title,.wy-alert.wy-alert-success .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-success .admonition-title,.rst-content .wy-alert-success.note .admonition-title,.rst-content .wy-alert-success.attention .admonition-title,.rst-content .wy-alert-success.caution .admonition-title,.rst-content .wy-alert-success.danger .admonition-title,.rst-content .wy-alert-success.error .admonition-title,.rst-content .hint .admonition-title,.rst-content .important .admonition-title,.rst-content .tip .admonition-title,.rst-content .wy-alert-success.warning .admonition-title,.rst-content .wy-alert-success.seealso .admonition-title,.rst-content .wy-alert-success.admonition-todo .admonition-title,.rst-content .wy-alert-success.admonition .admonition-title{background:#1abc9c}.wy-alert.wy-alert-neutral,.rst-content .wy-alert-neutral.note,.rst-content .wy-alert-neutral.attention,.rst-content .wy-alert-neutral.caution,.rst-content .wy-alert-neutral.danger,.rst-content .wy-alert-neutral.error,.rst-content .wy-alert-neutral.hint,.rst-content .wy-alert-neutral.important,.rst-content .wy-alert-neutral.tip,.rst-content .wy-alert-neutral.warning,.rst-content .wy-alert-neutral.seealso,.rst-content .wy-alert-neutral.admonition-todo,.rst-content .wy-alert-neutral.admonition{background:#f3f6f6}.wy-alert.wy-alert-neutral .wy-alert-title,.rst-content .wy-alert-neutral.note .wy-alert-title,.rst-content .wy-alert-neutral.attention .wy-alert-title,.rst-content .wy-alert-neutral.caution .wy-alert-title,.rst-content .wy-alert-neutral.danger .wy-alert-title,.rst-content .wy-alert-neutral.error .wy-alert-title,.rst-content .wy-alert-neutral.hint .wy-alert-title,.rst-content .wy-alert-neutral.important .wy-alert-title,.rst-content .wy-alert-neutral.tip .wy-alert-title,.rst-content .wy-alert-neutral.warning .wy-alert-title,.rst-content .wy-alert-neutral.seealso .wy-alert-title,.rst-content .wy-alert-neutral.admonition-todo .wy-alert-title,.rst-content .wy-alert-neutral.admonition .wy-alert-title,.wy-alert.wy-alert-neutral .rst-content .admonition-title,.rst-content .wy-alert.wy-alert-neutral .admonition-title,.rst-content .wy-alert-neutral.note .admonition-title,.rst-content .wy-alert-neutral.attention .admonition-title,.rst-content .wy-alert-neutral.caution .admonition-title,.rst-content .wy-alert-neutral.danger .admonition-title,.rst-content .wy-alert-neutral.error .admonition-title,.rst-content .wy-alert-neutral.hint .admonition-title,.rst-content .wy-alert-neutral.important .admonition-title,.rst-content .wy-alert-neutral.tip .admonition-title,.rst-content .wy-alert-neutral.warning .admonition-title,.rst-content .wy-alert-neutral.seealso .admonition-title,.rst-content .wy-alert-neutral.admonition-todo .admonition-title,.rst-content .wy-alert-neutral.admonition .admonition-title{color:#404040;background:#e1e4e5}.wy-alert.wy-alert-neutral a,.rst-content .wy-alert-neutral.note a,.rst-content .wy-alert-neutral.attention a,.rst-content .wy-alert-neutral.caution a,.rst-content .wy-alert-neutral.danger a,.rst-content .wy-alert-neutral.error a,.rst-content .wy-alert-neutral.hint a,.rst-content .wy-alert-neutral.important a,.rst-content .wy-alert-neutral.tip a,.rst-content .wy-alert-neutral.warning a,.rst-content .wy-alert-neutral.seealso a,.rst-content .wy-alert-neutral.admonition-todo a,.rst-content .wy-alert-neutral.admonition a{color:#2980B9}.wy-alert p:last-child,.rst-content .note p:last-child,.rst-content .attention p:last-child,.rst-content .caution p:last-child,.rst-content .danger p:last-child,.rst-content .error p:last-child,.rst-content .hint p:last-child,.rst-content .important p:last-child,.rst-content .tip p:last-child,.rst-content .warning p:last-child,.rst-content .seealso p:last-child,.rst-content .admonition-todo p:last-child,.rst-content .admonition p:last-child{margin-bottom:0}.wy-tray-container{position:fixed;bottom:0px;left:0;z-index:600}.wy-tray-container li{display:block;width:300px;background:transparent;color:#fff;text-align:center;box-shadow:0 5px 5px 0 rgba(0,0,0,0.1);padding:0 24px;min-width:20%;opacity:0;height:0;line-height:56px;overflow:hidden;-webkit-transition:all .3s ease-in;-moz-transition:all .3s ease-in;transition:all .3s ease-in}.wy-tray-container li.wy-tray-item-success{background:#27AE60}.wy-tray-container li.wy-tray-item-info{background:#2980B9}.wy-tray-container li.wy-tray-item-warning{background:#E67E22}.wy-tray-container li.wy-tray-item-danger{background:#E74C3C}.wy-tray-container li.on{opacity:1;height:56px}@media screen and (max-width: 768px){.wy-tray-container{bottom:auto;top:0;width:100%}.wy-tray-container li{width:100%}}button{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle;cursor:pointer;line-height:normal;-webkit-appearance:button;*overflow:visible}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}button[disabled]{cursor:default}.btn{display:inline-block;border-radius:2px;line-height:normal;white-space:nowrap;text-align:center;cursor:pointer;font-size:100%;padding:6px 12px 8px 12px;color:#fff;border:1px solid rgba(0,0,0,0.1);background-color:#27AE60;text-decoration:none;font-weight:normal;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:0px 1px 2px -1px rgba(255,255,255,0.5) inset,0px -2px 0px 0px rgba(0,0,0,0.1) inset;outline-none:false;vertical-align:middle;*display:inline;zoom:1;-webkit-user-drag:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;-webkit-transition:all .1s linear;-moz-transition:all .1s linear;transition:all .1s linear}.btn-hover{background:#2e8ece;color:#fff}.btn:hover{background:#2cc36b;color:#fff}.btn:focus{background:#2cc36b;outline:0}.btn:active{box-shadow:0px -1px 0px 0px rgba(0,0,0,0.05) inset,0px 2px 0px 0px rgba(0,0,0,0.1) inset;padding:8px 12px 6px 12px}.btn:visited{color:#fff}.btn:disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn-disabled:hover,.btn-disabled:focus,.btn-disabled:active{background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);filter:alpha(opacity=40);opacity:.4;cursor:not-allowed;box-shadow:none}.btn::-moz-focus-inner{padding:0;border:0}.btn-small{font-size:80%}.btn-info{background-color:#2980B9 !important}.btn-info:hover{background-color:#2e8ece !important}.btn-neutral{background-color:#f3f6f6 !important;color:#404040 !important}.btn-neutral:hover{background-color:#e5ebeb !important;color:#404040}.btn-neutral:visited{color:#404040 !important}.btn-success{background-color:#27AE60 !important}.btn-success:hover{background-color:#295 !important}.btn-danger{background-color:#E74C3C !important}.btn-danger:hover{background-color:#ea6153 !important}.btn-warning{background-color:#E67E22 !important}.btn-warning:hover{background-color:#e98b39 !important}.btn-invert{background-color:#222}.btn-invert:hover{background-color:#2f2f2f !important}.btn-link{background-color:transparent !important;color:#2980B9;box-shadow:none;border-color:transparent !important}.btn-link:hover{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:active{background-color:transparent !important;color:#409ad5 !important;box-shadow:none}.btn-link:visited{color:#9B59B6}.wy-btn-group .btn,.wy-control .btn{vertical-align:middle}.wy-btn-group{margin-bottom:24px;*zoom:1}.wy-btn-group:before,.wy-btn-group:after{display:table;content:""}.wy-btn-group:after{clear:both}.wy-dropdown{position:relative;display:inline-block}.wy-dropdown-active .wy-dropdown-menu{display:block}.wy-dropdown-menu{position:absolute;left:0;display:none;float:left;top:100%;min-width:100%;background:#fcfcfc;z-index:100;border:solid 1px #cfd7dd;box-shadow:0 2px 2px 0 rgba(0,0,0,0.1);padding:12px}.wy-dropdown-menu>dd>a{display:block;clear:both;color:#404040;white-space:nowrap;font-size:90%;padding:0 12px;cursor:pointer}.wy-dropdown-menu>dd>a:hover{background:#2980B9;color:#fff}.wy-dropdown-menu>dd.divider{border-top:solid 1px #cfd7dd;margin:6px 0}.wy-dropdown-menu>dd.search{padding-bottom:12px}.wy-dropdown-menu>dd.search input[type="search"]{width:100%}.wy-dropdown-menu>dd.call-to-action{background:#e3e3e3;text-transform:uppercase;font-weight:500;font-size:80%}.wy-dropdown-menu>dd.call-to-action:hover{background:#e3e3e3}.wy-dropdown-menu>dd.call-to-action .btn{color:#fff}.wy-dropdown.wy-dropdown-up .wy-dropdown-menu{bottom:100%;top:auto;left:auto;right:0}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu{background:#fcfcfc;margin-top:2px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a{padding:6px 12px}.wy-dropdown.wy-dropdown-bubble .wy-dropdown-menu a:hover{background:#2980B9;color:#fff}.wy-dropdown.wy-dropdown-left .wy-dropdown-menu{right:0;left:auto;text-align:right}.wy-dropdown-arrow:before{content:" ";border-bottom:5px solid #f5f5f5;border-left:5px solid transparent;border-right:5px solid transparent;position:absolute;display:block;top:-4px;left:50%;margin-left:-3px}.wy-dropdown-arrow.wy-dropdown-arrow-left:before{left:11px}.wy-form-stacked select{display:block}.wy-form-aligned input,.wy-form-aligned textarea,.wy-form-aligned select,.wy-form-aligned .wy-help-inline,.wy-form-aligned label{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-form-aligned .wy-control-group>label{display:inline-block;vertical-align:middle;width:10em;margin:6px 12px 0 0;float:left}.wy-form-aligned .wy-control{float:left}.wy-form-aligned .wy-control label{display:block}.wy-form-aligned .wy-control select{margin-top:6px}fieldset{border:0;margin:0;padding:0}legend{display:block;width:100%;border:0;padding:0;white-space:normal;margin-bottom:24px;font-size:150%;*margin-left:-7px}label{display:block;margin:0 0 .3125em 0;color:#333;font-size:90%}input,select,textarea{font-size:100%;margin:0;vertical-align:baseline;*vertical-align:middle}.wy-control-group{margin-bottom:24px;*zoom:1;max-width:68em;margin-left:auto;margin-right:auto;*zoom:1}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group:before,.wy-control-group:after{display:table;content:""}.wy-control-group:after{clear:both}.wy-control-group.wy-control-group-required>label:after{content:" *";color:#E74C3C}.wy-control-group .wy-form-full,.wy-control-group .wy-form-halves,.wy-control-group .wy-form-thirds{padding-bottom:12px}.wy-control-group .wy-form-full select,.wy-control-group .wy-form-halves select,.wy-control-group .wy-form-thirds select{width:100%}.wy-control-group .wy-form-full input[type="text"],.wy-control-group .wy-form-full input[type="password"],.wy-control-group .wy-form-full input[type="email"],.wy-control-group .wy-form-full input[type="url"],.wy-control-group .wy-form-full input[type="date"],.wy-control-group .wy-form-full input[type="month"],.wy-control-group .wy-form-full input[type="time"],.wy-control-group .wy-form-full input[type="datetime"],.wy-control-group .wy-form-full input[type="datetime-local"],.wy-control-group .wy-form-full input[type="week"],.wy-control-group .wy-form-full input[type="number"],.wy-control-group .wy-form-full input[type="search"],.wy-control-group .wy-form-full input[type="tel"],.wy-control-group .wy-form-full input[type="color"],.wy-control-group .wy-form-halves input[type="text"],.wy-control-group .wy-form-halves input[type="password"],.wy-control-group .wy-form-halves input[type="email"],.wy-control-group .wy-form-halves input[type="url"],.wy-control-group .wy-form-halves input[type="date"],.wy-control-group .wy-form-halves input[type="month"],.wy-control-group .wy-form-halves input[type="time"],.wy-control-group .wy-form-halves input[type="datetime"],.wy-control-group .wy-form-halves input[type="datetime-local"],.wy-control-group .wy-form-halves input[type="week"],.wy-control-group .wy-form-halves input[type="number"],.wy-control-group .wy-form-halves input[type="search"],.wy-control-group .wy-form-halves input[type="tel"],.wy-control-group .wy-form-halves input[type="color"],.wy-control-group .wy-form-thirds input[type="text"],.wy-control-group .wy-form-thirds input[type="password"],.wy-control-group .wy-form-thirds input[type="email"],.wy-control-group .wy-form-thirds input[type="url"],.wy-control-group .wy-form-thirds input[type="date"],.wy-control-group .wy-form-thirds input[type="month"],.wy-control-group .wy-form-thirds input[type="time"],.wy-control-group .wy-form-thirds input[type="datetime"],.wy-control-group .wy-form-thirds input[type="datetime-local"],.wy-control-group .wy-form-thirds input[type="week"],.wy-control-group .wy-form-thirds input[type="number"],.wy-control-group .wy-form-thirds input[type="search"],.wy-control-group .wy-form-thirds input[type="tel"],.wy-control-group .wy-form-thirds input[type="color"]{width:100%}.wy-control-group .wy-form-full{float:left;display:block;margin-right:2.3576515979%;width:100%;margin-right:0}.wy-control-group .wy-form-full:last-child{margin-right:0}.wy-control-group .wy-form-halves{float:left;display:block;margin-right:2.3576515979%;width:48.821174201%}.wy-control-group .wy-form-halves:last-child{margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n){margin-right:0}.wy-control-group .wy-form-halves:nth-of-type(2n+1){clear:left}.wy-control-group .wy-form-thirds{float:left;display:block;margin-right:2.3576515979%;width:31.7615656014%}.wy-control-group .wy-form-thirds:last-child{margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n){margin-right:0}.wy-control-group .wy-form-thirds:nth-of-type(3n+1){clear:left}.wy-control-group.wy-control-group-no-input .wy-control{margin:6px 0 0 0;font-size:90%}.wy-control-no-input{display:inline-block;margin:6px 0 0 0;font-size:90%}.wy-control-group.fluid-input input[type="text"],.wy-control-group.fluid-input input[type="password"],.wy-control-group.fluid-input input[type="email"],.wy-control-group.fluid-input input[type="url"],.wy-control-group.fluid-input input[type="date"],.wy-control-group.fluid-input input[type="month"],.wy-control-group.fluid-input input[type="time"],.wy-control-group.fluid-input input[type="datetime"],.wy-control-group.fluid-input input[type="datetime-local"],.wy-control-group.fluid-input input[type="week"],.wy-control-group.fluid-input input[type="number"],.wy-control-group.fluid-input input[type="search"],.wy-control-group.fluid-input input[type="tel"],.wy-control-group.fluid-input input[type="color"]{width:100%}.wy-form-message-inline{display:inline-block;padding-left:.3em;color:#666;vertical-align:middle;font-size:90%}.wy-form-message{display:block;color:#999;font-size:70%;margin-top:.3125em;font-style:italic}.wy-form-message p{font-size:inherit;font-style:italic;margin-bottom:6px}.wy-form-message p:last-child{margin-bottom:0}input{line-height:normal}input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;*overflow:visible}input[type="text"],input[type="password"],input[type="email"],input[type="url"],input[type="date"],input[type="month"],input[type="time"],input[type="datetime"],input[type="datetime-local"],input[type="week"],input[type="number"],input[type="search"],input[type="tel"],input[type="color"]{-webkit-appearance:none;padding:6px;display:inline-block;border:1px solid #ccc;font-size:80%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;box-shadow:inset 0 1px 3px #ddd;border-radius:0;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}input[type="datetime-local"]{padding:.34375em .625em}input[disabled]{cursor:default}input[type="checkbox"],input[type="radio"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0;margin-right:.3125em;*height:13px;*width:13px}input[type="search"]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type="search"]::-webkit-search-cancel-button,input[type="search"]::-webkit-search-decoration{-webkit-appearance:none}input[type="text"]:focus,input[type="password"]:focus,input[type="email"]:focus,input[type="url"]:focus,input[type="date"]:focus,input[type="month"]:focus,input[type="time"]:focus,input[type="datetime"]:focus,input[type="datetime-local"]:focus,input[type="week"]:focus,input[type="number"]:focus,input[type="search"]:focus,input[type="tel"]:focus,input[type="color"]:focus{outline:0;outline:thin dotted \9;border-color:#333}input.no-focus:focus{border-color:#ccc !important}input[type="file"]:focus,input[type="radio"]:focus,input[type="checkbox"]:focus{outline:thin dotted #333;outline:1px auto #129FEA}input[type="text"][disabled],input[type="password"][disabled],input[type="email"][disabled],input[type="url"][disabled],input[type="date"][disabled],input[type="month"][disabled],input[type="time"][disabled],input[type="datetime"][disabled],input[type="datetime-local"][disabled],input[type="week"][disabled],input[type="number"][disabled],input[type="search"][disabled],input[type="tel"][disabled],input[type="color"][disabled]{cursor:not-allowed;background-color:#fafafa}input:focus:invalid,textarea:focus:invalid,select:focus:invalid{color:#E74C3C;border:1px solid #E74C3C}input:focus:invalid:focus,textarea:focus:invalid:focus,select:focus:invalid:focus{border-color:#E74C3C}input[type="file"]:focus:invalid:focus,input[type="radio"]:focus:invalid:focus,input[type="checkbox"]:focus:invalid:focus{outline-color:#E74C3C}input.wy-input-large{padding:12px;font-size:100%}textarea{overflow:auto;vertical-align:top;width:100%;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif}select,textarea{padding:.5em .625em;display:inline-block;border:1px solid #ccc;font-size:80%;box-shadow:inset 0 1px 3px #ddd;-webkit-transition:border .3s linear;-moz-transition:border .3s linear;transition:border .3s linear}select{border:1px solid #ccc;background-color:#fff}select[multiple]{height:auto}select:focus,textarea:focus{outline:0}select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{cursor:not-allowed;background-color:#fafafa}input[type="radio"][disabled],input[type="checkbox"][disabled]{cursor:not-allowed}.wy-checkbox,.wy-radio{margin:6px 0;color:#404040;display:block}.wy-checkbox input,.wy-radio input{vertical-align:baseline}.wy-form-message-inline{display:inline-block;*display:inline;*zoom:1;vertical-align:middle}.wy-input-prefix,.wy-input-suffix{white-space:nowrap;padding:6px}.wy-input-prefix .wy-input-context,.wy-input-suffix .wy-input-context{line-height:27px;padding:0 8px;display:inline-block;font-size:80%;background-color:#f3f6f6;border:solid 1px #ccc;color:#999}.wy-input-suffix .wy-input-context{border-left:0}.wy-input-prefix .wy-input-context{border-right:0}.wy-switch{position:relative;display:block;height:24px;margin-top:12px;cursor:pointer}.wy-switch:before{position:absolute;content:"";display:block;left:0;top:0;width:36px;height:12px;border-radius:4px;background:#ccc;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch:after{position:absolute;content:"";display:block;width:18px;height:18px;border-radius:4px;background:#999;left:-3px;top:-3px;-webkit-transition:all .2s ease-in-out;-moz-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.wy-switch span{position:absolute;left:48px;display:block;font-size:12px;color:#ccc;line-height:1}.wy-switch.active:before{background:#1e8449}.wy-switch.active:after{left:24px;background:#27AE60}.wy-switch.disabled{cursor:not-allowed;opacity:.8}.wy-control-group.wy-control-group-error .wy-form-message,.wy-control-group.wy-control-group-error>label{color:#E74C3C}.wy-control-group.wy-control-group-error input[type="text"],.wy-control-group.wy-control-group-error input[type="password"],.wy-control-group.wy-control-group-error input[type="email"],.wy-control-group.wy-control-group-error input[type="url"],.wy-control-group.wy-control-group-error input[type="date"],.wy-control-group.wy-control-group-error input[type="month"],.wy-control-group.wy-control-group-error input[type="time"],.wy-control-group.wy-control-group-error input[type="datetime"],.wy-control-group.wy-control-group-error input[type="datetime-local"],.wy-control-group.wy-control-group-error input[type="week"],.wy-control-group.wy-control-group-error input[type="number"],.wy-control-group.wy-control-group-error input[type="search"],.wy-control-group.wy-control-group-error input[type="tel"],.wy-control-group.wy-control-group-error input[type="color"]{border:solid 1px #E74C3C}.wy-control-group.wy-control-group-error textarea{border:solid 1px #E74C3C}.wy-inline-validate{white-space:nowrap}.wy-inline-validate .wy-input-context{padding:.5em .625em;display:inline-block;font-size:80%}.wy-inline-validate.wy-inline-validate-success .wy-input-context{color:#27AE60}.wy-inline-validate.wy-inline-validate-danger .wy-input-context{color:#E74C3C}.wy-inline-validate.wy-inline-validate-warning .wy-input-context{color:#E67E22}.wy-inline-validate.wy-inline-validate-info .wy-input-context{color:#2980B9}.rotate-90{-webkit-transform:rotate(90deg);-moz-transform:rotate(90deg);-ms-transform:rotate(90deg);-o-transform:rotate(90deg);transform:rotate(90deg)}.rotate-180{-webkit-transform:rotate(180deg);-moz-transform:rotate(180deg);-ms-transform:rotate(180deg);-o-transform:rotate(180deg);transform:rotate(180deg)}.rotate-270{-webkit-transform:rotate(270deg);-moz-transform:rotate(270deg);-ms-transform:rotate(270deg);-o-transform:rotate(270deg);transform:rotate(270deg)}.mirror{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1);-o-transform:scaleX(-1);transform:scaleX(-1)}.mirror.rotate-90{-webkit-transform:scaleX(-1) rotate(90deg);-moz-transform:scaleX(-1) rotate(90deg);-ms-transform:scaleX(-1) rotate(90deg);-o-transform:scaleX(-1) rotate(90deg);transform:scaleX(-1) rotate(90deg)}.mirror.rotate-180{-webkit-transform:scaleX(-1) rotate(180deg);-moz-transform:scaleX(-1) rotate(180deg);-ms-transform:scaleX(-1) rotate(180deg);-o-transform:scaleX(-1) rotate(180deg);transform:scaleX(-1) rotate(180deg)}.mirror.rotate-270{-webkit-transform:scaleX(-1) rotate(270deg);-moz-transform:scaleX(-1) rotate(270deg);-ms-transform:scaleX(-1) rotate(270deg);-o-transform:scaleX(-1) rotate(270deg);transform:scaleX(-1) rotate(270deg)}@media only screen and (max-width: 480px){.wy-form button[type="submit"]{margin:.7em 0 0}.wy-form input[type="text"],.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:.3em;display:block}.wy-form label{margin-bottom:.3em;display:block}.wy-form input[type="password"],.wy-form input[type="email"],.wy-form input[type="url"],.wy-form input[type="date"],.wy-form input[type="month"],.wy-form input[type="time"],.wy-form input[type="datetime"],.wy-form input[type="datetime-local"],.wy-form input[type="week"],.wy-form input[type="number"],.wy-form input[type="search"],.wy-form input[type="tel"],.wy-form input[type="color"]{margin-bottom:0}.wy-form-aligned .wy-control-group label{margin-bottom:.3em;text-align:left;display:block;width:100%}.wy-form-aligned .wy-control{margin:1.5em 0 0 0}.wy-form .wy-help-inline,.wy-form-message-inline,.wy-form-message{display:block;font-size:80%;padding:6px 0}}@media screen and (max-width: 768px){.tablet-hide{display:none}}@media screen and (max-width: 480px){.mobile-hide{display:none}}.float-left{float:left}.float-right{float:right}.full-width{width:100%}.wy-table,.rst-content table.docutils,.rst-content table.field-list{border-collapse:collapse;border-spacing:0;empty-cells:show;margin-bottom:24px}.wy-table caption,.rst-content table.docutils caption,.rst-content table.field-list caption{color:#000;font:italic 85%/1 arial,sans-serif;padding:1em 0;text-align:center}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td,.wy-table th,.rst-content table.docutils th,.rst-content table.field-list th{font-size:90%;margin:0;overflow:visible;padding:8px 16px}.wy-table td:first-child,.rst-content table.docutils td:first-child,.rst-content table.field-list td:first-child,.wy-table th:first-child,.rst-content table.docutils th:first-child,.rst-content table.field-list th:first-child{border-left-width:0}.wy-table thead,.rst-content table.docutils thead,.rst-content table.field-list thead{color:#000;text-align:left;vertical-align:bottom;white-space:nowrap}.wy-table thead th,.rst-content table.docutils thead th,.rst-content table.field-list thead th{font-weight:bold;border-bottom:solid 2px #e1e4e5}.wy-table td,.rst-content table.docutils td,.rst-content table.field-list td{background-color:transparent;vertical-align:middle}.wy-table td p,.rst-content table.docutils td p,.rst-content table.field-list td p{line-height:18px}.wy-table td p:last-child,.rst-content table.docutils td p:last-child,.rst-content table.field-list td p:last-child{margin-bottom:0}.wy-table .wy-table-cell-min,.rst-content table.docutils .wy-table-cell-min,.rst-content table.field-list .wy-table-cell-min{width:1%;padding-right:0}.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox],.wy-table .wy-table-cell-min input[type=checkbox],.rst-content table.docutils .wy-table-cell-min input[type=checkbox],.rst-content table.field-list .wy-table-cell-min input[type=checkbox]{margin:0}.wy-table-secondary{color:gray;font-size:90%}.wy-table-tertiary{color:gray;font-size:80%}.wy-table-odd td,.wy-table-striped tr:nth-child(2n-1) td,.rst-content table.docutils:not(.field-list) tr:nth-child(2n-1) td{background-color:#f3f6f6}.wy-table-backed{background-color:#f3f6f6}.wy-table-bordered-all,.rst-content table.docutils{border:1px solid #e1e4e5}.wy-table-bordered-all td,.rst-content table.docutils td{border-bottom:1px solid #e1e4e5;border-left:1px solid #e1e4e5}.wy-table-bordered-all tbody>tr:last-child td,.rst-content table.docutils tbody>tr:last-child td{border-bottom-width:0}.wy-table-bordered{border:1px solid #e1e4e5}.wy-table-bordered-rows td{border-bottom:1px solid #e1e4e5}.wy-table-bordered-rows tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-horizontal td,.wy-table-horizontal th{border-width:0 0 1px 0;border-bottom:1px solid #e1e4e5}.wy-table-horizontal tbody>tr:last-child td{border-bottom-width:0}.wy-table-responsive{margin-bottom:24px;max-width:100%;overflow:auto}.wy-table-responsive table{margin-bottom:0 !important}.wy-table-responsive table td,.wy-table-responsive table th{white-space:nowrap}a{color:#2980B9;text-decoration:none;cursor:pointer}a:hover{color:#3091d1}a:visited{color:#9B59B6}html{height:100%;overflow-x:hidden}body{font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;font-weight:normal;color:#404040;min-height:100%;overflow-x:hidden;background:#edf0f2}.wy-text-left{text-align:left}.wy-text-center{text-align:center}.wy-text-right{text-align:right}.wy-text-large{font-size:120%}.wy-text-normal{font-size:100%}.wy-text-small,small{font-size:80%}.wy-text-strike{text-decoration:line-through}.wy-text-warning{color:#E67E22 !important}a.wy-text-warning:hover{color:#eb9950 !important}.wy-text-info{color:#2980B9 !important}a.wy-text-info:hover{color:#409ad5 !important}.wy-text-success{color:#27AE60 !important}a.wy-text-success:hover{color:#36d278 !important}.wy-text-danger{color:#E74C3C !important}a.wy-text-danger:hover{color:#ed7669 !important}.wy-text-neutral{color:#404040 !important}a.wy-text-neutral:hover{color:#595959 !important}h1,h2,.rst-content .toctree-wrapper p.caption,h3,h4,h5,h6,legend{margin-top:0;font-weight:700;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif}p{line-height:24px;margin:0;font-size:16px;margin-bottom:24px}h1{font-size:175%}h2,.rst-content .toctree-wrapper p.caption{font-size:150%}h3{font-size:125%}h4{font-size:115%}h5{font-size:110%}h6{font-size:100%}hr{display:block;height:1px;border:0;border-top:1px solid #e1e4e5;margin:24px 0;padding:0}code,.rst-content tt,.rst-content code{white-space:nowrap;max-width:100%;background:#fff;border:solid 1px #e1e4e5;font-size:75%;padding:0 5px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;color:#E74C3C;overflow-x:auto}code.code-large,.rst-content tt.code-large{font-size:90%}.wy-plain-list-disc,.rst-content .section ul,.rst-content .toctree-wrapper ul,article ul{list-style:disc;line-height:24px;margin-bottom:24px}.wy-plain-list-disc li,.rst-content .section ul li,.rst-content .toctree-wrapper ul li,article ul li{list-style:disc;margin-left:24px}.wy-plain-list-disc li p:last-child,.rst-content .section ul li p:last-child,.rst-content .toctree-wrapper ul li p:last-child,article ul li p:last-child{margin-bottom:0}.wy-plain-list-disc li ul,.rst-content .section ul li ul,.rst-content .toctree-wrapper ul li ul,article ul li ul{margin-bottom:0}.wy-plain-list-disc li li,.rst-content .section ul li li,.rst-content .toctree-wrapper ul li li,article ul li li{list-style:circle}.wy-plain-list-disc li li li,.rst-content .section ul li li li,.rst-content .toctree-wrapper ul li li li,article ul li li li{list-style:square}.wy-plain-list-disc li ol li,.rst-content .section ul li ol li,.rst-content .toctree-wrapper ul li ol li,article ul li ol li{list-style:decimal}.wy-plain-list-decimal,.rst-content .section ol,.rst-content ol.arabic,article ol{list-style:decimal;line-height:24px;margin-bottom:24px}.wy-plain-list-decimal li,.rst-content .section ol li,.rst-content ol.arabic li,article ol li{list-style:decimal;margin-left:24px}.wy-plain-list-decimal li p:last-child,.rst-content .section ol li p:last-child,.rst-content ol.arabic li p:last-child,article ol li p:last-child{margin-bottom:0}.wy-plain-list-decimal li ul,.rst-content .section ol li ul,.rst-content ol.arabic li ul,article ol li ul{margin-bottom:0}.wy-plain-list-decimal li ul li,.rst-content .section ol li ul li,.rst-content ol.arabic li ul li,article ol li ul li{list-style:disc}.wy-breadcrumbs{*zoom:1}.wy-breadcrumbs:before,.wy-breadcrumbs:after{display:table;content:""}.wy-breadcrumbs:after{clear:both}.wy-breadcrumbs li{display:inline-block}.wy-breadcrumbs li.wy-breadcrumbs-aside{float:right}.wy-breadcrumbs li a{display:inline-block;padding:5px}.wy-breadcrumbs li a:first-child{padding-left:0}.wy-breadcrumbs li code,.wy-breadcrumbs li .rst-content tt,.rst-content .wy-breadcrumbs li tt{padding:5px;border:none;background:none}.wy-breadcrumbs li code.literal,.wy-breadcrumbs li .rst-content tt.literal,.rst-content .wy-breadcrumbs li tt.literal{color:#404040}.wy-breadcrumbs-extra{margin-bottom:0;color:#b3b3b3;font-size:80%;display:inline-block}@media screen and (max-width: 480px){.wy-breadcrumbs-extra{display:none}.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}@media print{.wy-breadcrumbs li.wy-breadcrumbs-aside{display:none}}html{font-size:16px}.wy-affix{position:fixed;top:1.618em}.wy-menu a:hover{text-decoration:none}.wy-menu-horiz{*zoom:1}.wy-menu-horiz:before,.wy-menu-horiz:after{display:table;content:""}.wy-menu-horiz:after{clear:both}.wy-menu-horiz ul,.wy-menu-horiz li{display:inline-block}.wy-menu-horiz li:hover{background:rgba(255,255,255,0.1)}.wy-menu-horiz li.divide-left{border-left:solid 1px #404040}.wy-menu-horiz li.divide-right{border-right:solid 1px #404040}.wy-menu-horiz a{height:32px;display:inline-block;line-height:32px;padding:0 16px}.wy-menu-vertical{width:300px}.wy-menu-vertical header,.wy-menu-vertical p.caption{color:#3a7ca8;height:32px;display:inline-block;line-height:32px;padding:0 1.618em;margin:12px 0 0 0;display:block;font-weight:bold;text-transform:uppercase;font-size:85%;white-space:nowrap}.wy-menu-vertical ul{margin-bottom:0}.wy-menu-vertical li.divide-top{border-top:solid 1px #404040}.wy-menu-vertical li.divide-bottom{border-bottom:solid 1px #404040}.wy-menu-vertical li.current{background:#e3e3e3}.wy-menu-vertical li.current a{color:gray;border-right:solid 1px #c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.current a:hover{background:#d6d6d6}.wy-menu-vertical li code,.wy-menu-vertical li .rst-content tt,.rst-content .wy-menu-vertical li tt{border:none;background:inherit;color:inherit;padding-left:0;padding-right:0}.wy-menu-vertical li span.toctree-expand{display:block;float:left;margin-left:-1.2em;font-size:.8em;line-height:1.6em;color:#4d4d4d}.wy-menu-vertical li.on a,.wy-menu-vertical li.current>a{color:#404040;padding:.4045em 1.618em;font-weight:bold;position:relative;background:#fcfcfc;border:none;padding-left:1.618em -4px}.wy-menu-vertical li.on a:hover,.wy-menu-vertical li.current>a:hover{background:#fcfcfc}.wy-menu-vertical li.on a:hover span.toctree-expand,.wy-menu-vertical li.current>a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.on a span.toctree-expand,.wy-menu-vertical li.current>a span.toctree-expand{display:block;font-size:.8em;line-height:1.6em;color:#333}.wy-menu-vertical li.toctree-l1.current>a{border-bottom:solid 1px #c9c9c9;border-top:solid 1px #c9c9c9}.wy-menu-vertical li.toctree-l2 a,.wy-menu-vertical li.toctree-l3 a,.wy-menu-vertical li.toctree-l4 a{color:#404040}.wy-menu-vertical li.toctree-l1.current li.toctree-l2>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3>ul{display:none}.wy-menu-vertical li.toctree-l1.current li.toctree-l2.current>ul,.wy-menu-vertical li.toctree-l2.current li.toctree-l3.current>ul{display:block}.wy-menu-vertical li.toctree-l2.current>a{background:#c9c9c9;padding:.4045em 2.427em}.wy-menu-vertical li.toctree-l2.current li.toctree-l3>a{display:block;background:#c9c9c9;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l2 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l2 span.toctree-expand{color:#a3a3a3}.wy-menu-vertical li.toctree-l3{font-size:.9em}.wy-menu-vertical li.toctree-l3.current>a{background:#bdbdbd;padding:.4045em 4.045em}.wy-menu-vertical li.toctree-l3.current li.toctree-l4>a{display:block;background:#bdbdbd;padding:.4045em 5.663em}.wy-menu-vertical li.toctree-l3 a:hover span.toctree-expand{color:gray}.wy-menu-vertical li.toctree-l3 span.toctree-expand{color:#969696}.wy-menu-vertical li.toctree-l4{font-size:.9em}.wy-menu-vertical li.current ul{display:block}.wy-menu-vertical li ul{margin-bottom:0;display:none}.wy-menu-vertical li ul li a{margin-bottom:0;color:#d9d9d9;font-weight:normal}.wy-menu-vertical a{display:inline-block;line-height:18px;padding:.4045em 1.618em;display:block;position:relative;font-size:90%;color:#d9d9d9}.wy-menu-vertical a:hover{background-color:#4e4a4a;cursor:pointer}.wy-menu-vertical a:hover span.toctree-expand{color:#d9d9d9}.wy-menu-vertical a:active{background-color:#2980B9;cursor:pointer;color:#fff}.wy-menu-vertical a:active span.toctree-expand{color:#fff}.wy-side-nav-search{display:block;width:300px;padding:.809em;margin-bottom:.809em;z-index:200;background-color:#2980B9;text-align:center;padding:.809em;display:block;color:#fcfcfc;margin-bottom:.809em}.wy-side-nav-search input[type=text]{width:100%;border-radius:50px;padding:6px 12px;border-color:#2472a4}.wy-side-nav-search img{display:block;margin:auto auto .809em auto;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-side-nav-search>a,.wy-side-nav-search .wy-dropdown>a{color:#fcfcfc;font-size:100%;font-weight:bold;display:inline-block;padding:4px 6px;margin-bottom:.809em}.wy-side-nav-search>a:hover,.wy-side-nav-search .wy-dropdown>a:hover{background:rgba(255,255,255,0.1)}.wy-side-nav-search>a img.logo,.wy-side-nav-search .wy-dropdown>a img.logo{display:block;margin:0 auto;height:auto;width:auto;border-radius:0;max-width:100%;background:transparent}.wy-side-nav-search>a.icon img.logo,.wy-side-nav-search .wy-dropdown>a.icon img.logo{margin-top:.85em}.wy-side-nav-search>div.version{margin-top:-.4045em;margin-bottom:.809em;font-weight:normal;color:rgba(255,255,255,0.3)}.wy-nav .wy-menu-vertical header{color:#2980B9}.wy-nav .wy-menu-vertical a{color:#b3b3b3}.wy-nav .wy-menu-vertical a:hover{background-color:#2980B9;color:#fff}[data-menu-wrap]{-webkit-transition:all .2s ease-in;-moz-transition:all .2s ease-in;transition:all .2s ease-in;position:absolute;opacity:1;width:100%;opacity:0}[data-menu-wrap].move-center{left:0;right:auto;opacity:1}[data-menu-wrap].move-left{right:auto;left:-100%;opacity:0}[data-menu-wrap].move-right{right:-100%;left:auto;opacity:0}.wy-body-for-nav{background:#fcfcfc}.wy-grid-for-nav{position:absolute;width:100%;height:100%}.wy-nav-side{position:fixed;top:0;bottom:0;left:0;padding-bottom:2em;width:300px;overflow-x:hidden;overflow-y:hidden;min-height:100%;color:#9b9b9b;background:#343131;z-index:200}.wy-side-scroll{width:320px;position:relative;overflow-x:hidden;overflow-y:scroll;height:100%}.wy-nav-top{display:none;background:#2980B9;color:#fff;padding:.4045em .809em;position:relative;line-height:50px;text-align:center;font-size:100%;*zoom:1}.wy-nav-top:before,.wy-nav-top:after{display:table;content:""}.wy-nav-top:after{clear:both}.wy-nav-top a{color:#fff;font-weight:bold}.wy-nav-top img{margin-right:12px;height:45px;width:45px;background-color:#2980B9;padding:5px;border-radius:100%}.wy-nav-top i{font-size:30px;float:left;cursor:pointer;padding-top:inherit}.wy-nav-content-wrap{margin-left:300px;background:#fcfcfc;min-height:100%}.wy-nav-content{padding:1.618em 3.236em;height:100%;max-width:800px;margin:auto}.wy-body-mask{position:fixed;width:100%;height:100%;background:rgba(0,0,0,0.2);display:none;z-index:499}.wy-body-mask.on{display:block}footer{color:gray}footer p{margin-bottom:12px}footer span.commit code,footer span.commit .rst-content tt,.rst-content footer span.commit tt{padding:0px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:1em;background:none;border:none;color:gray}.rst-footer-buttons{*zoom:1}.rst-footer-buttons:before,.rst-footer-buttons:after{width:100%}.rst-footer-buttons:before,.rst-footer-buttons:after{display:table;content:""}.rst-footer-buttons:after{clear:both}.rst-breadcrumbs-buttons{margin-top:12px;*zoom:1}.rst-breadcrumbs-buttons:before,.rst-breadcrumbs-buttons:after{display:table;content:""}.rst-breadcrumbs-buttons:after{clear:both}#search-results .search li{margin-bottom:24px;border-bottom:solid 1px #e1e4e5;padding-bottom:24px}#search-results .search li:first-child{border-top:solid 1px #e1e4e5;padding-top:24px}#search-results .search li a{font-size:120%;margin-bottom:12px;display:inline-block}#search-results .context{color:gray;font-size:90%}.genindextable li>ul{margin-left:24px}@media screen and (max-width: 768px){.wy-body-for-nav{background:#fcfcfc}.wy-nav-top{display:block}.wy-nav-side{left:-300px}.wy-nav-side.shift{width:85%;left:0}.wy-side-scroll{width:auto}.wy-side-nav-search{width:auto}.wy-menu.wy-menu-vertical{width:auto}.wy-nav-content-wrap{margin-left:0}.wy-nav-content-wrap .wy-nav-content{padding:1.618em}.wy-nav-content-wrap.shift{position:fixed;min-width:100%;left:85%;top:0;height:100%;overflow:hidden}}@media screen and (min-width: 1100px){.wy-nav-content-wrap{background:rgba(0,0,0,0.05)}.wy-nav-content{margin:0;background:#fcfcfc}}@media print{.rst-versions,footer,.wy-nav-side{display:none}.wy-nav-content-wrap{margin-left:0}}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:"Lato","proxima-nova","Helvetica Neue",Arial,sans-serif;z-index:400}.rst-versions a{color:#2980B9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27AE60;*zoom:1}.rst-versions .rst-current-version:before,.rst-versions .rst-current-version:after{display:table;content:""}.rst-versions .rst-current-version:after{clear:both}.rst-versions .rst-current-version .fa,.rst-versions .rst-current-version .wy-menu-vertical li span.toctree-expand,.wy-menu-vertical li .rst-versions .rst-current-version span.toctree-expand,.rst-versions .rst-current-version .rst-content .admonition-title,.rst-content .rst-versions .rst-current-version .admonition-title,.rst-versions .rst-current-version .rst-content h1 .headerlink,.rst-content h1 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h2 .headerlink,.rst-content h2 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h3 .headerlink,.rst-content h3 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h4 .headerlink,.rst-content h4 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h5 .headerlink,.rst-content h5 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content h6 .headerlink,.rst-content h6 .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content dl dt .headerlink,.rst-content dl dt .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content p.caption .headerlink,.rst-content p.caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content table>caption .headerlink,.rst-content table>caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content .code-block-caption .headerlink,.rst-content .code-block-caption .rst-versions .rst-current-version .headerlink,.rst-versions .rst-current-version .rst-content tt.download span:first-child,.rst-content tt.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .rst-content code.download span:first-child,.rst-content code.download .rst-versions .rst-current-version span:first-child,.rst-versions .rst-current-version .icon{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#E74C3C;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#F1C40F;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:gray;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:solid 1px #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge .rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width: 768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}.rst-content img{max-width:100%;height:auto}.rst-content div.figure{margin-bottom:24px}.rst-content div.figure p.caption{font-style:italic}.rst-content div.figure p:last-child.caption{margin-bottom:0px}.rst-content div.figure.align-center{text-align:center}.rst-content .section>img,.rst-content .section>a>img{margin-bottom:24px}.rst-content abbr[title]{text-decoration:none}.rst-content.style-external-links a.reference.external:after{font-family:FontAwesome;content:"";color:#b3b3b3;vertical-align:super;font-size:60%;margin:0 .2em}.rst-content blockquote{margin-left:24px;line-height:24px;margin-bottom:24px}.rst-content pre.literal-block{white-space:pre;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;display:block;overflow:auto}.rst-content pre.literal-block,.rst-content div[class^='highlight']{border:1px solid #e1e4e5;overflow-x:auto;margin:1px 0 24px 0}.rst-content pre.literal-block div[class^='highlight'],.rst-content div[class^='highlight'] div[class^='highlight']{padding:0px;border:none;margin:0}.rst-content div[class^='highlight'] td.code{width:100%}.rst-content .linenodiv pre{border-right:solid 1px #e6e9ea;margin:0;padding:12px 12px;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;user-select:none;pointer-events:none}.rst-content div[class^='highlight'] pre{white-space:pre;margin:0;padding:12px 12px;display:block;overflow:auto}.rst-content div[class^='highlight'] pre .hll{display:block;margin:0 -12px;padding:0 12px}.rst-content pre.literal-block,.rst-content div[class^='highlight'] pre,.rst-content .linenodiv pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;font-size:12px;line-height:1.4}.rst-content .code-block-caption{font-style:italic;font-size:85%;line-height:1;padding:1em 0;text-align:center}@media print{.rst-content .codeblock,.rst-content div[class^='highlight'],.rst-content div[class^='highlight'] pre{white-space:pre-wrap}}.rst-content .note .last,.rst-content .attention .last,.rst-content .caution .last,.rst-content .danger .last,.rst-content .error .last,.rst-content .hint .last,.rst-content .important .last,.rst-content .tip .last,.rst-content .warning .last,.rst-content .seealso .last,.rst-content .admonition-todo .last,.rst-content .admonition .last{margin-bottom:0}.rst-content .admonition-title:before{margin-right:4px}.rst-content .admonition table{border-color:rgba(0,0,0,0.1)}.rst-content .admonition table td,.rst-content .admonition table th{background:transparent !important;border-color:rgba(0,0,0,0.1) !important}.rst-content .section ol.loweralpha,.rst-content .section ol.loweralpha li{list-style:lower-alpha}.rst-content .section ol.upperalpha,.rst-content .section ol.upperalpha li{list-style:upper-alpha}.rst-content .section ol p,.rst-content .section ul p{margin-bottom:12px}.rst-content .section ol p:last-child,.rst-content .section ul p:last-child{margin-bottom:24px}.rst-content .line-block{margin-left:0px;margin-bottom:24px;line-height:24px}.rst-content .line-block .line-block{margin-left:24px;margin-bottom:0px}.rst-content .topic-title{font-weight:bold;margin-bottom:12px}.rst-content .toc-backref{color:#404040}.rst-content .align-right{float:right;margin:0px 0px 24px 24px}.rst-content .align-left{float:left;margin:0px 24px 24px 0px}.rst-content .align-center{margin:auto}.rst-content .align-center:not(table){display:block}.rst-content h1 .headerlink,.rst-content h2 .headerlink,.rst-content .toctree-wrapper p.caption .headerlink,.rst-content h3 .headerlink,.rst-content h4 .headerlink,.rst-content h5 .headerlink,.rst-content h6 .headerlink,.rst-content dl dt .headerlink,.rst-content p.caption .headerlink,.rst-content table>caption .headerlink,.rst-content .code-block-caption .headerlink{visibility:hidden;font-size:14px}.rst-content h1 .headerlink:after,.rst-content h2 .headerlink:after,.rst-content .toctree-wrapper p.caption .headerlink:after,.rst-content h3 .headerlink:after,.rst-content h4 .headerlink:after,.rst-content h5 .headerlink:after,.rst-content h6 .headerlink:after,.rst-content dl dt .headerlink:after,.rst-content p.caption .headerlink:after,.rst-content table>caption .headerlink:after,.rst-content .code-block-caption .headerlink:after{content:"";font-family:FontAwesome}.rst-content h1:hover .headerlink:after,.rst-content h2:hover .headerlink:after,.rst-content .toctree-wrapper p.caption:hover .headerlink:after,.rst-content h3:hover .headerlink:after,.rst-content h4:hover .headerlink:after,.rst-content h5:hover .headerlink:after,.rst-content h6:hover .headerlink:after,.rst-content dl dt:hover .headerlink:after,.rst-content p.caption:hover .headerlink:after,.rst-content table>caption:hover .headerlink:after,.rst-content .code-block-caption:hover .headerlink:after{visibility:visible}.rst-content table>caption .headerlink:after{font-size:12px}.rst-content .centered{text-align:center}.rst-content .sidebar{float:right;width:40%;display:block;margin:0 0 24px 24px;padding:24px;background:#f3f6f6;border:solid 1px #e1e4e5}.rst-content .sidebar p,.rst-content .sidebar ul,.rst-content .sidebar dl{font-size:90%}.rst-content .sidebar .last{margin-bottom:0}.rst-content .sidebar .sidebar-title{display:block;font-family:"Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif;font-weight:bold;background:#e1e4e5;padding:6px 12px;margin:-24px;margin-bottom:24px;font-size:100%}.rst-content .highlighted{background:#F1C40F;display:inline-block;font-weight:bold;padding:0 6px}.rst-content .footnote-reference,.rst-content .citation-reference{vertical-align:baseline;position:relative;top:-0.4em;line-height:0;font-size:90%}.rst-content table.docutils.citation,.rst-content table.docutils.footnote{background:none;border:none;color:gray}.rst-content table.docutils.citation td,.rst-content table.docutils.citation tr,.rst-content table.docutils.footnote td,.rst-content table.docutils.footnote tr{border:none;background-color:transparent !important;white-space:normal}.rst-content table.docutils.citation td.label,.rst-content table.docutils.footnote td.label{padding-left:0;padding-right:0;vertical-align:top}.rst-content table.docutils.citation tt,.rst-content table.docutils.citation code,.rst-content table.docutils.footnote tt,.rst-content table.docutils.footnote code{color:#555}.rst-content .wy-table-responsive.citation,.rst-content .wy-table-responsive.footnote{margin-bottom:0}.rst-content .wy-table-responsive.citation+:not(.citation),.rst-content .wy-table-responsive.footnote+:not(.footnote){margin-top:24px}.rst-content .wy-table-responsive.citation:last-child,.rst-content .wy-table-responsive.footnote:last-child{margin-bottom:24px}.rst-content table.docutils th{border-color:#e1e4e5}.rst-content table.docutils td .last,.rst-content table.docutils td .last :last-child{margin-bottom:0}.rst-content table.field-list{border:none}.rst-content table.field-list td{border:none}.rst-content table.field-list td p{font-size:inherit;line-height:inherit}.rst-content table.field-list td>strong{display:inline-block}.rst-content table.field-list .field-name{padding-right:10px;text-align:left;white-space:nowrap}.rst-content table.field-list .field-body{text-align:left}.rst-content tt,.rst-content tt,.rst-content code{color:#000;font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace;padding:2px 5px}.rst-content tt big,.rst-content tt em,.rst-content tt big,.rst-content code big,.rst-content tt em,.rst-content code em{font-size:100% !important;line-height:normal}.rst-content tt.literal,.rst-content tt.literal,.rst-content code.literal{color:#E74C3C}.rst-content tt.xref,a .rst-content tt,.rst-content tt.xref,.rst-content code.xref,a .rst-content tt,a .rst-content code{font-weight:bold;color:#404040}.rst-content pre,.rst-content kbd,.rst-content samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",Courier,monospace}.rst-content a tt,.rst-content a tt,.rst-content a code{color:#2980B9}.rst-content dl{margin-bottom:24px}.rst-content dl dt{font-weight:bold;margin-bottom:12px}.rst-content dl p,.rst-content dl table,.rst-content dl ul,.rst-content dl ol{margin-bottom:12px !important}.rst-content dl dd{margin:0 0 12px 24px;line-height:24px}.rst-content dl:not(.docutils){margin-bottom:24px}.rst-content dl:not(.docutils) dt{display:table;margin:6px 0;font-size:90%;line-height:normal;background:#e7f2fa;color:#2980B9;border-top:solid 3px #6ab0de;padding:6px;position:relative}.rst-content dl:not(.docutils) dt:before{color:#6ab0de}.rst-content dl:not(.docutils) dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dl dt{margin-bottom:6px;border:none;border-left:solid 3px #ccc;background:#f0f0f0;color:#555}.rst-content dl:not(.docutils) dl dt .headerlink{color:#404040;font-size:100% !important}.rst-content dl:not(.docutils) dt:first-child{margin-top:0}.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) tt,.rst-content dl:not(.docutils) code{font-weight:bold}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname,.rst-content dl:not(.docutils) tt.descclassname,.rst-content dl:not(.docutils) code.descclassname{background-color:transparent;border:none;padding:0;font-size:100% !important}.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) tt.descname,.rst-content dl:not(.docutils) code.descname{font-weight:bold}.rst-content dl:not(.docutils) .optional{display:inline-block;padding:0 4px;color:#000;font-weight:bold}.rst-content dl:not(.docutils) .property{display:inline-block;padding-right:8px}.rst-content .viewcode-link,.rst-content .viewcode-back{display:inline-block;color:#27AE60;font-size:80%;padding-left:24px}.rst-content .viewcode-back{display:block;float:right}.rst-content p.rubric{margin-bottom:12px;font-weight:bold}.rst-content tt.download,.rst-content code.download{background:inherit;padding:inherit;font-weight:normal;font-family:inherit;font-size:inherit;color:inherit;border:inherit;white-space:inherit}.rst-content tt.download span:first-child,.rst-content code.download span:first-child{-webkit-font-smoothing:subpixel-antialiased}.rst-content tt.download span:first-child:before,.rst-content code.download span:first-child:before{margin-right:4px}.rst-content .guilabel{border:1px solid #7fbbe3;background:#e7f2fa;font-size:80%;font-weight:700;border-radius:4px;padding:2.4px 6px;margin:auto 2px}.rst-content .versionmodified{font-style:italic}@media screen and (max-width: 480px){.rst-content .sidebar{width:100%}}span[id*='MathJax-Span']{color:#404040}.math{text-align:center}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-regular.eot");src:url("../fonts/Lato/lato-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-regular.woff2") format("woff2"),url("../fonts/Lato/lato-regular.woff") format("woff"),url("../fonts/Lato/lato-regular.ttf") format("truetype");font-weight:400;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bold.eot");src:url("../fonts/Lato/lato-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bold.woff2") format("woff2"),url("../fonts/Lato/lato-bold.woff") format("woff"),url("../fonts/Lato/lato-bold.ttf") format("truetype");font-weight:700;font-style:normal}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-bolditalic.eot");src:url("../fonts/Lato/lato-bolditalic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-bolditalic.woff2") format("woff2"),url("../fonts/Lato/lato-bolditalic.woff") format("woff"),url("../fonts/Lato/lato-bolditalic.ttf") format("truetype");font-weight:700;font-style:italic}@font-face{font-family:"Lato";src:url("../fonts/Lato/lato-italic.eot");src:url("../fonts/Lato/lato-italic.eot?#iefix") format("embedded-opentype"),url("../fonts/Lato/lato-italic.woff2") format("woff2"),url("../fonts/Lato/lato-italic.woff") format("woff"),url("../fonts/Lato/lato-italic.ttf") format("truetype");font-weight:400;font-style:italic}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url("../fonts/RobotoSlab/roboto-slab.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-regular.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-regular.ttf") format("truetype")}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot");src:url("../fonts/RobotoSlab/roboto-slab-v7-bold.eot?#iefix") format("embedded-opentype"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff2") format("woff2"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.woff") format("woff"),url("../fonts/RobotoSlab/roboto-slab-v7-bold.ttf") format("truetype")} diff --git a/src/extra/manual/6.7.0/_static/doctools.js b/src/extra/manual/6.7.0/_static/doctools.js new file mode 100644 index 00000000..daccd209 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/doctools.js @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/src/extra/manual/6.7.0/_static/doctools.js.pkgsave b/src/extra/manual/6.7.0/_static/doctools.js.pkgsave new file mode 100644 index 00000000..daccd209 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/doctools.js.pkgsave @@ -0,0 +1,315 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Sphinx JavaScript utilities for all documentation. + * + * :copyright: Copyright 2007-2020 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + +/** + * make the code below compatible with browsers without + * an installed firebug like debugger +if (!window.console || !console.firebug) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", + "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", + "profile", "profileEnd"]; + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +} + */ + +/** + * small helper function to urldecode strings + */ +jQuery.urldecode = function(x) { + return decodeURIComponent(x).replace(/\+/g, ' '); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} + +/** + * Small JavaScript module for the documentation. + */ +var Documentation = { + + init : function() { + this.fixFirefoxAnchorBug(); + this.highlightSearchWords(); + this.initIndexTable(); + if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) { + this.initOnKeyListeners(); + } + }, + + /** + * i18n support + */ + TRANSLATIONS : {}, + PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; }, + LOCALE : 'unknown', + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext : function(string) { + var translated = Documentation.TRANSLATIONS[string]; + if (typeof translated === 'undefined') + return string; + return (typeof translated === 'string') ? translated : translated[0]; + }, + + ngettext : function(singular, plural, n) { + var translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated === 'undefined') + return (n == 1) ? singular : plural; + return translated[Documentation.PLURALEXPR(n)]; + }, + + addTranslations : function(catalog) { + for (var key in catalog.messages) + this.TRANSLATIONS[key] = catalog.messages[key]; + this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')'); + this.LOCALE = catalog.locale; + }, + + /** + * add context elements like header anchor links + */ + addContextElements : function() { + $('div[id] > :header:first').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this headline')). + appendTo(this); + }); + $('dt[id]').each(function() { + $('\u00B6'). + attr('href', '#' + this.id). + attr('title', _('Permalink to this definition')). + appendTo(this); + }); + }, + + /** + * workaround a firefox stupidity + * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075 + */ + fixFirefoxAnchorBug : function() { + if (document.location.hash && $.browser.mozilla) + window.setTimeout(function() { + document.location.href += ''; + }, 10); + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords : function() { + var params = $.getQueryParameters(); + var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : []; + if (terms.length) { + var body = $('div.body'); + if (!body.length) { + body = $('body'); + } + window.setTimeout(function() { + $.each(terms, function() { + body.highlightText(this.toLowerCase(), 'highlighted'); + }); + }, 10); + $('') + .appendTo($('#searchbox')); + } + }, + + /** + * init the domain index toggle buttons + */ + initIndexTable : function() { + var togglers = $('img.toggler').click(function() { + var src = $(this).attr('src'); + var idnum = $(this).attr('id').substr(7); + $('tr.cg-' + idnum).toggle(); + if (src.substr(-9) === 'minus.png') + $(this).attr('src', src.substr(0, src.length-9) + 'plus.png'); + else + $(this).attr('src', src.substr(0, src.length-8) + 'minus.png'); + }).css('display', ''); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) { + togglers.click(); + } + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords : function() { + $('#searchbox .highlight-link').fadeOut(300); + $('span.highlighted').removeClass('highlighted'); + }, + + /** + * make the url absolute + */ + makeURL : function(relativeURL) { + return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL; + }, + + /** + * get the current relative url + */ + getCurrentURL : function() { + var path = document.location.pathname; + var parts = path.split(/\//); + $.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() { + if (this === '..') + parts.pop(); + }); + var url = parts.join('/'); + return path.substring(url.lastIndexOf('/') + 1, path.length - 1); + }, + + initOnKeyListeners: function() { + $(document).keydown(function(event) { + var activeElementType = document.activeElement.tagName; + // don't navigate when in search box or textarea + if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT' + && !event.altKey && !event.ctrlKey && !event.metaKey && !event.shiftKey) { + switch (event.keyCode) { + case 37: // left + var prevHref = $('link[rel="prev"]').prop('href'); + if (prevHref) { + window.location.href = prevHref; + return false; + } + case 39: // right + var nextHref = $('link[rel="next"]').prop('href'); + if (nextHref) { + window.location.href = nextHref; + return false; + } + } + } + }); + } +}; + +// quick alias for translations +_ = Documentation.gettext; + +$(document).ready(function() { + Documentation.init(); +}); diff --git a/src/extra/manual/6.7.0/_static/documentation_options.js b/src/extra/manual/6.7.0/_static/documentation_options.js new file mode 100644 index 00000000..bb1063c2 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/documentation_options.js @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '6.7.0', + LANGUAGE: 'None', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false +}; \ No newline at end of file diff --git a/src/extra/manual/6.7.0/_static/documentation_options.js_t.pkgsave b/src/extra/manual/6.7.0/_static/documentation_options.js_t.pkgsave new file mode 100644 index 00000000..8afaac2f --- /dev/null +++ b/src/extra/manual/6.7.0/_static/documentation_options.js_t.pkgsave @@ -0,0 +1,12 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: '{{ release|e }}', + LANGUAGE: '{{ language }}', + COLLAPSE_INDEX: false, + BUILDER: '{{ builder }}', + FILE_SUFFIX: '{{ file_suffix }}', + LINK_SUFFIX: '{{ link_suffix }}', + HAS_SOURCE: {{ has_source|lower }}, + SOURCELINK_SUFFIX: '{{ sourcelink_suffix }}', + NAVIGATION_WITH_KEYS: {{ 'true' if theme_navigation_with_keys|tobool else 'false'}} +}; diff --git a/src/extra/manual/6.7.0/_static/file.png b/src/extra/manual/6.7.0/_static/file.png new file mode 100644 index 00000000..a858a410 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/file.png differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.eot b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.eot new file mode 100644 index 00000000..3361183a Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.ttf b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.ttf new file mode 100644 index 00000000..29f691d5 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.woff b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.woff new file mode 100644 index 00000000..c6dff51f Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.woff2 b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.woff2 new file mode 100644 index 00000000..bb195043 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bold.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.eot b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.eot new file mode 100644 index 00000000..3d415493 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.ttf b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.ttf new file mode 100644 index 00000000..f402040b Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.woff b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.woff new file mode 100644 index 00000000..88ad05b9 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.woff2 b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.woff2 new file mode 100644 index 00000000..c4e3d804 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-bolditalic.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.eot b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.eot new file mode 100644 index 00000000..3f826421 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.ttf b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.ttf new file mode 100644 index 00000000..b4bfc9b2 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.woff b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.woff new file mode 100644 index 00000000..76114bc0 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.woff2 b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.woff2 new file mode 100644 index 00000000..3404f37e Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-italic.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.eot b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.eot new file mode 100644 index 00000000..11e3f2a5 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.ttf b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.ttf new file mode 100644 index 00000000..74decd9e Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.woff b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.woff new file mode 100644 index 00000000..ae1307ff Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.woff2 b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.woff2 new file mode 100644 index 00000000..3bf98433 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/Lato/lato-regular.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot new file mode 100644 index 00000000..79dc8efe Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf new file mode 100644 index 00000000..df5d1df2 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff new file mode 100644 index 00000000..6cb60000 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 new file mode 100644 index 00000000..7059e231 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-bold.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot new file mode 100644 index 00000000..2f7ca78a Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf new file mode 100644 index 00000000..eb52a790 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff new file mode 100644 index 00000000..f815f63f Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 new file mode 100644 index 00000000..f2c76e5b Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/RobotoSlab/roboto-slab-v7-regular.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.eot b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.eot new file mode 100644 index 00000000..e9f60ca9 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.eot differ diff --git a/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.svg b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.svg new file mode 100644 index 00000000..855c845e --- /dev/null +++ b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.svg @@ -0,0 +1,2671 @@ + + + + +Created by FontForge 20120731 at Mon Oct 24 17:37:40 2016 + By ,,, +Copyright Dave Gandy 2016. All rights reserved. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.ttf b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.ttf new file mode 100644 index 00000000..35acda2f Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.ttf differ diff --git a/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.woff b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.woff new file mode 100644 index 00000000..400014a4 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.woff differ diff --git a/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.woff2 b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.woff2 new file mode 100644 index 00000000..4d13fc60 Binary files /dev/null and b/src/extra/manual/6.7.0/_static/fonts/fontawesome-webfont.woff2 differ diff --git a/src/extra/manual/6.7.0/_static/jquery-3.5.1.js b/src/extra/manual/6.7.0/_static/jquery-3.5.1.js new file mode 100644 index 00000000..50937333 --- /dev/null +++ b/src/extra/manual/6.7.0/_static/jquery-3.5.1.js @@ -0,0 +1,10872 @@ +/*! + * jQuery JavaScript Library v3.5.1 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2020-05-04T22:49Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + return typeof obj === "function" && typeof obj.nodeType !== "number"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.5.1", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.5 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2020-03-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem.namespaceURI, + docElem = ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +}; +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the master Deferred + master = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + master.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( master.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return master.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), master.reject ); + } + + return master.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + return result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + + which: function( event ) { + var button = event.button; + + // Add which for key events + if ( event.which == null && rkeyEvent.test( event.type ) ) { + return event.charCode != null ? event.charCode : event.keyCode; + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) { + if ( button & 1 ) { + return 1; + } + + if ( button & 2 ) { + return 3; + } + + if ( button & 4 ) { + return 2; + } + + return 0; + } + + return event.which; + } +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px"; + tr.style.height = "1px"; + trChild.style.height = "9px"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = parseInt( trStyle.height ) > 3; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( + dataPriv.get( cur, "events" ) || Object.create( null ) + )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) { + xml = undefined; + } + + if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { + jQuery.error( "Invalid XML: " + data ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ) + .filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ) + .map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script + if ( !isSuccess && jQuery.inArray( "script", s.dataTypes ) > -1 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

24. Best practice

+

Practices used in real environments

+
+

24.1. Passwordless connections

+

It is recommended to run cdist with public key authentication. +This requires a private/public key pair and the entry +"PermitRootLogin without-password" in the sshd server. +See sshd_config(5) and ssh-keygen(1).

+
+
+

24.2. Speeding up ssh connections

+

When connecting to a new host, the initial delay with ssh connections +is pretty big. As cdist makes many connections to each host successive +connections can be sped up by "sharing of multiple sessions over a single +network connection" (quote from ssh_config(5)). This is also called "connection +multiplexing".

+

Cdist implements this since v4.0.0 by executing ssh with the appropriate +options (-o ControlMaster=auto -o ControlPath=/tmp/<tmpdir>/s -o +ControlPersist=2h).

+

Note that the sshd_config on the server can configure the maximum number of +parallel multiplexed connections this with MaxSessions N (N defaults to 10 +for OpenSSH v7.4).

+
+
+

24.3. Speeding up shell execution

+

On the source host, ensure that /bin/sh is not bash: bash is quite slow for +script execution. Instead, you could use dash after installing it:

+
ln -sf /bin/dash /bin/sh
+
+
+
+
+

24.4. Multi master or environment setups

+

If you plan to distribute cdist among servers or use different +environments, you can do so easily with the included version +control git. For instance if you plan to use the typical three +environments production, integration and development, you can +realise this with git branches:

+
# Go to cdist checkout
+cd /path/to/cdist
+
+# Create branches
+git branch development
+git branch integration
+git branch production
+
+# Make use of a branch, for instance production
+git checkout production
+
+
+

Similar if you want to have cdist checked out at multiple machines, +you can clone it multiple times:

+
machine-a % git clone git://your-git-server/cdist
+machine-b % git clone git://your-git-server/cdist
+
+
+
+
+

24.5. Separating work by groups

+

If you are working with different groups on one cdist-configuration, +you can delegate to other manifests and have the groups edit only +their manifests. You can use the following snippet in +conf/manifests/init:

+
# Include other groups
+sh -e "$__manifest/systems"
+
+sh -e "$__manifest/cbrg"
+
+
+
+
+

24.6. Maintaining multiple configurations

+

When you need to manage multiple sites with cdist, like company_a, company_b +and private for instance, you can easily use git for this purpose. +Including a possible common base that is reused across the different sites:

+
# create branches
+git branch company_a company_b common private
+
+# make stuff for company a
+git checkout company_a
+# work, commit, etc.
+
+# make stuff for company b
+git checkout company_b
+# work, commit, etc.
+
+# make stuff relevant for all sites
+git checkout common
+# work, commit, etc.
+
+# change to private and include latest common stuff
+git checkout private
+git merge common
+
+
+

The following .git/config is taken from a real world scenario:

+
# Track upstream, merge from time to time
+[remote "upstream"]
+   url = git://git.schottelius.org/cdist
+   fetch = +refs/heads/*:refs/remotes/upstream/*
+
+# Same as upstream, but works when being offline
+[remote "local"]
+   fetch = +refs/heads/*:refs/remotes/local/*
+   url = /home/users/nico/p/cdist
+
+# Remote containing various ETH internal branches
+[remote "eth"]
+   url = sans.ethz.ch:/home/services/sans/git/cdist-eth
+   fetch = +refs/heads/*:refs/remotes/eth/*
+
+# Public remote that contains my private changes to cdist upstream
+[remote "nico"]
+   url = git.schottelius.org:/home/services/git/cdist-nico
+   fetch = +refs/heads/*:refs/remotes/nico/*
+
+# The "nico" branch will be synced with the remote nico, branch master
+[branch "nico"]
+   remote = nico
+   merge = refs/heads/master
+
+# ETH stable contains rock solid configurations used in various places
+[branch "eth-stable"]
+   remote = eth
+   merge = refs/heads/stable
+
+
+

Have a look at git-remote(1) to adjust the remote configuration, which allows

+
+
+

24.7. Multiple developers with different trust

+

If you are working in an environment that requires different people to +work on the same configuration, but having different privileges, you can +implement this scenario with a gateway host and sudo:

+
    +
  • Create a dedicated user (for instance cdist)

  • +
  • Setup the ssh-pubkey for this user that has the right to configure all hosts

  • +
  • Create a wrapper to update the cdist configuration in ~cdist/cdist

  • +
  • Allow every developer to execute this script via sudo as the user cdist

  • +
  • Allow run of cdist as user cdist on specific hosts on a per user/group basis.

    +
    +
      +
    • f.i. nico ALL=(ALL) NOPASSWD: /home/cdist/bin/cdist config hostabc

    • +
    +
    +
  • +
+

For more details consult sudoers(5)

+
+
+

24.8. Templating

+
    +
  • create directory files/ in your type (convention)

  • +
  • create the template as an executable file like files/basic.conf.sh, it will output text using shell variables for the values

  • +
+
#!/bin/sh
+# in the template, use cat << eof (here document) to output the text
+# and use standard shell variables in the template
+# output everything in the template script to stdout
+cat << EOF
+server {
+  listen                          80;
+  server_name                     $SERVERNAME;
+  root                            $ROOT;
+
+  access_log /var/log/nginx/$SERVERNAME_access.log
+  error_log /var/log/nginx/$SERVERNAME_error.log
+}
+EOF
+
+
+
    +
  • in the manifest, export the relevant variables and add the following lines to your manifest:

  • +
+
# export variables needed for the template
+  export SERVERNAME='test"
+  export ROOT='/var/www/test'
+# render the template
+  mkdir -p "$__object/files"
+  "$__type/files/basic.conf.sh" > "$__object/files/basic.conf"
+# send the rendered template
+  __file /etc/nginx/sites-available/test.conf  \
+    --state present
+    --source "$__object/files/basic.conf"
+
+
+
+
+

24.9. Testing a new type

+

If you want to test a new type on a node, you can tell cdist to only use an +object of this type: Use the '--initial-manifest' parameter +with - (stdin) as argument and feed object into stdin +of cdist:

+
# Singleton type without parameter
+echo __ungleich_munin_server | cdist --initial-manifest - munin.panter.ch
+
+# Singleton type with parameter
+echo __ungleich_munin_node --allow 1.2.3.4 | \
+    cdist --initial-manifest - rails-19.panter.ch
+
+# Normal type
+echo __file /tmp/stdintest --mode 0644 | \
+    cdist --initial-manifest - cdist-dev-01.ungleich.ch
+
+
+
+
+

24.10. Other content in cdist repository

+

Usually the cdist repository contains all configuration +items. Sometimes you may have additional resources that +you would like to store in your central configuration +repository (like password files from KeepassX, +Libreoffice diagrams, etc.).

+

It is recommended to use a subfolder named "non-cdist" +in the repository for such content: It allows you to +easily distinguish what is used by cdist and what is not +and also to store all important files in one +repository.

+
+
+

24.11. Notes on CDIST_ORDER_DEPENDENCY

+

With CDIST_ORDER_DEPENDENCY all types are executed in the order in which they +are created in the manifest. The current created object automatically depends +on the previously created object.

+

It essentially helps you to build up blocks of code that build upon each other +(like first creating the directory xyz than the file below the directory).

+

This can be helpful, but one must be aware of its side effects.

+
+

24.11.1. CDIST_ORDER_DEPENDENCY kills parallelization

+

Suppose you have defined CDIST_ORDER_DEPENDENCY and then, among other things, +you specify creation of three, by nature independent, files.

+

init

+
CDIST_ORDER_DEPENDENCY=1
+export CDIST_ORDER_DEPENDENCY
+
+...
+__file /tmp/file1
+__file /tmp/file2
+__file /tmp/file3
+...
+
+
+

Due to defined CDIST_ORDER_DEPENDENCY cdist will execute them in specified order. +It is better to use CDIST_ORDER_DEPENDENCY in well defined blocks:

+

init

+
CDIST_ORDER_DEPENDENCY=1
+export CDIST_ORDER_DEPENDENCY
+...
+unset CDIST_ORDER_DEPENDENCY
+
+__file /tmp/file1
+__file /tmp/file2
+__file /tmp/file3
+
+CDIST_ORDER_DEPENDENCY=1
+export CDIST_ORDER_DEPENDENCY
+...
+unset CDIST_ORDER_DEPENDENCY
+
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-bootstrap.html b/src/extra/manual/6.7.0/cdist-bootstrap.html new file mode 100644 index 00000000..0c7abd92 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-bootstrap.html @@ -0,0 +1,351 @@ + + + + + + + + + + + 12. Bootstrap — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

12. Bootstrap

+

This document describes the usual steps recommended for a new +cdist setup. It is recommended that you have read and understood +cdist quickstart before digging into this.

+
+

12.1. Location

+

First of all, you should think about where to store your configuration +database and who will be accessing or changing it. Secondly you have to +think about where to configure your hosts from, which may be a different +location.

+

For starters, having cdist (which includes the configuration database) on +your notebook should be fine. +Additionally an external copy of the git repository the configuration +relies on is recommended, for use as backup as well as to allow easy collaboration +with others.

+

For more sophisticated setups developing cdist configurations with multiple +people, have a look at cdist best practice.

+
+
+

12.2. Setup working directory and branch

+

I assume you have a fresh copy of the cdist tree in ~/cdist, cloned from +one of the official URLs (see cdist quickstart if you don't). +Entering the command "git branch" should show you "* master", which indicates +you are on the master branch.

+

The master branch reflects the latest development of cdist. As this is the +development branch, it may or may not work. There are also version branches +available, which are kept in a stable state. Let's use git branch -r +to list all branches:

+
cdist% git branch -r
+  origin/1.0
+  origin/1.1
+  origin/1.2
+  origin/1.3
+  origin/1.4
+  origin/1.5
+  origin/1.6
+  origin/1.7
+  origin/2.0
+  origin/HEAD -> origin/master
+  origin/archive_shell_function_approach
+  origin/master
+
+
+

So 2.0 is the latest version branch in this example. +All versions (2.0.x) within one version branch (2.0) are compatible to each +other and won't break your configuration when updating.

+

It's up to you to decide which branch you want to base your own work on: +master contains more recent changes, newer types, but may also break. +The version branches are stable, but may lack the latest features. +Your decision can be changed later on, but may result in merge conflicts, +which you will need to solve.

+

Let's assume you want latest stuff and select the master branch as base for +your own work. Now it's time to create your branch, which contains your +local changes. I usually name it by the company/area I am working for: +ethz-systems, localch, customerX, ... But this is pretty much up to you.

+

In this tutorial I use the branch mycompany:

+
cdist% git checkout -b mycompany origin/master
+Branch mycompany set up to track remote branch master from origin.
+Switched to a new branch 'mycompany'
+cdist-user% git branch
+  master
+* mycompany
+
+
+

From now on, you can use git as usual to commit your changes in your own branch.

+
+
+

12.3. Publishing the configuration

+

Usually a development machine like a notebook should be considered +temporary only. For this reason and to enable shareability, the configuration +should be published to another device as early as possible. The following +example shows how to publish the configuration to another host that is +reachable via ssh and has git installed:

+
# Create bare git repository on the host named "loch"
+cdist% ssh loch "GIT_DIR=/home/nutzer/cdist git init"
+Initialized empty Git repository in /home/nutzer/cdist/
+
+# Add remote git repo to git config
+cdist% git remote add loch loch:/home/nutzer/cdist
+
+# Configure the mycompany branch to push to loch
+cdist% git config branch.mycompany.remote loch
+
+# Configure mycompany branch to push into remote master branch
+cdist% git config branch.mycompany.merge refs/heads/master
+
+# Push mycompany branch to remote branch master initially
+cdist% git push loch mycompany:refs/heads/master
+
+
+

Now you have setup the git repository to synchronise the mycompany +branch with the master branch on the host loch. Thus you can commit +as usual in your branch and push out changes by entering git push.

+
+
+

12.4. Updating from origin

+

Whenever you want to update your cdist installation, you can use git to do so:

+
# Update git repository with latest changes from origin
+cdist% git fetch origin
+
+# Update current branch with master branch from origin
+cdist% git merge origin/master
+
+# Alternative: Update current branch with 2.0 branch from origin
+cdist% git merge origin/2.0
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-cache.html b/src/extra/manual/6.7.0/cdist-cache.html new file mode 100644 index 00000000..32d4f75b --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-cache.html @@ -0,0 +1,321 @@ + + + + + + + + + + + 26. Local cache overview — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

26. Local cache overview

+
+

26.1. Description

+

While executing, cdist stores data to local cache. Currently this feature is +one way only. That means that cdist does not use stored data for future runs. +Anyway, those data can be used for debugging cdist, debugging types and +debugging after host configuration fails.

+

Local cache is saved under $HOME/.cdist/cache directory, one directory entry +for each host. Subdirectory path is specified by +-C/--cache-path-pattern option, cache_path_pattern +configuration option or by using CDIST_CACHE_PATH_PATTERN +environment variable.

+

For more info on cache path pattern see CACHE PATH PATTERN FORMAT +section in cdist man page.

+
+
+

26.2. Cache overview

+

As noted above each configured host has got its subdirectory in local cache. +Entries in host's cache directory are as follows.

+
+
bin

directory with cdist type emulators

+
+
conf

dynamically determined cdist conf directory, union of all specified +conf directories

+
+
explorer

directory containing global explorer named files containing explorer output +after running on target host

+
+
messages

file containing messages

+
+
object

directory containing subdirectory for each cdist object

+
+
object_marker

object marker for this particular cdist run

+
+
stderr

directory containing init manifest and remote stderr stream output

+
+
stdout

directory containing init manifest and remote stdout stream output

+
+
target_host

file containing target host of this cdist run, as specified when running +cdist

+
+
typeorder

file containing types in order of execution.

+
+
+
+

26.2.1. Object cache overview

+

Each object under object directory has its own structure.

+
+
code-local

code generated from gencode-local, present only if something is +generated

+
+
code-remote

code generated from gencode-remote, present only if something is +generated

+
+
explorer

directory containing type explorer named files containing explorer output +after running on target host

+
+
files

directory with object files created during type execution

+
+
parameter

directory containing type parameter named files containing parameter +values

+
+
source

this type's source (init manifest)

+
+
state

this type execution state ('done' when finished)

+
+
stderr

directory containing type's manifest, gencode-* and code-* stderr stream +outputs

+
+
stdin

this type stdin content

+
+
stdout

directory containing type's manifest, gencode-* and code-* stdout stream +outputs.

+
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-configuration.html b/src/extra/manual/6.7.0/cdist-configuration.html new file mode 100644 index 00000000..1b3a710d --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-configuration.html @@ -0,0 +1,361 @@ + + + + + + + + + + + 13. Configuration — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

13. Configuration

+
+

13.1. Description

+

cdist obtains configuration data from the following sources in the following +order:

+
+
    +
  1. command-line options

  2. +
  3. configuration file specified at command-line using -g command line option

  4. +
  5. configuration file specified in CDIST_CONFIG_FILE environment variable

  6. +
  7. environment variables

  8. +
  9. user's configuration file (first one found of ~/.cdist.cfg, $XDG_CONFIG_HOME/cdist/cdist.cfg, in specified order)

  10. +
  11. in-distribution configuration file (cdist/conf/cdist.cfg)

  12. +
  13. system-wide configuration file (/etc/cdist.cfg)

  14. +
+
+

if one exists.

+

Configuration source with lower ordering number from above has a higher +precedence. Configuration option value read from source with higher +precedence will overwrite option value, if exists, read from source with +lower precedence. That means that command-line option wins them all.

+

Users can decide on the local configuration file location. It can be either +~/.cdist.cfg or $XDG_CONFIG_HOME/cdist/cdist.cfg. Note that, if both exist, +then ~/.cdist.cfg is used.

+

For a per-project configuration, particular environment variables or better, +CDIST_CONFIG_FILE environment variable or -g CONFIG_FILE command line option, +can be used.

+
+
+

13.2. Config file format

+

cdist configuration file is in the INI file format. Currently it supports +only [GLOBAL] section.

+

Here you can find configuration file skeleton:

+
[GLOBAL]
+# archiving
+#     Use specified archiving. Valid values include:
+#     none, tar, tgz, tbz2 and txz.
+# archiving = tar
+#
+# beta
+#     Enable beta functionality. It recognizes boolean values from
+#     yes/no, on/off, true/false and 1/0
+# beta = no
+#
+# cache_path_pattern
+#     Specify cache path pattern.
+# cache_path_pattern = %h
+#
+# colored_output
+#     Colorize cdist's output. If enabled, cdist will use different colors for
+#     different log levels.
+#     Recognized values are 'always', 'never', and 'auto'.
+#     If the value is 'auto', colors are enabled if stdout is a TTY unless
+#     the NO_COLOR (https://no-color.org/) environment variable is defined.
+# colored_output = auto
+#
+# conf_dir
+#     List of configuration directories separated with the character conventionally
+#     used by the operating system to separate search path components (as in PATH),
+#     such as ':' for POSIX or ';' for Windows.
+#     If also specified at command line then values from command line are
+#     appended to this value.
+#     Notice that this works in a "last one wins" fashion, so if a type is redefined
+#     in multiple conf_dirs, the last one in which it is defined will be used.
+#     Consider using a unique prefix for your own roles if this can be an issue.
+# conf_dir = <dir1>:<dir2>
+#
+# init_manifest
+#     Specify default initial manifest.
+# init_manifest = <path-to-init-manifest>
+#
+# inventory_dir
+#     Specify inventory directory.
+# inventory_dir = <path-to-inventory-dir>
+#
+# jobs
+#     Specify number of jobs for parallel processing. If -1 then the default,
+#     number of CPU's in the system is used. If 0 then parallel processing in
+#     jobs is disabled. If set to positive number then specified maximum
+#     number of processes will be used.
+# jobs = 0
+#
+# local_shell
+#     Shell command used for local execution.
+# local_shell = /bin/sh
+#
+# out_path
+#     Directory to save cdist output in.
+# out_path =
+#
+# parallel
+#     Process hosts in parallel. If -1 then the default, number of CPU's in
+#     the system is used. If 0 then parallel processing of hosts is disabled.
+#     If set to positive number then specified maximum number of processes
+#     will be used.
+# parallel = 0
+#
+# remote_copy
+#     Command to use for remote copy (should behave like scp).
+# remote_copy =
+#
+# remote_exec
+#     Command to use for remote execution (should behave like ssh).
+# remote_exec =
+#
+# remote_out_path
+#     Directory to save cdist output in on the target host.
+# remote_out_path = /var/lib/cdist
+#
+# remote_shell
+#     Shell command at remote host used for remote execution.
+# remote_shell = /bin/sh
+#
+# verbosity
+#     Set verbosity level. Valid values are:
+#     ERROR, WARNING, INFO, VERBOSE, DEBUG, TRACE and OFF.
+# verbosity = INFO
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-explorer.html b/src/extra/manual/6.7.0/cdist-explorer.html new file mode 100644 index 00000000..76354d28 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-explorer.html @@ -0,0 +1,285 @@ + + + + + + + + + + + 17. Explorer — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

17. Explorer

+
+

17.1. Description

+

Explorers are small shell scripts, which will be executed on the target +host. The aim of each explorer is to give hints to types on how to act on the +target system. An explorer outputs the result to stdout, which is usually +a one liner, but may be empty or multi line especially in the case of +type explorers.

+

There are general explorers, which are run in an early stage, and +type explorers. Both work almost exactly the same way, with the difference +that the values of the general explorers are stored in a general location and +the type specific below the object.

+

Explorers can reuse other explorers on the target system by calling

+
$__explorer/<explorer_name> (general and type explorer)
+
+
+

or

+
$__type_explorer/<explorer name> (type explorer).
+
+
+

In case of significant errors, the explorer may exit non-zero and return an +error message on stderr, which will cause cdist to abort.

+

You can also use stderr for debugging purposes while developing a new +explorer.

+
+
+

17.2. Examples

+

A very simple explorer may look like this:

+
hostname
+
+
+

Which is in practise the hostname explorer.

+

A type explorer, which could check for the status of a package may look like this:

+
if [ -f "$__object/parameter/name" ]; then
+   name="$(cat "$__object/parameter/name")"
+else
+   name="$__object_id"
+fi
+
+# Expect dpkg failing, if package is not known / installed
+dpkg -s "$name" 2>/dev/null || exit 0
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-features.html b/src/extra/manual/6.7.0/cdist-features.html new file mode 100644 index 00000000..0bd2ac2a --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-features.html @@ -0,0 +1,274 @@ + + + + + + + + + + + 2. Features — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

2. Features

+

But cdist ticks differently, here is the feature set that makes it unique:

+
+
Simplicity

There is only one type to extend cdist called type

+
+
Design
    +
  • Type and core cleanly separated

  • +
  • Sticks completely to the KISS (keep it simple and stupid) paradigm

  • +
  • Meaningful error messages - do not lose time debugging error messages

  • +
  • Consistency in behaviour, naming and documentation

  • +
  • No surprise factor: Only do what is obviously clear, no magic

  • +
  • Define target state, do not focus on methods or scripts

  • +
  • Push architecture: Instantly apply your changes

  • +
+
+
Small core

cdist's core is very small - less code, less bugs

+
+
Fast development

Focus on straightforwardness of type creation is a main development objective +Batteries included: A lot of requirements can be solved using standard types

+
+
Modern Programming Language

cdist is written in Python

+
+
Requirements, Scalability

No central server needed, cdist operates in push mode and can be run from any computer

+
+
Requirements, Scalability, Upgrade

cdist only needs to be updated on the master, not on the target hosts

+
+
Requirements, Security

Uses well-know SSH as transport protocol

+
+
Requirements, Simplicity

Requires only shell and SSH server on the target

+
+
UNIX

Reuse of existing tools like cat, find, mv, ...

+
+
UNIX, familiar environment, documentation

Is available as manpages and HTML

+
+
UNIX, simplicity, familiar environment

cdist is configured in POSIX shell

+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-hacker.html b/src/extra/manual/6.7.0/cdist-hacker.html new file mode 100644 index 00000000..db070c39 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-hacker.html @@ -0,0 +1,380 @@ + + + + + + + + + + + 29. Hacking — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

29. Hacking

+
+

29.1. Welcome

+

Welcome dear hacker! I invite you to a tour of pointers to +get into the usable configuration management system, cdist.

+

The first thing to know is probably that cdist is brought to +you by people who care about how code looks like and who think +twice before merging or implementing a feature: Less features +with good usability are far better than the opposite.

+
+
+

29.2. Reporting bugs

+

If you believe you've found a bug and verified that it is +in the latest version, drop a mail to the cdist mailing list, +subject prefixed with "[BUG] " or create an issue on code.ungleich.ch.

+
+
+

29.3. Coding conventions (everywhere)

+

If something should be improved or needs to be fixed, add the word FIXME +nearby, so grepping for FIXME gives all positions that need to be fixed.

+

Indentation is 4 spaces (welcome to the python world).

+
+
+

29.4. How to submit stuff for inclusion into upstream cdist

+

If you did some cool changes to cdist, which you think might be of benefit to other +cdist users, you're welcome to propose inclusion into upstream.

+

There are some requirements to ensure your changes don't break other peoples +work nor kill the authors brain:

+
    +
  • All files should contain the usual header (Author, Copying, etc.)

  • +
  • Code submission must be done via git

  • +
  • Do not add cdist/conf/manifest/init - This file should only be touched in your +private branch!

  • +
  • Code to be included should be branched of the upstream "master" branch

    +
    +
      +
    • Exception: Bugfixes to a version branch

    • +
    +
    +
  • +
  • On a merge request, always name the branch I should pull from

  • +
  • Always ensure all manpages build. Use ./build man to test.

  • +
  • If you developed more than one feature, consider submitting them in +separate branches. This way one feature can already be included, even if +the other needs to be improved.

  • +
+

As soon as your work meets these requirements, write a mail +for inclusion to the mailinglist cdist-configuration-management at googlegroups.com +or open a merge request at https://code.ungleich.ch/ungleich-public/cdist.

+
+
+

29.5. How to submit a new type

+

For detailed information about types, see cdist type.

+

Submitting a type works as described above, with the additional requirement +that a corresponding manpage named man.rst in ReSTructured text format with +the manpage-name "cdist-type__NAME" is included in the type directory +AND the manpage builds (make man).

+

Warning: Submitting "exec" or "run" types that simply echo their parameter in +gencode will not be accepted, because they are of no use. Every type can output +code and thus such a type introduces redundant functionality that is given by +core cdist already.

+
+
+

29.6. Example git workflow

+

The following workflow works fine for most developers

+
# get latest upstream master branch
+git clone https://code.ungleich.ch/ungleich-public/cdist.git
+
+# update if already existing
+cd cdist; git fetch -v; git merge origin/master
+
+# create a new branch for your feature/bugfix
+cd cdist # if you haven't done before
+git checkout -b documentation_cleanup
+
+# *hack*
+*hack*
+
+# clone the cdist repository on code.ungleich.ch if you haven't done so
+
+# configure your repo to know about your clone (only once)
+git remote add ungleich git@code.ungleich.ch:YOURUSERNAME/cdist.git
+
+# push the new branch to ungleich gitlab
+git push ungleich documentation_cleanup
+
+# (or everything)
+git push --mirror ungleich
+
+# create a merge request at ungleich gitlab (use a browser)
+# *fixthingsbecausequalityassurancefoundissuesinourpatch*
+*hack*
+
+# push code to ungleich gitlab again
+git push ... # like above
+
+# add comment that everything should be green now (use a browser)
+
+# go back to master branch
+git checkout master
+
+# update master branch that includes your changes now
+git fetch -v origin
+git diff master..origin/master
+git merge origin/master
+
+
+

If at any point you want to go back to the original master branch, you can +use git stash to stash your changes away:

+
.. code-block:: sh
+
+
+
+

# assume you are on documentation_cleanup +git stash

+

# change to master and update to most recent upstream version +git checkout master +git fetch -v origin +git merge origin/master

+
+

Similarly when you want to develop another new feature, you go back +to the master branch and create another branch based on it:

+
.. code-block:: sh
+
+
+
+

# change to master and update to most recent upstream version +git checkout master +git fetch -v origin +git merge origin/master

+

git checkout -b another_feature

+
+

(you can repeat the code above for as many features as you want to develop +in parallel)

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-install.html b/src/extra/manual/6.7.0/cdist-install.html new file mode 100644 index 00000000..bc5f9001 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-install.html @@ -0,0 +1,400 @@ + + + + + + + + + + + 4. How to install cdist — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

4. How to install cdist

+
+

4.1. Requirements

+
+

4.1.1. Source Host

+

This is the machine from which you will configure target hosts.

+
+
    +
  • /bin/sh: A POSIX like shell (for instance bash, dash, zsh)

  • +
  • Python >= 3.5

  • +
  • SSH client

  • +
  • sphinx (for building html docs and/or the man pages)

  • +
+
+
+
+

4.1.2. Target Hosts

+
+
    +
  • /bin/sh: A POSIX like shell (for instance bash, dash, zsh)

  • +
  • SSH server

  • +
+
+
+
+
+

4.2. Install cdist

+
+

4.2.1. From git

+

Cloning cdist from git gives you the advantage of having +a version control in place for development of your own stuff +immediately.

+

To install cdist, execute the following commands:

+
git clone https://code.ungleich.ch/ungleich-public/cdist.git
+cd cdist
+export PATH=$PATH:$(pwd -P)/bin
+
+
+

From version 4.2.0 cdist tags and releases are signed. +You can get GPG public key used for signing here. +It is assumed that you are familiar with git ways of signing and verification.

+

You can also get cdist from github mirror.

+

To install cdist with distutils from cloned repository, first you have to +create version.py:

+
./bin/build-helper version
+
+
+

Then you install it with:

+
make install
+
+
+

or with:

+
make install-user
+
+
+

to install it into user site-packages directory. +Or directly with distutils:

+
python setup.py install
+
+
+

Note that bin/build-helper script is intended for cdist maintainers.

+
+

4.2.1.1. Available versions in git

+
+
    +
  • The active development takes place in the master branch

  • +
  • The released versions can be found in the tags

  • +
+
+

Other branches may be available for features or bugfixes, but they +may vanish at any point. To select a specific branch use

+
# Generic code
+git checkout -b <localbranchname> origin/<branchname>
+
+
+

So for instance if you want to use and stay with version 4.1, you can use

+
git checkout -b 4.1 origin/4.1
+
+
+
+
+

4.2.1.2. Building and using documentation (man and html)

+

If you want to build and use the documentation, run:

+
make docs
+
+
+

Documentation comes in two formats, man pages and full HTML +documentation. Documentation is built into distribution's +docs/dist directory. man pages are in docs/dist/man and +HTML documentation in docs/dist/html.

+

If you want to use man pages, run:

+
export MANPATH=$MANPATH:$(pwd -P)/docs/dist/man
+
+
+

Or you can move man pages from docs/dist/man directory to some +other directory and add it to MANPATH.

+

Full HTML documentation can be accessed at docs/dist/html/index.html.

+

You can also build only man pages or only html documentation, for +only man pages run:

+
make man
+
+
+

for only html documentation run:

+
make html
+
+
+

You can also build man pages for types in your ~/.cdist directory:

+
make dotman
+
+
+

Built man pages are now in docs/dist/man directory. If you have +some other custom .cdist directory, e.g. /opt/cdist then use:

+
make DOT_CDIST_PATH=/opt/cdist dotman
+
+
+

Note that dotman-target has to be built before a make docs-run, otherwise +the custom man-pages are not picked up.

+
+
+
+

4.2.2. Python package

+

Cdist is available as a python package at +PyPi. You can install it using

+
pip install cdist
+
+
+
+
+

4.2.3. Installing from source with signature verification

+

If you want to install cdist from signed source and verify it, first you need to +download cdist archive and its detached signature.

+

Get both, cdist-x.y.z.tar.gz and cdist-x.y.z.tar.gz.asc from release +notes of the desired tag x.y.z at +cdist git repository.

+

Get GPG public key used for signing here +and import it into GPG.

+

Now cdist source archive can be verified using gpg, e.g. to verify cdist-6.2.0:

+
$ gpg --verify cdist-6.2.0.tar.gz.asc cdist-6.2.0.targ.gz
+gpg: Signature made Sat Nov 30 23:14:19 2019 CET
+gpg:                using RSA key 69767822F3ECC3C349C1EFFFEFD2AE4EC36B6901
+gpg: Good signature from "ungleich GmbH (ungleich FOSS) <foss@ungleich.ch>" [ultimate]
+
+
+

Further steps are the same as for installing from git.

+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-integration.html b/src/extra/manual/6.7.0/cdist-integration.html new file mode 100644 index 00000000..602a7f50 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-integration.html @@ -0,0 +1,283 @@ + + + + + + + + + + + 22. cdist integration / using cdist as library — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

22. cdist integration / using cdist as library

+
+

22.1. Description

+

cdist can be integrate with other applications by importing cdist and other +cdist modules and setting all by hand. There are also helper functions which +aim to ease this integration. Just import cdist.integration and use its +functions:

+
    +
  • cdist.integration.configure_hosts_simple for configuration

  • +
  • cdist.integration.install_hosts_simple for installation.

  • +
+

Functions require host and manifest parameters. +host can be specified as a string representing host or as iterable +of hosts. manifest is a path to initial manifest. For other cdist +options default values will be used. verbose is a desired verbosity +level which defaults to VERBOSE_INFO. cdist_path parameter specifies +path to cdist executable, if it is None then functions will try to +find it first from local lib directory and then in PATH.

+

In case of cdist error cdist.Error exception is raised.

+

WARNING: cdist integration helper functions are not yet stable!

+
+
+

22.2. Examples

+
# configure host from python interactive shell
+>>> import cdist.integration
+>>> cdist.integration.configure_hosts_simple('185.203.114.185',
+...                                          '~/.cdist/manifest/init')
+
+# configure host from python interactive shell, specifying verbosity level
+>>> import cdist.integration
+>>> cdist.integration.configure_hosts_simple(
+...     '185.203.114.185', '~/.cdist/manifest/init',
+...     verbose=cdist.argparse.VERBOSE_TRACE)
+
+# configure specified dns hosts from python interactive shell
+>>> import cdist.integration
+>>> hosts = ('dns1.ungleich.ch', 'dns2.ungleich.ch', 'dns3.ungleich.ch', )
+>>> cdist.integration.configure_hosts_simple(hosts,
+...                                          '~/.cdist/manifest/init')
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-inventory.html b/src/extra/manual/6.7.0/cdist-inventory.html new file mode 100644 index 00000000..1eb6b8b1 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-inventory.html @@ -0,0 +1,441 @@ + + + + + + + + + + + 20. Inventory — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

20. Inventory

+
+

20.1. Introduction

+

cdist comes with simple built-in tag based inventory. It is a simple inventory +with list of hosts and a host has a list of tags. +Inventory functionality is still in beta so it can be used only if beta +command line flag is specified (-b, --beta) or setting CDIST_BETA env var.

+
+
+

20.2. Description

+

The idea is to have simple tagging inventory. There is a list of hosts and for +each host there are tags. Inventory database is a set of files under inventory +database base directory. Filename equals hostname. Each file contains tags for +hostname with each tag on its own line.

+

Using inventory you can now configure hosts by selecting them by tags.

+

Tags have no values, as tags are just tags. Tag name-value would in this +context mean that host has two tags and it is selected by specifying that both +tags are present.

+

This inventory is KISS cdist built-in inventory database. You can maintain it +using cdist inventory interface or using standard UNIX tools.

+
+
+

20.3. cdist inventory interface

+

With cdist inventory interface you can list host(s) and tag(s), add host(s), +add tag(s), delete host(s) and delete tag(s).

+
+
+

20.4. Configuring hosts using inventory

+

config command now has new options, -t, -a and -A.

+

-A means that all hosts in tag db is selected.

+

-a means that selected hosts must contain ALL specified tags.

+

-t means that host specifies tag - all hosts that have specified tags are +selected.

+
+
+

20.5. Examples

+
# List inventory content
+$ cdist inventory list -b
+
+# List inventory for specified host localhost
+$ cdist inventory list -b localhost
+
+# List inventory for specified tag loadbalancer
+$ cdist inventory list -b -t loadbalancer
+
+# Add hosts to inventory
+$ cdist inventory add-host -b web1 web2 web3
+
+# Delete hosts from file old-hosts from inventory
+$ cdist inventory del-host -b -f old-hosts
+
+# Add tags to specified hosts
+$ cdist inventory add-tag -b -t europe,croatia,web,static web1 web2
+
+# Add tag to all hosts in inventory
+$ cdist inventory add-tag -b -t vm
+
+# Delete all tags from specified host
+$ cdist inventory del-tag -b -a localhost
+
+# Delete tags read from stdin from hosts specified by file hosts
+$ cdist inventory del-tag -b -T - -f hosts
+
+# Configure hosts from inventory with any of specified tags
+$ cdist config -b -t web dynamic
+
+# Configure hosts from inventory with all specified tags
+$ cdist config -b -t -a web dynamic
+
+# Configure all hosts from inventory db
+$ cdist config -b -A
+
+
+
+
+

20.6. Example of manipulating database

+
$ python3 scripts/cdist inventory list -b
+$ python3 scripts/cdist inventory add-host -b localhost
+$ python3 scripts/cdist inventory add-host -b test.mycloud.net
+$ python3 scripts/cdist inventory list -b
+localhost
+test.mycloud.net
+$ python3 scripts/cdist inventory add-host -b web1.mycloud.net web2.mycloud.net shell1.mycloud.net shell2.mycloud.net
+$ python3 scripts/cdist inventory list -b
+localhost
+test.mycloud.net
+web1.mycloud.net
+web2.mycloud.net
+shell1.mycloud.net
+shell2.mycloud.net
+$ python3 scripts/cdist inventory add-tag -b -t web web1.mycloud.net web2.mycloud.net
+$ python3 scripts/cdist inventory add-tag -b -t shell shell1.mycloud.net shell2.mycloud.net
+$ python3 scripts/cdist inventory add-tag -b -t cloud
+$ python3 scripts/cdist inventory list -b
+localhost cloud
+test.mycloud.net cloud
+web1.mycloud.net cloud,web
+web2.mycloud.net cloud,web
+shell1.mycloud.net cloud,shell
+shell2.mycloud.net cloud,shell
+$ python3 scripts/cdist inventory add-tag -b -t test,web,shell test.mycloud.net
+$ python3 scripts/cdist inventory list -b
+localhost cloud
+test.mycloud.net cloud,shell,test,web
+web1.mycloud.net cloud,web
+web2.mycloud.net cloud,web
+shell1.mycloud.net cloud,shell
+shell2.mycloud.net cloud,shell
+$ python3 scripts/cdist inventory del-tag -b -t shell test.mycloud.net
+$ python3 scripts/cdist inventory list -b
+localhost cloud
+test.mycloud.net cloud,test,web
+web1.mycloud.net cloud,web
+web2.mycloud.net cloud,web
+shell1.mycloud.net cloud,shell
+shell2.mycloud.net cloud,shell
+$ python3 scripts/cdist inventory add-tag -b -t all
+$ python3 scripts/cdist inventory add-tag -b -t mistake
+$ python3 scripts/cdist inventory list -b
+localhost all,cloud,mistake
+test.mycloud.net all,cloud,mistake,test,web
+web1.mycloud.net all,cloud,mistake,web
+web2.mycloud.net all,cloud,mistake,web
+shell1.mycloud.net all,cloud,mistake,shell
+shell2.mycloud.net all,cloud,mistake,shell
+$ python3 scripts/cdist inventory del-tag -b -t mistake
+$ python3 scripts/cdist inventory list -b
+localhost all,cloud
+test.mycloud.net all,cloud,test,web
+web1.mycloud.net all,cloud,web
+web2.mycloud.net all,cloud,web
+shell1.mycloud.net all,cloud,shell
+shell2.mycloud.net all,cloud,shell
+$ python3 scripts/cdist inventory del-host -b localhost
+$ python3 scripts/cdist inventory list -b
+test.mycloud.net all,cloud,test,web
+web1.mycloud.net all,cloud,web
+web2.mycloud.net all,cloud,web
+shell1.mycloud.net all,cloud,shell
+shell2.mycloud.net all,cloud,shell
+$ python3 scripts/cdist inventory list -b -t web
+test.mycloud.net all,cloud,test,web
+web1.mycloud.net all,cloud,web
+web2.mycloud.net all,cloud,web
+$ python3 scripts/cdist inventory list -b -t -a web test
+test.mycloud.net all,cloud,test,web
+$ python3 scripts/cdist inventory list -b -t -a web all
+test.mycloud.net all,cloud,test,web
+web1.mycloud.net all,cloud,web
+web2.mycloud.net all,cloud,web
+$ python3 scripts/cdist inventory list -b -t web all
+test.mycloud.net all,cloud,test,web
+web1.mycloud.net all,cloud,web
+web2.mycloud.net all,cloud,web
+shell1.mycloud.net all,cloud,shell
+shell2.mycloud.net all,cloud,shell
+$ cd cdist/inventory
+$ ls -1
+shell1.mycloud.net
+shell2.mycloud.net
+test.mycloud.net
+web1.mycloud.net
+web2.mycloud.net
+$ ls -l
+total 20
+-rw-r--r--  1 darko  darko  16 Jun 24 12:43 shell1.mycloud.net
+-rw-r--r--  1 darko  darko  16 Jun 24 12:43 shell2.mycloud.net
+-rw-r--r--  1 darko  darko  19 Jun 24 12:43 test.mycloud.net
+-rw-r--r--  1 darko  darko  14 Jun 24 12:43 web1.mycloud.net
+-rw-r--r--  1 darko  darko  14 Jun 24 12:43 web2.mycloud.net
+$ cat test.mycloud.net
+test
+all
+web
+cloud
+$ cat web2.mycloud.net
+all
+web
+cloud
+
+
+

For more info about inventory commands and options see cdist(1).

+
+
+

20.7. Using external inventory

+

cdist can be used with any external inventory where external inventory is +some storage or database from which you can get a list of hosts to configure. +cdist can then be fed with this list of hosts through stdin or file using +-f option. For example, if your host list is stored in sqlite3 database +hosts.db and you want to select hosts which purpose is django then you +can use it with cdist like:

+
$ sqlite3 hosts.db "select hostname from hosts where purpose = 'django';" | cdist config
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-manifest.html b/src/extra/manual/6.7.0/cdist-manifest.html new file mode 100644 index 00000000..ec441b6f --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-manifest.html @@ -0,0 +1,567 @@ + + + + + + + + + + + 14. Manifest — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

14. Manifest

+
+

14.1. Description

+

Manifests are used to define which objects to create. +Objects are instances of types, like in object oriented programming languages. +An object is represented by the combination of +type + slash + object name: __file/etc/cdist-configured is an +object of the type __file with the name etc/cdist-configured.

+

All available types can be found in the cdist/conf/type/ directory, +use ls cdist/conf/type to get the list of available types. If you have +setup the MANPATH correctly, you can use man cdist-reference to access +the reference with pointers to the manpages.

+

Types in manifests are used like normal command line tools. Let's have a look +at an example:

+
# Create object of type __package with the parameter state = absent
+__package apache2 --state absent
+
+# Same with the __directory type
+__directory /tmp/cdist --state present
+
+
+

These two lines create objects, which will later be used to realise the +configuration on the target host.

+

Manifests are executed locally as a shell script using /bin/sh -e. +The resulting objects are stored in an internal database.

+

The same object can be redefined in multiple different manifests as long as +the parameters are exactly the same.

+

In general, manifests are used to define which types are used depending +on given conditions.

+
+
+

14.2. Initial and type manifests

+

Cdist knows about two types of manifests: The initial manifest and type +manifests. The initial manifest is used to define, which configurations +to apply to which hosts. The type manifests are used to create objects +from types. More about manifests in types can be found in cdist type.

+
+
+

14.3. Define state in the initial manifest

+

The initial manifest is the entry point for cdist to find out, which +objects to configure on the selected host. +Cdist expects the initial manifest at cdist/conf/manifest/init.

+

Within this initial manifest you define which objects should be +created on which host. To distinguish between hosts, you can use the +environment variable __target_host and/or __target_hostname and/or +__target_fqdn. Let's have a look at a simple example:

+
__cdistmarker
+
+case "$__target_host" in
+   localhost)
+        __directory /home/services/kvm-vm --parents yes
+   ;;
+esac
+
+
+

This manifest says: Independent of the host, always use the type +__cdistmarker, which creates the file /etc/cdist-configured, +with the timestamp as content. +The directory /home/services/kvm-vm, including all parent directories, +is only created on the host localhost.

+

As you can see, there is no magic involved, the manifest is simple shell code that +utilises cdist types. Every available type can be executed like a normal +command.

+
+
+

14.4. Splitting up the initial manifest

+

If you want to split up your initial manifest, you can create other shell +scripts in cdist/conf/manifest/ and include them in cdist/conf/manifest/init. +Cdist provides the environment variable __manifest to reference +the directory containing the initial manifest (see cdist reference).

+

The following example would include every file with a .sh suffix:

+
# Include *.sh
+for manifest in $__manifest/*.sh; do
+    # And source scripts into our shell environment
+    . "$manifest"
+done
+
+
+
+
+

14.5. Dependencies

+

If you want to describe that something requires something else, just +setup the variable "require" to contain the requirements. Multiple +requirements can be added white space separated.

+
 1 # No dependency
+ 2 __file /etc/cdist-configured
+ 3
+ 4 # Require above object
+ 5 require="__file/etc/cdist-configured" __link /tmp/cdist-testfile \
+ 6    --source /etc/cdist-configured  --type symbolic
+ 7
+ 8 # Require two objects
+ 9 require="__file/etc/cdist-configured __link/tmp/cdist-testfile" \
+10    __file /tmp/cdist-another-testfile
+
+
+

Above the "require" variable is only set for the command that is +immediately following it. Dependencies should always be declared that way.

+

On line 4 you can see that the instantiation of a type "__link" object needs +the object "__file/etc/cdist-configured" to be present, before it can proceed.

+

This also means that the "__link" command must make sure, that either +"__file/etc/cdist-configured" already is present, or, if it's not, it needs +to be created. The task of cdist is to make sure, that the dependency will be +resolved appropriately and thus "__file/etc/cdist-configured" be created +if necessary before "__link" proceeds (or to abort execution with an error).

+

If you really need to make all types depend on a common dependency, you can +export the "require" variable as well. But then, if you need to add extra +dependencies to a specific type, you have to make sure that you append these +to the globally already defined one.

+
# First of all, update the package index
+__package_update_index
+# Upgrade all the installed packages afterwards
+require="__package_update_index" __package_upgrade_all
+# Create a common dependency for all the next types so that they get to
+# be executed only after the package upgrade has finished
+export require="__package_upgrade_all"
+
+# Ensure that lighttpd is installed after we have upgraded all the packages
+__package lighttpd --state present
+# Ensure that munin is installed after lighttpd is present and after all
+# the packages are upgraded
+require="$require __package/lighttpd" __package munin --state present
+
+
+

All objects that are created in a type manifest are automatically required +from the type that is calling them. This is called "autorequirement" in +cdist jargon.

+

You can find a more in depth description of the flow execution of manifests +in cdist execution stages and of how types work in cdist type.

+
+
+

14.6. Create dependencies from execution order

+

You can tell cdist to execute all types in the order in which they are created +in the manifest by setting up the variable CDIST_ORDER_DEPENDENCY. +When cdist sees that this variable is setup, the current created object +automatically depends on the previously created object.

+

It essentially helps you to build up blocks of code that build upon each other +(like first creating the directory xyz than the file below the directory).

+

Read also about notes on CDIST_ORDER_DEPENDENCY.

+

In version 6.2.0 semantic CDIST_ORDER_DEPENDENCY is finally fixed and well defined.

+

CDIST_ORDER_DEPENDENCY defines type order dependency context. Order dependency context +starts when CDIST_ORDER_DEPENDENCY is set, and ends when it is unset. After each +manifest execution finishes, any existing order dependency context is automatically +unset. This ensures that CDIST_ORDER_DEPENDENCY is valid within the manifest where it +is used. When order dependency context is defined then cdist executes types in the +order in which they are created in the manifest inside order dependency context.

+

Sometimes the best way to see how something works is to see examples.

+

Suppose you have defined initial manifest:

+
__cycle1 cycle1
+export CDIST_ORDER_DEPENDENCY=1
+__cycle2 cycle2
+__cycle3 cycle3
+
+
+

with types __cycle1:

+
export CDIST_ORDER_DEPENDENCY=1
+__file /tmp/cycle11
+__file /tmp/cycle12
+__file /tmp/cycle13
+
+
+

__cycle2:

+
__file /tmp/cycle21
+export CDIST_ORDER_DEPENDENCY=1
+__file /tmp/cycle22
+__file /tmp/cycle23
+unset CDIST_ORDER_DEPENDENCY
+__file /tmp/cycle24
+
+
+

__cycle3:

+
__file /tmp/cycle31
+__file /tmp/cycle32
+export CDIST_ORDER_DEPENDENCY=1
+__file /tmp/cycle33
+__file /tmp/cycle34
+
+
+

For the above config, cdist results in the following expected dependency graph +(type __cycleX is shown as cX, __file/tmp/cycleXY is shown as fcXY):

+
c1---->fc11
+|      /\
+|       |
++----->fc12
+|      /\
+|       |
++----->fc13
+
+c2--+--->fc21
+/\  |
+|   |
+|   +----->fc22
+|   |      /\
+|   |       |
+|   +----->fc23
+|   |
+|   |
+|   +----->fc24
+|
+|
+c3---->fc31
+|
+|
++----->fc32
+|
+|
++----->fc33
+|      /\
+|       |
++----->fc34
+
+
+

Before version 6.2.0 the above configuration would result in cycle:

+
ERROR: 185.203.112.26: Cycle detected in object dependencies:
+__file/tmp/cycle11 -> __cycle3/cycle3 -> __cycle2/cycle2 -> __cycle1/cycle1 -> __file/tmp/cycle11!
+
+
+

The following manifest shows an example for order dependency contexts:

+
__file /tmp/fileA
+export CDIST_ORDER_DEPENDENCY=1
+__file /tmp/fileB
+__file /tmp/fileC
+__file /tmp/fileD
+unset CDIST_ORDER_DEPENDENCY
+__file /tmp/fileE
+__file /tmp/fileF
+export CDIST_ORDER_DEPENDENCY=1
+__file /tmp/fileG
+__file /tmp/fileH
+unset CDIST_ORDER_DEPENDENCY
+__file /tmp/fileI
+
+
+

This means:

+
    +
  • C depends on B

  • +
  • D depends on C

  • +
  • H depends on G

  • +
+

and there are no other dependencies from this manifest.

+
+
+

14.7. Overrides

+

In some special cases, you would like to create an already defined object +with different parameters. In normal situations this leads to an error in cdist. +If you wish, you can setup the environment variable CDIST_OVERRIDE +(any value or even empty is ok) to tell cdist, that this object override is +wanted and should be accepted. +ATTENTION: Only use this feature if you are 100% sure in which order +cdist encounters the affected objects, otherwise this results +in an undefined situation.

+

If CDIST_OVERRIDE and CDIST_ORDER_DEPENDENCY are set for an object, +CDIST_ORDER_DEPENDENCY will be ignored, because adding a dependency in case of +overrides would result in circular dependencies, which is an error.

+
+
+

14.8. Examples

+

The initial manifest may for instance contain the following code:

+
# Always create this file, so other sysadmins know cdist is used.
+__file /etc/cdist-configured
+
+case "$__target_host" in
+   my.server.name)
+      __directory /root/bin/
+      __file /etc/issue.net --source "$__manifest/issue.net
+   ;;
+esac
+
+
+

The manifest of the type "nologin" may look like this:

+
__file /etc/nologin --source "$__type/files/default.nologin"
+
+
+

This example makes use of dependencies:

+
# Ensure that lighttpd is installed
+__package lighttpd --state present
+# Ensure that munin makes use of lighttpd instead of the default webserver
+# package as decided by the package manager
+require="__package/lighttpd" __package munin --state present
+
+
+

How to override objects:

+
# for example in the initial manifest
+
+# create user account foobar with some hash for password
+__user foobar --password 'some_fancy_hash' --home /home/foobarexample
+
+# ... many statements and includes in the manifest later ...
+# somewhere in a conditionally sourced manifest
+# (e.g. for example only sourced if a special application is on the target host)
+
+# this leads to an error ...
+__user foobar --password 'some_other_hash'
+
+# this tells cdist, that you know that this is an override and should be accepted
+CDIST_OVERRIDE=yes __user foobar --password 'some_other_hash'
+# it's only an override, means the parameter --home is not touched
+# and stays at the original value of /home/foobarexample
+
+
+

Dependencies defined by execution order work as following:

+
# Tells cdist to execute all types in the order in which they are created ...
+export CDIST_ORDER_DEPENDENCY=on
+__sample_type 1
+require="__some_type_somewhere/id" __sample_type 2
+__example_type 23
+# Now this types are executed in the creation order until the variable is unset
+unset CDIST_ORDER_DEPENDENCY
+# all now following types cdist makes the order ..
+__not_in_order_type 42
+
+# how it works :
+# this lines above are translated to:
+__sample_type 1
+require="__some_type_somewhere/id __sample_type/1" __sample_type 2
+require="__sample_type/2" __example_type 23
+__not_in_order_type 42
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-messaging.html b/src/extra/manual/6.7.0/cdist-messaging.html new file mode 100644 index 00000000..a5f74cb0 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-messaging.html @@ -0,0 +1,322 @@ + + + + + + + + + + + 18. Messaging — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

18. Messaging

+
+

18.1. Description

+

cdist has a simple but powerful way of allowing communication between +the initial manifest and types as well as types and types.

+

Whenever execution is passed from cdist to one of the +scripts described below, cdist generate 2 new temporary files +and exports the environment variables __messages_in and +__messages_out to point to them.

+

Before handing over the control, the content of the global message +file is copied into the file referenced by $__messages_in.

+

After cdist gained control back, the content of the file referenced +by $__messages_out is appended to the global message file.

+

This way overwriting any of the two files by accident does not +interfere with other types.

+

The order of execution is not defined unless you create dependencies +between the different objects (see cdist manifest) and thus you +can only react reliably on messages by objects that you depend on.

+
+
+

18.2. Availability

+

Messaging is possible between all local scripts:

+
    +
  • initial manifest

  • +
  • type/manifest

  • +
  • type/gencode-local

  • +
  • type/gencode-remote

  • +
+
+
+

18.3. Examples

+

When you want to emit a message use:

+
echo "something" >> "$__messages_out"
+
+
+

When you want to react on a message use:

+
if grep -q "^__your_type/object/id:something" "$__messages_in"; then
+    echo "I do something else"
+fi
+
+
+

Some real life examples:

+
# Reacting on changes from block for keepalive
+if grep -q "^__block/keepalive-vrrp" "$__messages_in"; then
+    echo /etc/init.d/keepalived restart
+fi
+
+# Reacting on changes of configuration files
+if grep -q "^__file/etc/one" $__messages_in; then
+    echo 'for init in /etc/init.d/opennebula*; do $init restart; done'
+fi
+
+
+

Restart sshd on changes

+
os="$(cat "$__global/explorer/os")"
+
+case "$os" in
+    centos|redhat|suse)
+        restart="/etc/init.d/sshd restart"
+    ;;
+    debian|ubuntu)
+        restart="/etc/init.d/ssh restart"
+    ;;
+    *)
+        cat << eof >&2
+Unsupported os $os.
+If you would like to have this type running on $os,
+you can either develop the changes and send a pull
+request or ask for a quote at www.ungleich.ch
+eof
+        exit 1
+    ;;
+esac
+
+if grep -q "^__key_value/PermitRootLogin" "$__messages_in"; then
+    echo $restart
+fi
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-os.html b/src/extra/manual/6.7.0/cdist-os.html new file mode 100644 index 00000000..6ead4798 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-os.html @@ -0,0 +1,255 @@ + + + + + + + + + + + 3. Supported operating systems — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

3. Supported operating systems

+

cdist was tested or is know to run on at least

+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-parallelization.html b/src/extra/manual/6.7.0/cdist-parallelization.html new file mode 100644 index 00000000..21aa5880 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-parallelization.html @@ -0,0 +1,305 @@ + + + + + + + + + + + 19. Parallelization — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

19. Parallelization

+
+

19.1. Description

+

cdist has two modes of parallel operation.

+

One of them is to operate on each host in separate process. This is enabled +with -p/--parallel option.

+

The other way is to operate in parallel within one host where you specify +the number of jobs. This is enabled with -j/--jobs option where you +can specify the number of parallel jobs. By default, +multiprocessing.cpu_count() is used. For this mode global explorers, +object preparation and object run are supported.

+

You can, of course, use those two options together. This means that each host +will be processed by its own process. Within each process cdist will operate +using specified number of parallel jobs.

+

For more info on those options see cdist(1).

+
+
+

19.2. Examples

+
# Configure hosts read from file hosts.file in parallel
+$ cdist config -p -f hosts.file
+
+# Configure hosts read from file hosts.file sequentially but using default
+# number of parallel jobs
+$ cdist config -j -f hosts.file
+
+# Configure hosts read from file hosts.file in parallel using 16
+# parallel jobs
+$ cdist config -j 16 -p -f hosts.file
+
+
+
+
+

19.3. Caveats

+

When operating in parallel, either by operating in parallel for each host +(-p/--parallel) or by parallel jobs within a host (-j/--jobs), and depending +on target SSH server and its configuration you may encounter connection drops. +This is controlled with sshd :strong:MaxStartups configuration options. +You may also encounter session open refusal. This happens with ssh multiplexing +when you reach maximum number of open sessions permitted per network +connection. In this case ssh will disable multiplexing. +This limit is controlled with sshd :strong:MaxSessions configuration +options. For more details refer to sshd_config(5).

+

For example, if you reach MaxSessions sessions you may get the +following output:

+
$ cdist config -b -j 11 -v 78.47.116.244
+INFO: cdist: version 4.2.2-55-g640b7f9
+INFO: 78.47.116.244: Running global explorers
+INFO: 78.47.116.244: Remote transfer in 11 parallel jobs
+channel 22: open failed: administratively prohibited: open failed
+mux_client_request_session: session request failed: Session open refused by peer
+ControlSocket /tmp/tmpuah6fw_t/d886d4b7e4425a102a54bfaff4d2288b/ssh-control-path already exists, disabling multiplexing
+INFO: 78.47.116.244: Running global explorers in 11 parallel jobs
+channel 22: open failed: administratively prohibited: open failed
+mux_client_request_session: session request failed: Session open refused by peer
+ControlSocket /tmp/tmpuah6fw_t/d886d4b7e4425a102a54bfaff4d2288b/ssh-control-path already exists, disabling multiplexing
+INFO: 78.47.116.244: Running initial manifest /tmp/tmpuah6fw_t/d886d4b7e4425a102a54bfaff4d2288b/data/conf/manifest/init
+INFO: 78.47.116.244: Running manifest and explorers for __file/root/host.file
+INFO: 78.47.116.244: Generating code for __file/root/host.file
+INFO: 78.47.116.244: Finished successful run in 18.655028820037842 seconds
+INFO: cdist: Total processing time for 1 host(s): 19.159148693084717
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-preos.html b/src/extra/manual/6.7.0/cdist-preos.html new file mode 100644 index 00000000..29984906 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-preos.html @@ -0,0 +1,364 @@ + + + + + + + + + + + 21. PreOS — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

21. PreOS

+
+

21.1. Description

+

With cdist you can install and configure new machines. You can use cdist to +create PreOS, minimal OS whose purpose is to boot a new machine. +After PreOS is booted, the machine is ready for installing the desired OS and +afterwards it is ready for configuration.

+
+
+

21.2. PreOS creation

+

With cdist you can create PreOS. +Currently supported PreOS-es include:

+
    +
  • debian

  • +
  • ubuntu

  • +
  • devuan

  • +
+

PreOS is created using the cdist preos command. +This command has subcommands that determine the desired PreOS.

+

For example, to create an ubuntu PreOS:

+
$ cdist preos ubuntu /preos/preos-ubuntu -B -C \
+    -k ~/.ssh/id_rsa.pub -p /preos/pxe-ubuntu
+
+
+

For more info about the available options see the cdist manual page.

+

This will bootstrap (-B) ubuntu PreOS in the /preos/preos-ubuntu +directory, it will be configured (-C) using default the built-in initial +manifest and with specified ssh authorized key (-k). +After bootstrapping and configuration, the PXE boot directory will be +created (-p) in /preos/pxe-ubuntu.

+

After PreOS is created, new machines can be booted using the created PXE +(after proper dhcp and tftp settings).

+

Since PreOS is configured with ssh authorized key it can be accessed through +ssh, i.e. it can be further installed and configured with cdist.

+
+
+

21.3. Implementing a new PreOS sub-command

+

preos command is implemented as a plugin system. This plugin system scans for +preos subcommands in the cdist/preos/ distribution directory and also in +~/.cdist/preos/ directory if it exists.

+

preos subcommand is a module or a class that satisfies the following:

+
    +
  • it has the attribute _cdist_preos set to True

  • +
  • it defines a function/method commandline.

  • +
+

For a module-based preos subcommand, the commandline function accepts a +module object as its first argument and the list of command line +arguments (sys.argv[2:]).

+

For a class-based preos subcommand commandline method should be +static-method and must accept a class as its first argument and the +list of command line arguments (sys.argv[2:]).

+

If preos scanning finds a module/class that has _cdist_preos set +to True and a function/method commandline then this module/class is +registered to preos subcommands. The name of the command is set to _preos_name +attribute if defined in the module/class, defaulting to the module/class name in lowercase. +When a registered preos subcommand is specified, commandline +will be called with the first argument set to module/class and the second +argument set to sys.argv[2:].

+
+

21.3.1. Example of writing new dummy preos sub-command

+
+

21.3.1.1. Module-based preos:

+
    +
  1. Create directory ~/.cdist/preos/ if it does not exist

  2. +
  3. Create ~/.cdist/preos/netbsd.py with the following contents:

  4. +
+
_preos_name = 'netbsd'
+_cdist_preos = True
+
+def commandline(cls, args):
+    print("NetBSD PreOS: {}".format(args))
+
+
+

When you try to run this new preos you will get:

+
$ cdist preos -L
+Available PreOS-es:
+    - debian
+    - devuan
+    - netbsd
+    - ubuntu
+$ cdist preos netbsd
+NetBSD PreOS: []
+
+
+
+
+

21.3.1.2. Class based preos:

+
    +
  1. Create directory ~/.cdist/preos/ if it does not exist

  2. +
  3. Create ~/.cdist/preos/freebsd.py with the following contents:

  4. +
+
class FreeBSD(object):
+    _cdist_preos = True
+
+    @classmethod
+    def commandline(cls, args):
+        print("FreeBSD dummy preos: {}".format(args))
+
+
+

When you try to run this new preos you will get:

+
$ cdist preos -h
+Available PreOS-es:
+    - debian
+    - devuan
+    - freebsd
+    - ubuntu
+$ cdist preos freebsd
+FreeBSD dummy preos: []
+
+
+

In the commandline function/method you have all the freedom to actually create +a PreOS.

+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-quickstart.html b/src/extra/manual/6.7.0/cdist-quickstart.html new file mode 100644 index 00000000..44fba1a5 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-quickstart.html @@ -0,0 +1,307 @@ + + + + + + + + + + + 7. Quickstart — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

7. Quickstart

+

This tutorial is aimed at people learning cdist and shows +typical approaches as well as gives an easy start into +the world of configuration management.

+

For those who just want to configure a system with the +cdist configuration management and do not need (or want) +to understand everything.

+

This tutorial assumes you are configuring localhost, because +it is always available. Just replace localhost with your target +host for real life usage.

+

Cdist uses ssh for communication and transportation +and usually logs into the target host as the +root user. So you need to configure the ssh server +of the target host to allow root logins: Edit +the file /etc/ssh/sshd_config and add one of the following +lines:

+
# Allow login only via public key
+PermitRootLogin without-password
+
+# Allow login via password and public key
+PermitRootLogin yes
+
+
+

As cdist uses ssh intensively, it is recommended to setup authentication +with public keys:

+
# Generate pubkey pair as a normal user
+ssh-keygen
+
+# Copy pubkey over to target host
+ssh-copy-id root@localhost
+
+
+

Have a look at ssh-agent(1) and ssh-add(1) on how to cache the password for +your public key. Usually it looks like this:

+
# Start agent and export variables
+eval `ssh-agent`
+
+# Add keys (requires password for every identity file)
+ssh-add
+
+
+

At this point you should be able to ssh root@localhost without +re-entering the password. If something failed until here, ensure that +all steps went successfully and you have read and understood the +documentation.

+

As soon as you are able to login without password to localhost, +we can use cdist to configure it. You can copy and paste the following +code into your shell to get started and configure localhost:

+
# Get cdist
+git clone git@code.ungleich.ch:ungleich-public/cdist.git
+
+# Create manifest (maps configuration to host(s)
+cd cdist
+echo '__file /etc/cdist-configured' > cdist/conf/manifest/init
+
+# Configure localhost in verbose mode
+./bin/cdist config -v localhost
+
+# Find out that cdist created /etc/cdist-configured
+ls -l /etc/cdist-configured
+
+
+

Note: cdist/conf is configuration directory shipped with cdist distribution. +If exists, ~/.cdist, is also automatically used as cdist configuration +directory. So in the above example you could create ~/.cdist directory, +then ~/.cdist/manifest sub-directory and create init manifest +~/.cdist/manifest/init.

+

That's it, you've successfully used cdist to configure your first host! +Continue reading the next sections, to understand what you did and how +to create a more sophisticated configuration.

+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-real-world.html b/src/extra/manual/6.7.0/cdist-real-world.html new file mode 100644 index 00000000..44462ae7 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-real-world.html @@ -0,0 +1,809 @@ + + + + + + + + + + + 8. Dive into real world cdist — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

8. Dive into real world cdist

+
+

8.1. Introduction

+

This walkthrough shows real world cdist configuration example.

+

Sample target host is named test.ungleich.ch. +Just replace test.ungleich.ch with your target hostname.

+

Our goal is to configure python application hosting. For writing sample +application we will use Bottle WSGI micro web-framework. +It will use PostgreSQL database and it will list items from items table. +It will be served by uWSGI server. We will also use the Nginx web server +as a reverse proxy and we want HTTPS. +For HTTPS we will use Let's Encrypt certificate.

+

For setting up hosting we want to use cdist so we will write a new type +for that. This type will:

+
    +
  • install required packages

  • +
  • create OS user, user home directory and application home directory

  • +
  • create PostgreSQL database

  • +
  • configure uWSGI

  • +
  • configure Let's Encrypt certificate

  • +
  • configure nginx.

  • +
+

Our type will not create the actual python application. Its intention is only +to configure hosting for specified user and project. It is up to the user to +create his/her applications.

+

So let's start.

+
+
+

8.2. Creating type layout

+

We will create a new custom type. Let's call it __sample_bottle_hosting.

+

Go to ~/.cdist/type directory (create it if it does not exist) and create +new type layout:

+
cd ~/.cdist/type
+mkdir __sample_bottle_hosting
+cd __sample_bottle_hosting
+touch manifest gencode-remote
+mkdir parameter
+touch parameter/required
+
+
+
+
+

8.3. Creating __sample_bottle_hosting type parameters

+

Our type will be configurable through the means of parameters. Let's define +the following parameters:

+
+
projectname

name for the project, needed for uWSGI ini file

+
+
user

user name

+
+
domain

target host domain, needed for Let's Encrypt certificate.

+
+
+

We define parameters to make our type reusable for different projects, user and domain.

+

Define required parameters:

+
printf "projectname\n" >> parameter/required
+printf "user\n" >> parameter/required
+printf "domain\n" >> parameter/required
+
+
+

For details on type parameters see Defining parameters.

+
+
+

8.4. Creating __sample_bottle_hosting type manifest

+

Next step is to define manifest (~/.cdist/type/__sample_bottle_hosting/manifest). +We also want our type to currently support only Devuan. So we will start by +checking target host OS. We will use os +global explorer:

+
os=$(cat "$__global/explorer/os")
+
+case "$os" in
+    devuan)
+        :
+    ;;
+    *)
+        echo "OS $os currently not supported" >&2
+        exit 1
+    ;;
+esac
+
+
+

If target host OS is not Devuan then we print error message to stderr +and exit. For other OS-es support we should check and change package names +we should install, because packages differ in different OS-es and in different +OS distributions like GNU/Linux distributions. There can also be a different +configuration locations (e.g. nginx config directory could be in /usr/local tree). +If we detected unsupported OS we should error out. cdist will stop configuration +process and output error message.

+
+

8.4.1. Creating user and user directories

+

Then we create user and his/her home directory and application home directory. +We will use existing cdist types __user and __directory:

+
user="$(cat "$__object/parameter/user")"
+home="/home/$user"
+apphome="$home/app"
+
+# create user
+__user "$user" --home "$home" --shell /bin/bash
+# create user home dir
+require="__user/$user" __directory "$home" \
+    --owner "$user" --group "$user" --mode 0755
+# create app home dir
+require="__user/$user __directory/$home" __directory "$apphome" \
+    --state present --owner "$user" --group "$user" --mode 0755
+
+
+

First we define user, home and apphome variables. User is defined by type's +user parameter. Here we use require which is cdist's way to define dependencies. +User home directory should be created after user is created. And application +home directory is created after both user and user home directory are created. +For details on require see Dependencies.

+
+
+

8.4.2. Installing packages

+

Install required packages using existing __package type. +Before installing package we want to update apt package index using +__apt_update_index:

+
# define packages that need to be installed
+packages_to_install="nginx uwsgi-plugin-python3 python3-dev python3-pip postgresql postgresql-contrib libpq-dev python3-venv uwsgi python3-psycopg2"
+
+# update package index
+__apt_update_index
+# install packages
+for package in $packages_to_install
+    do require="__apt_update_index" __package $package --state=present
+done
+
+
+

Here we use shell for loop. It executes require="__apt_update_index" __package +for each member in a list we define in packages_to_install variable. +This is much nicer then having as many require="__apt_update_index" __package +lines as there are packages we want to install.

+

For python packages we use __package_pip:

+
# install pip3 packages
+for package in bottle bottle-pgsql; do
+    __package_pip --pip pip3 $package
+done
+
+
+
+
+

8.4.3. Creating PostgreSQL database

+

Create PostgreSQL database using __postgres_database +and __postgres_role for creating database user:

+
#PostgreSQL db & user
+postgres_server=postgresql
+
+# create PostgreSQL db user
+require="__package/postgresql" __postgres_role $user --login --createdb
+# create PostgreSQL db
+require="__postgres_role/$user __package/postgresql" __postgres_database $user \
+    --owner $user
+
+
+
+
+

8.4.4. Configuring uWSGI

+

Configure uWSGI using __file type:

+
# configure uWSGI
+projectname="$(cat "$__object/parameter/projectname")"
+require="__package/uwsgi" __file /etc/uwsgi/apps-enabled/$user.ini \
+            --owner root --group root --mode 0644 \
+            --state present \
+            --source - << EOF
+[uwsgi]
+socket = $apphome/uwsgi.sock
+chdir = $apphome
+wsgi-file = $projectname/wsgi.py
+touch-reload = $projectname/wsgi.py
+processes = 4
+threads = 2
+chmod-socket = 666
+daemonize=true
+vacuum = true
+uid = $user
+gid = $user
+EOF
+
+
+

We require package uWSGI present in order to create /etc/uwsgi/apps-enabled/$user.ini file. +Installation of uWSGI also creates configuration layout: /etc/uwsgi/apps-enabled. +If this directory does not exist then __file type would error. +We also use stdin as file content source. For details see Input from stdin. +For feeding stdin we use here-document (<< operator). It allows redirection of subsequent +lines read by the shell to the input of a command until a line containing only the delimiter +and a newline, with no blank characters in between (EOF in our case).

+
+
+

8.4.5. Configuring nginx for Let's Encrypt and HTTPS redirection

+

Next configure nginx for Let's Encrypt and for HTTP -> HTTPS redirection. For this +purpose we will create new type __sample_nginx_http_letsencrypt_and_ssl_redirect +and use it here:

+
domain="$(cat "$__object/parameter/domain")"
+webroot="/var/www/html"
+__sample_nginx_http_letsencrypt_and_ssl_redirect "$domain" --webroot "$webroot"
+
+
+
+
+

8.4.6. Configuring certificate creation

+

After HTTP nginx configuration we will create Let's Encrypt certificate using +__letsencrypt_cert type. +For Let's Encrypt cert configuration ensure that there is a DNS entry for your +domain. We assure that cert creation is applied after nginx HTTP is configured +for Let's Encrypt to work:

+
# create SSL cert
+require="__package/nginx __sample_nginx_http_letsencrypt_and_ssl_redirect/$domain" \
+    __letsencrypt_cert --admin-email admin@test.ungleich.ch \
+        --webroot "$webroot" \
+        --automatic-renewal \
+        --renew-hook "service nginx reload" \
+        --domain "$domain" \
+        "$domain"
+
+
+
+
+

8.4.7. Configuring nginx HTTPS server with uWSGI upstream

+

Then we can configure nginx HTTPS server that will use created Let's Encrypt certificate:

+
# configure nginx
+require="__package/nginx __letsencrypt_cert/$domain" \
+    __file "/etc/nginx/sites-enabled/https-$domain" \
+    --source - --mode 0644 << EOF
+upstream _bottle {
+    server unix:$apphome/uwsgi.sock;
+}
+
+server {
+    listen 443;
+    listen [::]:443;
+
+    server_name $domain;
+
+    access_log  /var/log/nginx/access.log;
+
+    ssl on;
+    ssl_certificate      /etc/letsencrypt/live/$domain/fullchain.pem;
+    ssl_certificate_key  /etc/letsencrypt/live/$domain/privkey.pem;
+
+    client_max_body_size 256m;
+
+    location / {
+        try_files \$uri @uwsgi;
+    }
+
+    location @uwsgi {
+        include uwsgi_params;
+        uwsgi_pass _bottle;
+    }
+}
+EOF
+
+
+

Now our manifest is finished.

+
+
+

8.4.8. Complete __sample_bottle_hosting type manifest listing

+

Here is complete __sample_bottle_hosting type manifest listing, +located in ~/.cdist/type/__sample_bottle_hosting/manifest:

+
#!/bin/sh
+
+os=$(cat "$__global/explorer/os")
+
+case "$os" in
+    devuan)
+        :
+    ;;
+    *)
+        echo "OS $os currently not supported" >&2
+        exit 1
+    ;;
+esac
+
+projectname="$(cat "$__object/parameter/projectname")"
+user="$(cat "$__object/parameter/user")"
+home="/home/$user"
+apphome="$home/app"
+domain="$(cat "$__object/parameter/domain")"
+
+# create user
+__user "$user" --home "$home" --shell /bin/bash
+# create user home dir
+require="__user/$user" __directory "$home" \
+    --owner "$user" --group "$user" --mode 0755
+# create app home dir
+require="__user/$user __directory/$home" __directory "$apphome" \
+    --state present --owner "$user" --group "$user" --mode 0755
+
+# define packages that need to be installed
+packages_to_install="nginx uwsgi-plugin-python3 python3-dev python3-pip postgresql postgresql-contrib libpq-dev python3-venv uwsgi python3-psycopg2"
+
+# update package index
+__apt_update_index
+# install packages
+for package in $packages_to_install
+    do require="__apt_update_index" __package $package --state=present
+done
+# install pip3 packages
+for package in bottle bottle-pgsql; do
+    __package_pip --pip pip3 $package
+done
+
+#PostgreSQL db & user
+postgres_server=postgresql
+
+# create PostgreSQL db user
+require="__package/postgresql" __postgres_role $user --login --createdb
+# create PostgreSQL db
+require="__postgres_role/$user __package/postgresql" __postgres_database $user \
+    --owner $user
+# configure uWSGI
+require="__package/uwsgi" __file /etc/uwsgi/apps-enabled/$user.ini \
+            --owner root --group root --mode 0644 \
+            --state present \
+            --source - << EOF
+[uwsgi]
+socket = $apphome/uwsgi.sock
+chdir = $apphome
+wsgi-file = $projectname/wsgi.py
+touch-reload = $projectname/wsgi.py
+processes = 4
+threads = 2
+chmod-socket = 666
+daemonize=true
+vacuum = true
+uid = $user
+gid = $user
+EOF
+
+# setup nginx HTTP for Let's Encrypt and SSL redirect
+domain="$(cat "$__object/parameter/domain")"
+webroot="/var/www/html"
+__sample_nginx_http_letsencrypt_and_ssl_redirect "$domain" --webroot "$webroot"
+
+# create SSL cert
+require="__package/nginx __sample_nginx_http_letsencrypt_and_ssl_redirect/$domain" \
+    __letsencrypt_cert --admin-email admin@test.ungleich.ch \
+        --webroot "$webroot" \
+        --automatic-renewal \
+        --renew-hook "service nginx reload" \
+        --domain "$domain" \
+        "$domain"
+
+# configure nginx
+require="__package/nginx __letsencrypt_cert/$domain" \
+    __file "/etc/nginx/sites-enabled/https-$domain" \
+    --source - --mode 0644 << EOF
+upstream _bottle {
+    server unix:$apphome/uwsgi.sock;
+}
+
+server {
+    listen 443;
+    listen [::]:443;
+
+    server_name $domain;
+
+    access_log  /var/log/nginx/access.log;
+
+    ssl on;
+    ssl_certificate      /etc/letsencrypt/live/$domain/fullchain.pem;
+    ssl_certificate_key  /etc/letsencrypt/live/$domain/privkey.pem;
+
+    client_max_body_size 256m;
+
+    location / {
+        try_files \$uri @uwsgi;
+    }
+
+    location @uwsgi {
+        include uwsgi_params;
+        uwsgi_pass _bottle;
+    }
+}
+EOF
+
+
+
+
+
+

8.5. Creating __sample_bottle_hosting type gencode-remote

+

Now define gencode-remote script: ~/.cdist/type/__sample_bottle_hosting/gencode-remote. +After manifest is applied it should restart uWSGI and nginx services so that our +configuration is active. Our gencode-remote looks like the following:

+
echo "service uwsgi restart"
+echo "service nginx restart"
+
+
+

Our __sample_bottle_hosting type is now finished.

+
+
+

8.6. Creating __sample_nginx_http_letsencrypt_and_ssl_redirect type

+

Let's now create __sample_nginx_http_letsencrypt_and_ssl_redirect type:

+
cd ~/.cdist/type
+mkdir __sample_nginx_http_letsencrypt_and_ssl_redirect
+cd __sample_nginx_http_letsencrypt_and_ssl_redirect
+mkdir parameter
+echo webroot > parameter/required
+touch manifest
+touch gencode-remote
+
+
+

Edit manifest:

+
domain="$__object_id"
+webroot="$(cat "$__object/parameter/webroot")"
+# make sure we have nginx package
+__package nginx
+# setup Let's Encrypt HTTP acme challenge, redirect HTTP to HTTPS
+require="__package/nginx" __file "/etc/nginx/sites-enabled/http-$domain" \
+    --source - --mode 0644 << EOF
+server {
+    listen *:80;
+    listen [::]:80;
+
+    server_name $domain;
+
+    # Let's Encrypt
+    location /.well-known/acme-challenge/ {
+        root $webroot;
+    }
+
+    # Everything else -> SSL
+    location / {
+        return 301 https://\$host\$request_uri;
+    }
+}
+
+EOF
+
+
+

Edit gencode-remote:

+
echo "service nginx reload"
+
+
+
+
+

8.7. Creating init manifest

+

Next create init manifest:

+
cd ~/.cdist/manifest
+printf "__sample_bottle_hosting --projectname sample --user app --domain \$__target_host sample\n" > sample
+
+
+

Using this init manifest our target host will be configured using our __sample_bottle_hosting +type with projectname sample, user app and domain equal to __target_host. +Here the last positional argument sample is type's object id. For details on +__target_host and __object_id see +Environment variables (for reading) +reference.

+
+
+

8.8. Configuring host

+

Finally configure test.ungleich.ch:

+
cdist config -v -i ~/.cdist/manifest/sample test.ungleich.ch
+
+
+

After cdist configuration is successfully finished our host is ready.

+
+
+

8.9. Creating python bottle application

+

We now need to create Bottle application. As you remember from the beginning +of this walkthrough our type does not create the actual python application, +its intention is only to configure hosting for specified user and project. +It is up to the user to create his/her applications.

+

Become app user:

+
su -l app
+
+
+
+

8.9.1. Preparing database

+

We need to prepare database for our application. Create table and +insert some items:

+
psql -c "create table items (item varchar(255));"
+
+psql -c "insert into items(item) values('spam');"
+psql -c "insert into items(item) values('eggs');"
+psql -c "insert into items(item) values('sausage');"
+
+
+
+
+

8.9.2. Creating application

+

Next create sample app:

+
cd /home/app/app
+mkdir sample
+cd sample
+
+
+

Create app.py with the following content:

+
#!/usr/bin/env python3
+
+import bottle
+import bottle_pgsql
+
+app = application = bottle.Bottle()
+plugin = bottle_pgsql.Plugin('dbname=app user=app password=')
+app.install(plugin)
+
+@app.route('/')
+def show_index(db):
+    db.execute('select * from items')
+    items = db.fetchall() or []
+    rv = '<html><body><h3>Items:</h3><ul>'
+    for item in items:
+        rv += '<li>' + str(item['item']) + '</li>'
+    rv += '</ul></body></html>'
+    return rv
+
+if __name__ == '__main__':
+    bottle.run(app=app, host='0.0.0.0', port=8080)
+
+
+

Create wsgi.py with the following content:

+
import os
+
+os.chdir(os.path.dirname(__file__))
+
+import app
+application = app.app
+
+
+

We have configured uWSGI with touch-reload = $projectname/wsgi.py so after +we have changed our wsgi.py file uWSGI reloads the application.

+

Our application selects and lists items from items table.

+
+
+

8.9.3. Opening application

+

Finally try the application:

+
http://test.ungleich.ch/
+
+
+

It should redirect to HTTPS and return:

+
+

Items:

+ +
    +
  • spam
  • +
  • eggs
  • +
  • sausage
  • +
+
+
+
+

8.10. What's next?

+

Continue reading next sections ;)

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-reference.html b/src/extra/manual/6.7.0/cdist-reference.html new file mode 100644 index 00000000..c8611b4d --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-reference.html @@ -0,0 +1,722 @@ + + + + + + + + + + + 23. Reference — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

23. Reference

+

Variable, path and type reference for cdist

+
+

23.1. Explorers

+

The following global explorers are available:

+
    +
  • cpu_cores

  • +
  • cpu_sockets

  • +
  • disks

  • +
  • hostname

  • +
  • init

  • +
  • interfaces

  • +
  • is-freebsd-jail

  • +
  • kernel_name

  • +
  • lsb_codename

  • +
  • lsb_description

  • +
  • lsb_id

  • +
  • lsb_release

  • +
  • machine

  • +
  • machine_type

  • +
  • memory

  • +
  • os

  • +
  • os_release

  • +
  • os_version

  • +
  • runlevel

  • +
+
+
+

23.2. Paths

+
+
$HOME/.cdist

The standard cdist configuration directory relative to your home directory. +This is usually the place you want to store your site specific configuration.

+
+
cdist/conf/

The distribution configuration directory. +This contains types and explorers to be used.

+
+
cdist/inventory/

The distribution inventory directory. +This path is relative to cdist installation directory.

+
+
cdist/preos/

The distribution PreOS plugins directory.

+
+
confdir

Cdist will use all available configuration directories and create +a temporary confdir containing links to the real configuration directories. +This way it is possible to merge configuration directories. +By default it consists of everything in $HOME/.cdist and cdist/conf/. +For more details see cdist(1).

+
+
confdir/files/

Cdist does not care about this directory besides providing access to it. +It is thought to be a general file storage area.

+
+
confdir/manifest/init

This is the central entry point. +It is an executable (+x bit set) shell script that can use +values from the explorers to decide which configuration to create +for the specified target host. +Its intent is to used to define mapping from configurations to hosts.

+
+
confdir/manifest/*

All other files in this directory are not directly used by cdist, but you +can separate configuration mappings, if you have a lot of code in the +conf/manifest/init file. This may also be helpful to have different admins +maintain different groups of hosts.

+
+
confdir/explorer/<name>

Contains explorers to be run on the target hosts, see cdist explorer.

+
+
confdir/type/

Contains all available types, which are used to provide +some kind of functionality. See cdist type.

+
+
confdir/type/<name>/

Home of the type <name>. +This directory is referenced by the variable __type (see below).

+
+
confdir/type/<name>/man.rst

Manpage in reStructuredText format (required for inclusion into upstream).

+
+
confdir/type/<name>/manifest

Used to generate additional objects from a type.

+
+
confdir/type/<name>/gencode-local

Used to generate code to be executed on the source host.

+
+
confdir/type/<name>/gencode-remote

Used to generate code to be executed on the target host.

+
+
confdir/type/<name>/parameter/required

Parameters required by type, n separated list.

+
+
confdir/type/<name>/parameter/optional

Parameters optionally accepted by type, n separated list.

+
+
confdir/type/<name>/parameter/default/*

Default values for optional parameters. +Assuming an optional parameter name of 'foo', it's default value would +be read from the file confdir/type/<name>/parameter/default/foo.

+
+
confdir/type/<name>/parameter/boolean

Boolean parameters accepted by type, n separated list.

+
+
confdir/type/<name>/explorer

Location of the type specific explorers. +This directory is referenced by the variable __type_explorer (see below). +See cdist explorer.

+
+
confdir/type/<name>/files

This directory is reserved for user data and will not be used +by cdist at any time. It can be used for storing supplementary +files (like scripts to act as a template or configuration files).

+
+
out/

This directory contains output of cdist and is usually located +in a temporary directory and thus will be removed after the run. +This directory is referenced by the variable __global (see below).

+
+
out/explorer

Output of general explorers.

+
+
out/object

Objects created for the host.

+
+
out/object/<object>

Contains all object specific information. +This directory is referenced by the variable __object (see below).

+
+
out/object/<object>/explorers

Output of type specific explorers, per object.

+
+
+
+
+

23.3. Types

+

The following types are available:

+ +
+
+

23.4. Objects

+

For object to object communication and tests, the following paths are +usable within a object directory:

+
+
files

This directory is reserved for user data and will not be used +by cdist at any time. It can be used freely by the type +(for instance to store template results).

+
+
changed

This empty file exists in an object directory, if the object has +code to be executed (either remote or local).

+
+
stdin

This file exists and contains data, if data was provided on stdin +when the type was called.

+
+
+
+
+

23.5. Environment variables (for reading)

+

The following environment variables are exported by cdist:

+
+
__cdist_log_level, __cdist_log_level_name

cdist log level value and cdist log level name. One of:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Log level name

Log level value

OFF

60

ERROR

40

WARNING

30

INFO

20

VERBOSE

15

DEBUG

10

TRACE

5

+

Available for: initial manifest, explorer, type manifest, type explorer, +type gencode.

+
+
__cdist_colored_log

whether or not cdist's log has colors enabled. +Is set to the string true if cdist's output is using colors, +otherwise the variable contains the string false.

+

Available for: initial manifest, explorer, type manifest, type explorer, +type gencode.

+
+
__cdist_dry_run

Is set only when doing dry run (-n flag).

+

Available for: initial manifest, explorer, type manifest, type explorer, +type gencode.

+
+
__explorer

Directory that contains all global explorers.

+

Available for: initial manifest, explorer, type explorer, shell.

+
+
__files

Directory that contains content from the "files" subdirectories +from the configuration directories.

+

Available for: initial manifest, type manifest, type gencode, shell.

+
+
__manifest

Directory that contains the initial manifest.

+

Available for: initial manifest, type manifest, shell.

+
+
__global

Directory that contains generic output like explorer.

+

Available for: initial manifest, type manifest, type gencode, shell.

+
+
__messages_in

File to read messages from.

+

Available for: initial manifest, type manifest, type gencode.

+
+
__messages_out

File to write messages.

+

Available for: initial manifest, type manifest, type gencode.

+
+
__object

Directory that contains the current object.

+

Available for: type manifest, type explorer, type gencode and code scripts.

+
+
__object_id

The type unique object id.

+

Available for: type manifest, type explorer, type gencode and code scripts.

+
+
Note: The leading and the trailing "/" will always be stripped (caused by +the filesystem database and ensured by the core).
+
Note: Double slashes ("//") will not be fixed and result in an error.
+
+
+
__object_name

The full qualified name of the current object.

+

Available for: type manifest, type explorer, type gencode.

+
+
__target_host

The host we are deploying to. This is primary variable. It's content is +literally the one user passed in.

+

Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell.

+
+
__target_hostname

The hostname of host we are deploying to. This variable is derived from +__target_host (using socket.getaddrinfo(__target_host) and then +socket.gethostbyaddr()).

+

Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell.

+
+
__target_fqdn

The fully qualified domain name of the host we are deploying to. +This variable is derived from __target_host +(using socket.getfqdn()).

+

Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell.

+
+
__target_host_tags

Comma separated list of target host tags.

+

Available for: explorer, initial manifest, type explorer, type manifest, type gencode, shell.

+
+
__type

Path to the current type.

+

Available for: type manifest, type gencode.

+
+
__type_explorer

Directory that contains the type explorers.

+

Available for: type explorer.

+
+
+
+
+

23.6. Environment variables (for writing)

+

The following environment variables influence the behaviour of cdist:

+
+
require

Setup dependencies between objects (see cdist manifest).

+
+
__cdist_log_level

cdist log level value. One of:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Log level

Log level value

OFF

60

ERROR

40

WARNING

30

INFO

20

VERBOSE

15

DEBUG

10

TRACE

5

+

If set cdist will set this log level in +accordance with configuration rules. If cdist invokation is used +in types then nested cdist will honor this specified log level if +not specified otherwise while invoking it.

+
+
CDIST_PATH

Colon delimited list of config directories.

+
+
CDIST_LOCAL_SHELL

Use this shell locally instead of /bin/sh to execute scripts.

+
+
CDIST_REMOTE_SHELL

Use this shell remotely instead of /bin/sh to execute scripts.

+
+
CDIST_OVERRIDE

Allow overwriting type parameters (see cdist manifest).

+
+
CDIST_ORDER_DEPENDENCY

Create dependencies based on the execution order (see cdist manifest). +Note that in version 6.2.0 semantic of this processing mode is finally fixed and well defined.

+
+
CDIST_REMOTE_EXEC

Use this command for remote execution (should behave like ssh).

+
+
CDIST_REMOTE_COPY

Use this command for remote copy (should behave like scp).

+
+
CDIST_INVENTORY_DIR

Use this directory as inventory directory.

+
+
CDIST_BETA

Enable beta functionalities.

+
+
CDIST_COLORED_OUTPUT

Colorize cdist's output. If enabled, cdist will use different colors for +different log levels. +Recognized values are 'always', 'never', and 'auto' (the default).

+
+
CDIST_CACHE_PATH_PATTERN

Custom cache path pattern.

+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-remote-exec-copy.html b/src/extra/manual/6.7.0/cdist-remote-exec-copy.html new file mode 100644 index 00000000..cb55bfe8 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-remote-exec-copy.html @@ -0,0 +1,261 @@ + + + + + + + + + + + 28. Remote exec and copy commands — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

28. Remote exec and copy commands

+

Cdist interacts with the target host in two ways:

+
    +
  • it executes code (__remote_exec)

  • +
  • and it copies files (__remote_copy)

  • +
+

By default this is accomplished with ssh and scp respectively. +The default implementations used by cdist are:

+
__remote_exec: ssh -o User=root
+__remote_copy: scp -o User=root
+
+
+

The user can override these defaults by providing custom implementations and +passing them to cdist with the --remote-exec and/or --remote-copy arguments.

+

For __remote_exec, the custom implementation must behave as if it where ssh. +For __remote_copy, it must behave like scp. +Please notice, custom implementations should work like ssh/scp so __remote_copy +must support IPv6 addresses enclosed in square brackets. For __remote_exec you +must take into account that for some options (like -L) IPv6 addresses can be +specified by enclosed in square brackets (see ssh(1) and +scp(1)).

+

With this simple interface the user can take total control of how cdist +interacts with the target when required, while the default implementation +remains as simple as possible.

+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-saving-output-streams.html b/src/extra/manual/6.7.0/cdist-saving-output-streams.html new file mode 100644 index 00000000..0111791a --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-saving-output-streams.html @@ -0,0 +1,320 @@ + + + + + + + + + + + 27. Saving output streams — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

27. Saving output streams

+
+

27.1. Description

+

Since version 4.8.0 cdist, by default, saves output streams to local cache. +Saving output streams is implemented because important information was lost +during a config run, hidden in all other output. +Now all created output is bound to the context where it was produced.

+

Saving output streams include stdout and stderr of init manifest, remote +commands and for each object stdout and stderr of manifest, gencode-* and code-*. +Output stream files are created only if some output is produced. For more info +on these cache files see Local cache overview.

+

Also, in case of an error, cdist can now exit and show all information it has +about the error.

+

For example:

+
$ ./bin/cdist config -v -i ~/.cdist/manifest/init-output-streams $(cat ~/ungleich/data/opennebula-debian9-test )
+INFO: 185.203.112.42: Starting configuration run
+INFO: 185.203.112.42: Processing __myline/test
+ERROR: 185.203.112.42: Command failed: '/bin/sh -e /tmp/tmpow6cwemh/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-kisrqlpw/code-local'
+return code: 1
+---- BEGIN stdout ----
+---- END stdout ----
+
+Error processing object '__myline/test'
+========================================
+name: __myline/test
+path: /tmp/tmpow6cwemh/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-kisrqlpw
+source: /home/darko/.cdist/manifest/init-output-streams
+type: /tmp/tmpow6cwemh/75ee6a79e32da093da23fe4a13dd104b/data/conf/type/__myline
+
+---- BEGIN manifest:stderr ----
+myline manifest stderr
+
+---- END manifest:stderr ----
+
+---- BEGIN gencode-remote:stderr ----
+test gencode-remote error
+
+---- END gencode-remote:stderr ----
+
+---- BEGIN code-local:stderr ----
+error
+
+---- END code-local:stderr ----
+
+ERROR: cdist: Failed to configure the following hosts: 185.203.112.42
+
+
+

Upon successful run execution state is saved to local cache and temporary +directory is removed. +In case of an error temporary directory is not removed and can be further +discovered.

+

There is also an option -S/--disable-saving-output-streams for +disabling saving output streams. In this case error reporting can look +like this:

+
$ ./bin/cdist config -v -S -i ~/.cdist/manifest/init-output-streams $(cat ~/ungleich/data/opennebula-debian9-test )
+INFO: 185.203.112.42: Starting configuration run
+test stdout output streams
+test stderr output streams
+myline manifest stdout
+myline manifest stderr
+test gencode-remote error
+INFO: 185.203.112.42: Processing __myline/test
+error
+ERROR: 185.203.112.42: Command failed: '/bin/sh -e /tmp/tmpzomy0wis/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-n566pqut/code-local'
+return code: 1
+---- BEGIN stdout ----
+---- END stdout ----
+
+Error processing object '__myline/test'
+========================================
+name: __myline/test
+path: /tmp/tmpzomy0wis/75ee6a79e32da093da23fe4a13dd104b/data/object/__myline/test/.cdist-n566pqut
+source: /home/darko/.cdist/manifest/init-output-streams
+type: /tmp/tmpzomy0wis/75ee6a79e32da093da23fe4a13dd104b/data/conf/type/__myline
+
+
+ERROR: cdist: Failed to configure the following hosts: 185.203.112.42
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-stages.html b/src/extra/manual/6.7.0/cdist-stages.html new file mode 100644 index 00000000..8f40b97d --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-stages.html @@ -0,0 +1,307 @@ + + + + + + + + + + + 25. Execution stages — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

25. Execution stages

+
+

25.1. Description

+

When cdist is started, it passes through different stages.

+
+
+

25.2. Stage 1: target information retrieval

+

In this stage information is collected about the target host using so called +explorers. Every existing explorer is run on the target and the output of all +explorers are copied back into the local cache. The results can be used by +manifests and types.

+
+
+

25.3. Stage 2: run the initial manifest

+

The initial manifest, which should be used for mappings of hosts to types, +is executed. This stage creates objects in a cconfig database that contains +the objects as defined in the manifest for the specific host. In this stage, +no conflicts may occur, i.e. no object of the same type with the same id may +be created, if it has different parameters.

+
+
+

25.4. Stage 3: object information retrieval

+

Every object is checked whether its type has explorers and if so, these are +executed on the target host. The results are transferred back +and can be used in the following stages to decide what changes need to be made +on the target to implement the desired state.

+
+
+

25.5. Stage 4: run the object manifest

+

Every object is checked whether its type has a executable manifest. The +manifest script may generate and change the created objects. In other words, +one type can reuse other types.

+

For instance the object __apache/www.example.org is of type __apache, which may +contain a manifest script, which creates new objects of type __file.

+

The newly created objects are merged back into the existing tree. No conflicts +may occur during the merge. A conflict would mean that two different objects +try to create the same object, which indicates a broken configuration.

+
+
+

25.6. Stage 5: code generation

+

In this stage for every created object its type is checked for executable +gencode scripts. The gencode scripts generate the code to be executed on the +target on stdout. If the gencode executables fail, they must print diagnostic +messages on stderr and exit non-zero.

+
+
+

25.7. Stage 6: code execution

+

For every object the resulting code from the previous stage is transferred to +the target host and executed there to apply the configuration changes.

+
+
+

25.8. Stage 7: cache

+

The cache stores the information from the current run for later use.

+
+
+

25.9. Summary

+

If, and only if, all the stages complete without errors, the configuration +will be applied to the target.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-support.html b/src/extra/manual/6.7.0/cdist-support.html new file mode 100644 index 00000000..afbbf510 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-support.html @@ -0,0 +1,265 @@ + + + + + + + + + + + 6. Support — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

6. Support

+
+

6.1. Chat

+

Chat with us on #cdist:ungleich.ch.

+
+
+

6.2. Mailing list

+

Bug reports, questions, patches, etc. should be send to the +cdist mailing list.

+
+
+

6.3. Linkedin

+

If you have an account +at Linked in, +you can join the +cdist group.

+
+
+

6.4. Commercial support

+

You can request commercial support for cdist from +ungleich.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-troubleshooting.html b/src/extra/manual/6.7.0/cdist-troubleshooting.html new file mode 100644 index 00000000..d4d4a694 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-troubleshooting.html @@ -0,0 +1,290 @@ + + + + + + + + + + + 30. Troubleshooting — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

30. Troubleshooting

+
+

30.1. Error in manifest is not considered an error by cdist

+

Situation: You are executing other scripts from a manifest. +This script fails, but cdist does not recognise the error. +An example script would be something like this:

+
% cat ~/.cdist/manifest/init
+"$__manifest/special"
+% cat ~/.cdist/manifest/special
+#!/bin/sh
+echo "Here is an unclean exiting script"
+somecommandthatdoesnotexist
+echo "I continue here although previous command failed"
+
+
+

We can clearly see that somecommandthatdoesnotexist +will fail in ~/.cdist/manifest/special. But as the custom +script is not called with the -e flag (exit on failure) of shell, +it does not lead to an error. And thus cdist sees the exit 0 +code of the last echo line instead of the failing command.

+

All scripts executed by cdist carry the -e flag. +To prevent the above from happening, there are three solutions available, +two of which can be used in the calling script:

+
# Execute as before, but abort on failure
+sh -e "$__manifest/special"
+
+# Source the script in our namespace, runs in a set -e environment:
+. "$__manifest/special"
+
+
+

The third solution is to include a shebang header in every script +you write to use the -e flag:

+
% cat ~/.cdist/manifest/special
+#!/bin/sh -e
+...
+
+
+
+
+

30.2. Using debug dump helper script

+

Since cdist stores data to local cache that can be used for debugging there +is a helper script that dumps data from local cache, +cdist-dump.

+

For more info see:

+
cdist-dump -h
+
+
+

Or from cdist git cloned directory:

+
./scripts/cdist-dump -h
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-type.html b/src/extra/manual/6.7.0/cdist-type.html new file mode 100644 index 00000000..0e5bba76 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-type.html @@ -0,0 +1,719 @@ + + + + + + + + + + + 15. cdist type — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

15. cdist type

+
+

15.1. Description

+

Types are the main component of cdist and define functionality. If you +use cdist, you'll write a type for every functionality you would like +to use.

+
+
+

15.2. Synopsis

+
__TYPE ID --parameter value [--parameter value ...]
+__TYPE --parameter value [--parameter value ...] (for singletons)
+
+
+
+
+

15.3. How to use a type

+

You can use types from the initial manifest or the type manifest like a +normal shell command:

+
# Creates empty file /etc/cdist-configured
+__file /etc/cdist-configured --type file
+
+# Ensure tree is installed
+__package tree --state installed
+
+
+

A list of supported types can be found in the cdist reference manpage.

+
+
+

15.4. Singleton types

+

If a type is flagged as a singleton, it may be used only +once per host. This is useful for types which can be used only once on a +system. Singleton types do not take an object name as argument.

+

Example:

+
# __issue type manages /etc/issue
+__issue
+
+# Probably your own type - singletons may use parameters
+__myfancysingleton --colour green
+
+
+
+
+

15.5. Config types

+

By default types are used with config command. These are types that are not +flagged by any known command flag. If a type is marked then it will be skipped +with config command.

+
+
+

15.6. Install types

+

If a type is flagged with 'install' flag then it is used only with install command. +With other commands, i.e. config, these types are skipped if used.

+
+
+

15.7. Nonparallel types

+

If a type is flagged with 'nonparallel' flag then its objects cannot be run in parallel +when using -j option. Example of such a type is __package_dpkg type where dpkg itself +prevents to be run in more than one instance.

+
+
+

15.8. Deprecated types

+

If a type is flagged with 'deprecated' marker then it is considered deprecated. +When it is used cdist writes warning line. If 'deprecated' marker has content +then this content is printed as a deprecation messages, e.g.:

+
$ ls -l deprecated
+-rw-r--r--  1 darko  darko  71 May 20 18:30 deprecated
+$ cat deprecated
+This type is deprecated. It will be removed in the next minor release.
+$ echo '__foo foo' | ./bin/cdist config -i - 185.203.112.26
+WARNING: 185.203.112.26: Type __foo is deprecated: This type is deprecated. It will be removed in the next minor release.
+
+
+

If 'deprecated' marker has no content then general message is printed, e.g.:

+
$ ls -l deprecated
+-rw-r--r--  1 darko  darko  0 May 20 18:36 deprecated
+$ echo '__bar foo' | ./bin/cdist config -i - 185.203.112.26
+WARNING: 185.203.112.26: Type __bar is deprecated.
+
+
+
+
+

15.9. How to write a new type

+

A type consists of

+
    +
  • parameter (optional)

  • +
  • manifest (optional)

  • +
  • singleton (optional)

  • +
  • explorer (optional)

  • +
  • gencode (optional)

  • +
  • nonparallel (optional)

  • +
+

Types are stored below cdist/conf/type/. Their name should always be prefixed with +two underscores (__) to prevent collisions with other executables in $PATH.

+

To implement a new type, create the directory cdist/conf/type/__NAME.

+

Type manifest and gencode can be written in any language. They just need to be +executable and have a proper shebang. If they are not executable then cdist assumes +they are written in shell so they are executed using '/bin/sh -e' or 'CDIST_LOCAL_SHELL'.

+

For executable shell code it is suggested that shebang is '#!/bin/sh -e'.

+

For creating type skeleton you can use helper script +cdist-new-type.

+
+
+

15.10. Defining parameters

+

Every type consists of required, optional and boolean parameters, which must +each be declared in a newline separated file in parameter/required, +parameter/required_multiple, parameter/optional, +parameter/optional_multiple and parameter/boolean. +Parameters which are allowed multiple times should be listed in +required_multiple or optional_multiple respectively. All other parameters +follow the standard unix behaviour "the last given wins". +If either is missing, the type will have no required, no optional, no boolean +or no parameters at all.

+

Default values for optional parameters can be predefined in +parameter/default/<name>.

+

Example:

+
echo servername >> cdist/conf/type/__nginx_vhost/parameter/required
+echo logdirectory >> cdist/conf/type/__nginx_vhost/parameter/optional
+echo loglevel >> cdist/conf/type/__nginx_vhost/parameter/optional
+mkdir cdist/conf/type/__nginx_vhost/parameter/default
+echo warning > cdist/conf/type/__nginx_vhost/parameter/default/loglevel
+echo server_alias >> cdist/conf/type/__nginx_vhost/parameter/optional_multiple
+echo use_ssl >> cdist/conf/type/__nginx_vhost/parameter/boolean
+
+
+
+
+

15.11. Using parameters

+

The parameters given to a type can be accessed and used in all type scripts +(e.g manifest, gencode, explorer). Note that boolean parameters are +represented by file existence. File exists -> True, +file does not exist -> False

+

Example: (e.g. in cdist/conf/type/__nginx_vhost/manifest)

+
# required parameter
+servername="$(cat "$__object/parameter/servername")"
+
+# optional parameter
+if [ -f "$__object/parameter/logdirectory" ]; then
+   logdirectory="$(cat "$__object/parameter/logdirectory")"
+fi
+
+# optional parameter with predefined default
+loglevel="$(cat "$__object/parameter/loglevel")"
+
+# boolean parameter
+if [ -f "$__object/parameter/use_ssl" ]; then
+   # file exists -> True
+   # do some fancy ssl stuff
+fi
+
+# parameter with multiple values
+if [ -f "$__object/parameter/server_alias" ]; then
+   for alias in $(cat "$__object/parameter/server_alias"); do
+      echo $alias > /some/where/useful
+   done
+fi
+
+
+
+
+

15.12. Deprecated parameters

+

To deprecate type parameters one can declare a file for each deprecated +parameter under parameter/deprecated directory.

+

When such parameter is used cdist writes warning line with deprecation message. +If such file has content then this content is printed as deprecation message. +If there is no content then generic parameter deprecation message is printed.

+

Example:

+
$ ls parameter/deprecated/
+eggs    spam
+$ cat parameter/deprecated/eggs
+eggs parameter is deprecated, please use multiple egg parameter.
+$ cat parameter/deprecated/spam
+$ echo '__foo foo --foo foo --eggs eggs' | ./bin/cdist config -i - 185.203.112.26
+WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated: eggs parameter is deprecated, please use multiple egg parameter.
+$ echo '__foo foo --foo foo --eggs eggs --spam spam' | ./bin/cdist config -i - 185.203.112.26
+WARNING: 185.203.112.26: spam parameter of type __foo is deprecated.
+WARNING: 185.203.112.26: eggs parameter of type __foo is deprecated: eggs parameter is deprecated, please use multiple egg parameter.
+
+
+
+
+

15.13. Input from stdin

+

Every type can access what has been written on stdin when it has been called. +The result is saved into the stdin file in the object directory.

+

Example use of a type: (e.g. in cdist/conf/type/__archlinux_hostname)

+
__file /etc/rc.conf --source - << eof
+...
+HOSTNAME="$__target_host"
+...
+eof
+
+
+

If you have not seen this syntax (<< eof) before, it may help you to read +about "here documents".

+

In the __file type, stdin is used as source for the file, if - is used for source:

+
if [ -f "$__object/parameter/source" ]; then
+    source="$(cat "$__object/parameter/source")"
+    if [ "$source" = "-" ]; then
+        source="$__object/stdin"
+    fi
+....
+
+
+
+

15.13.1. Stdin inside a loop

+

Since cdist saves type's stdin content in the object as $__object/stdin, +so it can be accessed in manifest and gencode-* scripts, this can lead to +unexpected behavior. For example, suppose you have some type with the following +in its manifest:

+
if [ -f "$__object/parameter/foo" ]
+then
+    while read -r l
+    do
+        __file "$l"
+        echo "$l" >&2
+    done < "$__object/parameter/foo"
+fi
+
+
+

and init manifest:

+
__foo foo --foo a --foo b --foo c
+
+
+

You expect that manifest stderr content is:

+
a
+b
+c
+
+
+

and that files a, b and c are created. But all you get in manifest stderr +is:

+
a
+
+
+

and only a file is created.

+

When redirecting parameter foo file content to while's stdin that means that all +commands in while body have this same stdin. So when __file type gets executed, +cdist saves its stdin which means it gets the remaining content of parameter foo +file, i.e.:

+
b
+c
+
+
+

The solution is to make sure that your types inside such loops get their stdin +from somewhere else, e.g. for the above problem __file type can get empty +stdin from /dev/null:

+
if [ -f "$__object/parameter/foo" ]
+then
+    while read -r l
+    do
+        __file "$l" < /dev/null
+        echo "$l" >&2
+    done < "$__object/parameter/foo"
+fi
+
+
+
+
+
+

15.14. Writing the manifest

+

In the manifest of a type you can use other types, so your type extends +their functionality. A good example is the __package type, which in +a shortened version looks like this:

+
os="$(cat "$__global/explorer/os")"
+case "$os" in
+      archlinux) type="pacman" ;;
+      debian|ubuntu) type="apt" ;;
+      gentoo) type="emerge" ;;
+      *)
+         echo "Don't know how to manage packages on: $os" >&2
+         exit 1
+      ;;
+esac
+
+__package_$type "$@"
+
+
+

As you can see, the type can reference different environment variables, +which are documented in cdist reference.

+

Always ensure the manifest is executable, otherwise cdist will not be able +to execute it. For more information about manifests see cdist manifest.

+
+
+

15.15. Singleton - one instance only

+

If you want to ensure that a type can only be used once per target, you can +mark it as a singleton: Just create the (empty) file "singleton" in your type +directory:

+
touch cdist/conf/type/__NAME/singleton
+
+
+

This will also change the way your type must be called:

+
__YOURTYPE --parameter value
+
+
+

As you can see, the object ID is omitted, because it does not make any sense, +if your type can be used only once.

+
+
+

15.16. Install - type with install command

+

If you want a type to be used with install command, you must mark it as +install: create the (empty) file "install" in your type directory:

+
touch cdist/conf/type/__install_NAME/install
+
+
+

With other commands, i.e. config, it will be skipped if used.

+
+
+

15.17. Nonparallel - only one instance can be run at a time

+

If objects of a type must not or cannot be run in parallel when using -j +option, you must mark it as nonparallel: create the (empty) file "nonparallel" +in your type directory:

+
touch cdist/conf/type/__NAME/nonparallel
+
+
+

For example, package types are nonparallel types.

+
+
+

15.18. The type explorers

+

If a type needs to explore specific details, it can provide type specific +explorers, which will be executed on the target for every created object.

+

The explorers are stored under the "explorer" directory below the type. +It could for instance contain code to check the md5sum of a file on the +client, like this (shortened version from the type __file):

+
if [ -f "$__object/parameter/destination" ]; then
+   destination="$(cat "$__object/parameter/destination")"
+else
+   destination="/$__object_id"
+fi
+
+if [ -e "$destination" ]; then
+   md5sum < "$destination"
+fi
+
+
+
+
+

15.19. Writing the gencode script

+

There are two gencode scripts: gencode-local and gencode-remote. +The output of gencode-local is executed locally, whereas +the output of gencode-remote is executed on the target. +The gencode scripts can make use of the parameters, the global explorers +and the type specific explorers.

+

If the gencode scripts encounters an error, it should print diagnostic +messages to stderr and exit non-zero. If you need to debug the gencode +script, you can write to stderr:

+
# Debug output to stderr
+echo "My fancy debug line" >&2
+
+# Output to be saved by cdist for execution on the target
+echo "touch /etc/cdist-configured"
+
+
+

Notice: if you use __remote_copy or __remote_exec directly in your scripts +then for IPv6 address with __remote_copy execution you should enclose IPv6 +address in square brackets. The same applies to __remote_exec if it behaves +the same as ssh for some options where colon is a delimiter, as for -L ssh +option (see ssh(1) and scp(1)).

+
+
+

15.20. Variable access from the generated scripts

+

In the generated scripts, you have access to the following cdist variables

+
    +
  • __object

  • +
  • __object_id

  • +
+

but only for read operations, means there is no back copy of this +files after the script execution.

+

So when you generate a script with the following content, it will work:

+
if [ -f "$__object/parameter/name" ]; then
+   name="$(cat "$__object/parameter/name")"
+else
+   name="$__object_id"
+fi
+
+
+
+
+

15.21. Environment variable usage idiom

+

In type scripts you can support environment variables with default values if +environment variable is unset or null by using ${parameter:-[word]} +parameter expansion.

+

Example using mktemp in a portable way that supports TMPDIR environment variable.

+
tempfile=$(mktemp "${TMPDIR:-/tmp}/cdist.XXXXXXXXXX")
+
+
+
+
+

15.22. Log level in types

+

cdist log level can be accessed from __cdist_log_level variable.One of:

+
+
++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Log level

Log level value

OFF

60

ERROR

40

WARNING

30

INFO

20

VERBOSE

15

DEBUG

10

TRACE

5

+
+

It is available for initial manifest, explorer, type manifest, +type explorer, type gencode.

+
+
+

15.23. Detecting dry run

+

If $__cdist_dry_run environment variable is set, then it's dry run.

+

It is available for initial manifest, explorer, type manifest, +type explorer, type gencode.

+
+
+

15.24. Hints for typewriters

+

It must be assumed that the target is pretty dumb and thus does not have high +level tools like ruby installed. If a type requires specific tools to be present +on the target, there must be another type that provides this tool and the first +type should create an object of the specific type.

+

If your type wants to save temporary data, that may be used by other types +later on (for instance __file), you can save them in the subdirectory +"files" below $__object (but you must create it yourself). +cdist will not touch this directory.

+

If your type contains static files, it's also recommended to place them in +a folder named "files" within the type (again, because cdist guarantees to +never ever touch this folder).

+
+
+

15.25. How to include a type into upstream cdist

+

If you think your type may be useful for others, ensure it works with the +current master branch of cdist and have a look at cdist hacking on +how to submit it.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-types.html b/src/extra/manual/6.7.0/cdist-types.html new file mode 100644 index 00000000..c8f9457b --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-types.html @@ -0,0 +1,566 @@ + + + + + + + + + + + 16. cdist types — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16. cdist types

+
+ +
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-upgrade.html b/src/extra/manual/6.7.0/cdist-upgrade.html new file mode 100644 index 00000000..85b4b01a --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-upgrade.html @@ -0,0 +1,432 @@ + + + + + + + + + + + 5. How to upgrade cdist — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

5. How to upgrade cdist

+
+

5.1. Update the git installation

+

To upgrade cdist in the current branch use

+
git pull
+
+# Also update the manpages
+make man
+export MANPATH=$MANPATH:$(pwd -P)/doc/man
+
+
+

If you stay on a version branch (i.e. 1.0, 1.1., ...), nothing should break. +The master branch on the other hand is the development branch and may not be +working, break your setup or eat the tree in your garden.

+
+

5.1.1. Safely upgrading to new versions

+

To upgrade to any further cdist version, you can take the +following procedure to do a safe upgrade:

+
# Create new branch to try out the update
+git checkout -b upgrade_cdist
+
+# Get latest cdist version in git database
+git fetch -v
+
+# see what will happen on merge - replace
+# master with the branch you plan to merge
+git diff upgrade_cdist..origin/master
+
+# Merge the new version
+git merge origin/master
+
+
+

Now you can ensure all custom types work with the new version. +Assume that you need to go back to an older version during +the migration/update, you can do so as follows:

+
# commit changes
+git commit -m ...
+
+# go back to original branch
+git checkout master
+
+
+

After that, you can go back and continue the upgrade:

+
# git checkout upgrade_cdist
+
+
+
+
+
+

5.2. Update the python package

+

To upgrade to the latest version do

+
pip install --upgrade cdist
+
+
+
+
+

5.3. General update instructions

+
+

5.3.1. Updating from 3.0 to 3.1

+

The type __ssh_authorized_keys now also manages existing keys, +not only the ones added by cdist.

+
+
+

5.3.2. Updating from 2.3 to 3.0

+

The changed attribute of objects has been removed. +Use messaging instead.

+
+
+

5.3.3. Updating from 2.2 to 2.3

+

No incompatibilities.

+
+
+

5.3.4. Updating from 2.1 to 2.2

+

Starting with 2.2, the syntax for requiring a singleton type changed: +Old format:

+
require="__singleton_type/singleton" ...
+
+
+

New format:

+
require="__singleton_type" ...
+
+
+

Internally the "singleton" object id was dropped to make life more easy. +You can probably fix your configuration by running the following code +snippet (currently untested, please report back if it works for you):

+
find ~/.cdist/* -type f -exec sed -i 's,/singleton,,' {} \;
+
+
+
+
+

5.3.5. Updating from 2.0 to 2.1

+

Have a look at the update guide for [[2.0 to 2.1|2.0-to-2.1]].

+
+
    +
  • Type __package* and __process use --state present or absent. +The states removed/installed and stopped/running have been removed. +Support for the new states is already present in 2.0.

  • +
  • Type __directory: Parameter --parents and --recursive are now boolean +The old "yes/no" values need to be removed.

  • +
  • Type __rvm_ruby: Parameter --default is now boolean +The old "yes/no" values need to be removed.

  • +
  • Type __rvm_gemset: Parameter --default is now boolean +The old "yes/no" values need to be removed.

  • +
  • Type __addifnosuchline and __removeline have been replaced by __line

  • +
  • The conf directory is now located at cdist/conf. +You need to migrate your types, explorers and manifests +manually to the new location.

  • +
  • Replace the variable __self by __object_name +Support for the variable __object_name is already present in 2.0.

  • +
  • The types __autofs, __autofs_map and __autofs_reload have been removed +(no maintainer, no users)

  • +
  • Type __user: Parameter --groups removed (use the new __user_groups type)

  • +
  • +
    Type __ssh_authorized_key has been replaced by more flexible type

    __ssh_authorized_keys

    +
    +
    +
  • +
+
+
+
+

5.3.6. Updating from 1.7 to 2.0

+
    +
  • Ensure python (>= 3.2) is installed on the source host

  • +
  • Use "cdist config host" instead of "cdist-deploy-to host"

  • +
  • Use "cdist config -p host1 host2" instead of "cdist-mass-deploy"

  • +
  • Use "cdist banner" for fun

  • +
  • Use __object_name instead of __self in manifests

  • +
+
+
+

5.3.7. Updating from 1.6 to 1.7

+
    +
  • If you used the global explorer hardware_type, you need to change +your code to use machine instead.

  • +
+
+
+

5.3.8. Updating from 1.5 to 1.6

+
    +
  • If you used __package_apt --preseed, you need to use the new +type __debconf_set_selections instead.

  • +
  • The __package types accepted either --state deinstalled or +--state uninstalled. Starting with 1.6, it was made consistently +to --state removed.

  • +
+
+
+

5.3.9. Updating from 1.3 to 1.5

+

No incompatibilities.

+
+
+

5.3.10. Updating from 1.2 to 1.3

+

Rename gencode of every type to gencode-remote.

+
+
+

5.3.11. Updating from 1.1 to 1.2

+

No incompatibilities.

+
+
+

5.3.12. Updating from 1.0 to 1.1

+

In 1.1 the type __file was split into __directory, __file and +__link. The parameter --type was removed from __file. Thus you +need to replace __file calls in your manifests:

+
+
    +
  • Remove --type from all __file calls

  • +
  • If type was symlink, use __link and --type symbolic

  • +
  • If type was directory, use __directory

  • +
+
+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/cdist-why.html b/src/extra/manual/6.7.0/cdist-why.html new file mode 100644 index 00000000..9c6d77e9 --- /dev/null +++ b/src/extra/manual/6.7.0/cdist-why.html @@ -0,0 +1,311 @@ + + + + + + + + + + + 1. Why should I use cdist? — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

1. Why should I use cdist?

+

There are several motivations to use cdist, these +are probably the most popular ones.

+
+

1.1. Known language

+

Cdist is being configured in +shell script. +Shell script is used by UNIX system engineers for decades. +So when cdist is introduced, your staff does not need to learn a new +DSL +or programming language.

+
+
+

1.2. Powerful language

+

Not only is shell scripting widely known by system engineers, +but it is also a very powerful language. Here are some features +which make daily work easy:

+
+
    +
  • Configuration can react dynamically on explored values

  • +
  • High level string manipulation (using sed, awk, grep)

  • +
  • Conditional support (if, case)

  • +
  • Loop support (for, while)

  • +
  • Support for dependencies between cdist types

  • +
+
+
+
+

1.3. More than shell scripting

+

If you compare regular shell scripting with cdist, there is one major +difference: When using cdist types, +the results are +idempotent. +In practise that means it does not matter in which order you +call cdist types, the result is always the same.

+
+
+

1.4. Zero dependency configuration management

+

Cdist requires very little on a target system. Even better, +in almost all cases all dependencies are usually fulfilled. +Cdist does not require an agent or high level programming +languages on the target host: it will run on any host that +has a ssh server running and a POSIX compatible shell +(/bin/sh). Compared to other configuration management systems, +it does not require to open up an additional port.

+
+
+

1.5. Push based distribution

+

Cdist uses the push based model for configuration. In this +scenario, one (or more) computers connect to the target hosts +and apply the configuration. That way the source host has +very little requirements: Cdist can even run on a sysadmin +notebook that is loosely connected to the network and has +limited amount of resources.

+

Furthermore, from a security point of view, only one machine +needs access to the target hosts. No target hosts will ever +need to connect back to the source host, which contains the +full configuration.

+
+
+

1.6. Highly scalable

+

If at some point you manage more hosts than can be handled from +a single source host, you can simply add more resources: Either +add more cores to one host or add hosts. +Cdist will utilise the given resources in parallel.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/genindex.html b/src/extra/manual/6.7.0/genindex.html new file mode 100644 index 00000000..e936978d --- /dev/null +++ b/src/extra/manual/6.7.0/genindex.html @@ -0,0 +1,229 @@ + + + + + + + + + + + + Index — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Index
  • + + +
  • + + + +
  • + +
+ + +
+
+
+
+ + +

Index

+ +
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/index.html b/src/extra/manual/6.7.0/index.html new file mode 100644 index 00000000..42f31c89 --- /dev/null +++ b/src/extra/manual/6.7.0/index.html @@ -0,0 +1,241 @@ + + + + + + + + + + + cdist - usable configuration management — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

cdist - usable configuration management

+

cdist is a usable configuration management system. +It adheres to the KISS principle and +is being used in small up to enterprise grade environments. +It natively supports IPv6 since the first release.

+
+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man1/cdist-dump.html b/src/extra/manual/6.7.0/man1/cdist-dump.html new file mode 100644 index 00000000..fdadef61 --- /dev/null +++ b/src/extra/manual/6.7.0/man1/cdist-dump.html @@ -0,0 +1,330 @@ + + + + + + + + + + + 10. cdist-dump(1) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

10. cdist-dump(1)

+
+

10.1. NAME

+

cdist-dump - Dump data from local cdist cache

+
+
+

10.2. SYNOPSIS

+
cdist-dump [options] [host...]
+
+
+
+
+

10.3. DESCRIPTION

+

cdist-dump is a helper script that dumps data from local cdist cache for +specified hosts. If host is not specified then all data from cache directory +is dumped. Default cache directory is '~/.cdist/cache'.

+

cdist-dump can be used for debugging existing types, host configuration and +new types.

+
+
+

10.4. OPTIONS

+
+
-a

dump all

+
+
-C CACHE-DIR

use specified CACHE-DIR (default: ~/.cdist/cache)

+
+
-c

dump code-*

+
+
-d DELIMITER

delimiter used for filename and line number prefix (default: ':')

+
+
-E

dump global explorers

+
+
-e

dump type explorers

+
+
-F

disable filename prefix (enabled by default)

+
+
-f

enable filename prefix (default)

+
+
-g

dump gencode-*

+
+
-h

show this help screen and exit

+
+
-L

disable line number prefix (default)

+
+
-l

enable line number prefix (disabled by default)

+
+
-m

dump messages

+
+
-o

dump executions' stdout

+
+
-p

dump parameters

+
+
-r

dump executions' stderr

+
+
-V

show version and exit

+
+
-v

increase verbosity

+
+
+
+
+

10.5. EXAMPLES

+
# Dump all
+% cdist-dump -a
+
+# Dump only code-* output
+% cdist-dump -c
+
+
+
+
+

10.6. SEE ALSO

+

cdist(1)

+
+
+

10.7. AUTHORS

+

Darko Poljak <darko.poljak--@--ungleich.ch>

+
+
+

10.8. COPYING

+

Copyright (C) 2019 Darko Poljak. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man1/cdist-new-type.html b/src/extra/manual/6.7.0/man1/cdist-new-type.html new file mode 100644 index 00000000..58cfdd7b --- /dev/null +++ b/src/extra/manual/6.7.0/man1/cdist-new-type.html @@ -0,0 +1,309 @@ + + + + + + + + + + + 11. cdist-new-type(1) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

11. cdist-new-type(1)

+
+

11.1. NAME

+

cdist-new-type - Create new type skeleton

+
+
+

11.2. SYNOPSIS

+
cdist-new-type TYPE-NAME AUTHOR-NAME AUTHOR-EMAIL [TYPE-BASE-PATH]
+
+
+
+
+

11.3. DESCRIPTION

+

cdist-new-type is a helper script that creates new type skeleton. +It is then up to the type author to finish the type.

+

It creates skeletons for the following files:

+
    +
  • man.rst

  • +
  • manifest

  • +
  • gencode-remote.

  • +
+

Upon creation it prints the path to the newly created type directory.

+
+
+

11.4. ARGUMENTS

+
+
TYPE-NAME

Name of the new type.

+
+
AUTHOR-NAME

Type author's full name.

+
+
AUTHOR-NAME

Type author's email.

+
+
TYPE-BASE-PATH

Path to the base directory of the type. If not set it defaults +to '$PWD/type'.

+
+
+
+
+

11.5. EXAMPLES

+
# Create new type __foo in ~/.cdist directory.
+$ cd ~/.cdist
+$ cdist-new-type '__foo' 'Foo Bar' 'foo.bar at foobar.org'
+/home/foo/.cdist/type/__foo
+
+
+
+
+

11.6. SEE ALSO

+

cdist(1)

+
+
+

11.7. AUTHORS

+
+ + +
+
+
+

11.8. COPYING

+

Copyright (C) 2019 Steven Armstrong, Darko Poljak. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man1/cdist.html b/src/extra/manual/6.7.0/man1/cdist.html new file mode 100644 index 00000000..9a80f144 --- /dev/null +++ b/src/extra/manual/6.7.0/man1/cdist.html @@ -0,0 +1,1108 @@ + + + + + + + + + + + 9. cdist(1) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

9. cdist(1)

+
+

9.1. NAME

+

cdist - Usable Configuration Management

+
+
+

9.2. SYNOPSIS

+
cdist [-h] [-V] {banner,config,install,inventory,preos,shell,info} ...
+
+cdist banner [-h] [-l LOGLEVEL] [-q] [-v]
+
+cdist config [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+             [-g CONFIG_FILE] [-4] [-6] [-C CACHE_PATH_PATTERN]
+             [-c CONF_DIR] [-i MANIFEST] [-j [JOBS]] [--log-server]
+             [-n] [-o OUT_PATH] [-P] [-R [{tar,tgz,tbz2,txz}]]
+             [-r REMOTE_OUT_PATH] [--remote-copy REMOTE_COPY]
+             [--remote-exec REMOTE_EXEC] [-S] [-I INVENTORY_DIR] [-A]
+             [-a] [-f HOSTFILE] [-p [HOST_MAX]] [-s] [-t]
+             [host [host ...]]
+
+cdist install [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+              [-g CONFIG_FILE] [-4] [-6] [-C CACHE_PATH_PATTERN]
+              [-c CONF_DIR] [-i MANIFEST] [-j [JOBS]] [--log-server]
+              [-n] [-o OUT_PATH] [-P] [-R [{tar,tgz,tbz2,txz}]]
+              [-r REMOTE_OUT_PATH] [--remote-copy REMOTE_COPY]
+              [--remote-exec REMOTE_EXEC] [-S] [-I INVENTORY_DIR] [-A]
+              [-a] [-f HOSTFILE] [-p [HOST_MAX]] [-s] [-t]
+              [host [host ...]]
+
+cdist inventory [-h] {add-host,add-tag,del-host,del-tag,list} ...
+
+cdist inventory add-host [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+                         [-g CONFIG_FILE] [-I INVENTORY_DIR] [-f HOSTFILE]
+                         [host [host ...]]
+
+cdist inventory add-tag [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+                        [-g CONFIG_FILE] [-I INVENTORY_DIR] [-f HOSTFILE]
+                        [-T TAGFILE] [-t TAGLIST]
+                        [host [host ...]]
+
+cdist inventory del-host [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+                         [-g CONFIG_FILE] [-I INVENTORY_DIR] [-a]
+                         [-f HOSTFILE]
+                         [host [host ...]]
+
+cdist inventory del-tag [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+                        [-g CONFIG_FILE] [-I INVENTORY_DIR] [-a]
+                        [-f HOSTFILE] [-T TAGFILE] [-t TAGLIST]
+                        [host [host ...]]
+
+cdist inventory list [-h] [-l LOGLEVEL] [-q] [-v] [-b] [--colors WHEN]
+                     [-g CONFIG_FILE] [-I INVENTORY_DIR] [-a] [-f HOSTFILE]
+                     [-H] [-t]
+                     [host [host ...]]
+
+cdist preos [-h] [-l LOGLEVEL] [-q] [-v] [-c CONF_DIR] [-g CONFIG_FILE] [-L]
+            [preos] ...
+
+cdist preos [preos-options] debian [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B]
+                                   [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC]
+                                   [-i MANIFEST] [-k KEYFILE ] [-m MIRROR]
+                                   [-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r]
+                                   [-S SCRIPT] [-s SUITE] [-y REMOTE_COPY]
+                                   target_dir
+
+cdist preos [preos-options] devuan [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B]
+                                   [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC]
+                                   [-i MANIFEST] [-k KEYFILE ] [-m MIRROR]
+                                   [-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r]
+                                   [-S SCRIPT] [-s SUITE] [-y REMOTE_COPY]
+                                   target_dir
+
+cdist preos [preos-options] ubuntu [-h] [-l LOGLEVEL] [-q] [-v] [-b] [-a ARCH] [-B]
+                                   [-C] [-c CDIST_PARAMS] [-D DRIVE] [-e REMOTE_EXEC]
+                                   [-i MANIFEST] [-k KEYFILE ] [-m MIRROR]
+                                   [-P ROOT_PASSWORD] [-p PXE_BOOT_DIR] [-r]
+                                   [-S SCRIPT] [-s SUITE] [-y REMOTE_COPY]
+                                   target_dir
+
+cdist shell [-h] [-l LOGLEVEL] [-q] [-v] [--colors WHEN] [-s SHELL]
+
+cdist info [-h] [-a] [-c CONF_DIR] [-e] [-F] [-f] [-g CONFIG_FILE] [-t]
+           [pattern]
+
+
+
+
+

9.3. DESCRIPTION

+

cdist is the frontend executable to the cdist configuration management. +It supports different subcommands as explained below.

+

It is written in Python so it requires python(1) to be installed. +It requires a minimal Python version 3.5.

+
+
+

9.4. GENERAL

+

All commands accept the following options:

+
+
-h, --help

Show the help screen.

+
+
--colors WHEN

Colorize cdist's output. If enabled, cdist will use different colors for +different log levels. +WHEN recognizes the values 'always', 'never', and 'auto' (the default).

+

If the value is 'auto', colored output is enabled if stdout is a TTY +unless the NO_COLOR (https://no-color.org/) environment variable is defined.

+
+
-l LOGLEVEL, --log-level LOGLEVEL

Set the specified verbosity level. The levels, in +order from the lowest to the highest, are: ERROR (-1), +WARNING (0), INFO (1), VERBOSE (2), DEBUG (3), TRACE (4 +or higher). If used along with -v then -v increases +last set value and -l overwrites last set value.

+
+
-q, --quiet

Quiet mode: disables logging, including WARNING and ERROR.

+
+
-v, --verbose

Increase the verbosity level. Every instance of -v +increments the verbosity level by one. Its default +value is 0 which includes ERROR and WARNING levels. +The levels, in order from the lowest to the highest, +are: ERROR (-1), WARNING (0), INFO (1), VERBOSE (2), +DEBUG (3), TRACE (4 or higher). If used along with -l +then -l overwrites last set value and -v increases +last set value.

+
+
-V, --version

Show version and exit.

+
+
+
+ +
+

9.6. CONFIG/INSTALL

+

Configure/install one or more hosts. +Install command is currently in beta.

+
+
-4, --force-ipv4

Force to use IPv4 addresses only. No influence for +custom remote commands.

+
+
-6, --force-ipv6

Force to use IPv6 addresses only. No influence for +custom remote commands.

+
+
-A, --all-tagged

Use all hosts present in tags db. Currently in beta.

+
+
-a, --all

List hosts that have all specified tags, if -t/--tag +is specified.

+
+
-b, --beta

Enable beta functionality.

+
+
-C CACHE_PATH_PATTERN, --cache-path-pattern CACHE_PATH_PATTERN

Specify custom cache path pattern. If it is not set then +default hostdir is used. For more info on format see +CACHE PATH PATTERN FORMAT below.

+
+
-c CONF_DIR, --conf-dir CONF_DIR

Add a configuration directory. Can be specified multiple times. +If configuration directories contain conflicting types, explorers or +manifests, then the last one found is used.

+
+
-f HOSTFILE, --file HOSTFILE

Read specified file for a list of additional hosts to operate on +or if '-' is given, read stdin (one host per line). +If no host or host file is specified then, by default, +read hosts from stdin. For the file format see +HOSTFILE FORMAT below.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-I INVENTORY_DIR, --inventory INVENTORY_DIR

Use specified custom inventory directory. Inventory +directory is set up by the following rules: if cdist +configuration resolves this value then specified +directory is used, if HOME env var is set then +~/.cdit/inventory is used, otherwise distribution +inventory directory is used.

+
+
-i MANIFEST, --initial-manifest MANIFEST

Path to a cdist manifest or - to read from stdin.

+
+
-j [JOBS], --jobs [JOBS]

Operate in parallel in specified maximum number of +jobs. Global explorers, object prepare and object run +are supported. Without argument CPU count is used by +default.

+
+
--log-server

Start a log server for sub processes to use. This is +mainly useful when running cdist nested from a code- +local script. Log server is always implicitly started +for 'install' command.

+
+
-n, --dry-run

Do not execute code.

+
+
-o OUT_PATH, --out-dir OUT_PATH

Directory to save cdist output in.

+
+
-P, --timestamp

Timestamp log messages with the current local date and time +in the format: YYYYMMDDHHMMSS.us.

+
+
-p [HOST_MAX], --parallel [HOST_MAX]

Operate on multiple hosts in parallel for specified +maximum hosts at a time. Without argument CPU count is +used by default.

+
+
-R [{tar,tgz,tbz2,txz}], --use-archiving [{tar,tgz,tbz2,txz}]

Operate by using archiving with compression where +appropriate. Supported values are: tar - tar archive, +tgz - gzip tar archive (the default), tbz2 - bzip2 tar +archive and txz - lzma tar archive. Currently in beta.

+
+
-r REMOTE_OUT_PATH, --remote-out-dir REMOTE_OUT_PATH

Directory to save cdist output in on the target host.

+
+
-S, --disable-saving-output-streams

Disable saving output streams.

+
+
-s, --sequential

Operate on multiple hosts sequentially (default).

+
+
--remote-copy REMOTE_COPY

Command to use for remote copy (should behave like scp).

+
+
--remote-exec REMOTE_EXEC

Command to use for remote execution (should behave like ssh).

+
+
-t, --tag

Host is specified by tag, not hostname/address; list +all hosts that contain any of specified tags. +Currently in beta.

+
+
+
+

9.6.1. HOSTFILE FORMAT

+

The HOSTFILE contains one host per line. +A comment is started with '#' and continues to the end of the line. +Any leading and trailing whitespace on a line is ignored. +Empty lines are ignored/skipped.

+

The Hostfile lines are processed as follows. First, all comments are +removed. Then all leading and trailing whitespace characters are stripped. +If such a line results in empty line it is ignored/skipped. Otherwise, +host string is used.

+
+
+

9.6.2. CACHE PATH PATTERN FORMAT

+

Cache path pattern specifies path for a cache directory subdirectory. +In the path, '%N' will be substituted by the target host, '%h' will +be substituted by the calculated host directory, '%P' will be substituted +by the current process id. All format codes that +python datetime.strftime() function supports, except +'%h', are supported. These date/time directives format cdist config/install +start time.

+

If empty pattern is specified then default calculated host directory +is used.

+

Calculated host directory is a hash of a host cdist operates on.

+

Resulting path is used to specify cache path subdirectory under which +current host cache data are saved.

+
+
+
+

9.7. INVENTORY

+

Manage inventory database. +Currently in beta with all sub-commands.

+
+
+

9.8. INVENTORY ADD-HOST

+

Add host(s) to inventory database.

+
+
host

Host(s) to add.

+
+
-b, --beta

Enable beta functionality.

+
+
-f HOSTFILE, --file HOSTFILE

Read additional hosts to add from specified file or +from stdin if '-' (each host on separate line). If no +host or host file is specified then, by default, read +from stdin. Hostfile format is the same as config hostfile format.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-I INVENTORY_DIR, --inventory INVENTORY_DIR

Use specified custom inventory directory. Inventory +directory is set up by the following rules: if cdist +configuration resolves this value then specified +directory is used, if HOME env var is set then +~/.cdit/inventory is used, otherwise distribution +inventory directory is used.

+
+
+
+
+

9.9. INVENTORY ADD-TAG

+

Add tag(s) to inventory database.

+
+
host

List of host(s) for which tags are added.

+
+
-b, --beta

Enable beta functionality.

+
+
-f HOSTFILE, --file HOSTFILE

Read additional hosts to add tags from specified file +or from stdin if '-' (each host on separate line). If +no host or host file is specified then, by default, +read from stdin. If no tags/tagfile nor hosts/hostfile +are specified then tags are read from stdin and are +added to all hosts. Hostfile format is the same as config hostfile format.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-I INVENTORY_DIR, --inventory INVENTORY_DIR

Use specified custom inventory directory. Inventory +directory is set up by the following rules: if cdist +configuration resolves this value then specified +directory is used, if HOME env var is set then +~/.cdit/inventory is used, otherwise distribution +inventory directory is used.

+
+
-T TAGFILE, --tag-file TAGFILE

Read additional tags to add from specified file or +from stdin if '-' (each tag on separate line). If no +tag or tag file is specified then, by default, read +from stdin. If no tags/tagfile nor hosts/hostfile are +specified then tags are read from stdin and are added +to all hosts. Tagfile format is the same as config hostfile format.

+
+
-t TAGLIST, --taglist TAGLIST

Tag list to be added for specified host(s), comma +separated values.

+
+
+
+
+

9.10. INVENTORY DEL-HOST

+

Delete host(s) from inventory database.

+
+
host

Host(s) to delete.

+
+
-a, --all

Delete all hosts.

+
+
-b, --beta

Enable beta functionality.

+
+
-f HOSTFILE, --file HOSTFILE

Read additional hosts to delete from specified file or +from stdin if '-' (each host on separate line). If no +host or host file is specified then, by default, read +from stdin. Hostfile format is the same as config hostfile format.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-I INVENTORY_DIR, --inventory INVENTORY_DIR

Use specified custom inventory directory. Inventory +directory is set up by the following rules: if cdist +configuration resolves this value then specified +directory is used, if HOME env var is set then +~/.cdit/inventory is used, otherwise distribution +inventory directory is used.

+
+
+
+
+

9.11. INVENTORY DEL-TAG

+

Delete tag(s) from inventory database.

+
+
host

List of host(s) for which tags are deleted.

+
+
-a, --all

Delete all tags for specified host(s).

+
+
-b, --beta

Enable beta functionality.

+
+
-f HOSTFILE, --file HOSTFILE

Read additional hosts to delete tags for from +specified file or from stdin if '-' (each host on +separate line). If no host or host file is specified +then, by default, read from stdin. If no tags/tagfile +nor hosts/hostfile are specified then tags are read +from stdin and are deleted from all hosts. Hostfile +format is the same as config hostfile format.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-I INVENTORY_DIR, --inventory INVENTORY_DIR

Use specified custom inventory directory. Inventory +directory is set up by the following rules: if cdist +configuration resolves this value then specified +directory is used, if HOME env var is set then +~/.cdit/inventory is used, otherwise distribution +inventory directory is used.

+
+
-T TAGFILE, --tag-file TAGFILE

Read additional tags from specified file or from stdin +if '-' (each tag on separate line). If no tag or tag +file is specified then, by default, read from stdin. +If no tags/tagfile nor hosts/hostfile are specified +then tags are read from stdin and are added to all +hosts. Tagfile format is the same as config hostfile format.

+
+
-t TAGLIST, --taglist TAGLIST

Tag list to be deleted for specified host(s), comma +separated values.

+
+
+
+
+

9.12. INVENTORY LIST

+

List inventory database.

+
+
host

Host(s) to list.

+
+
-a, --all

List hosts that have all specified tags, if -t/--tag +is specified.

+
+
-b, --beta

Enable beta functionality.

+
+
-f HOSTFILE, --file HOSTFILE

Read additional hosts to list from specified file or +from stdin if '-' (each host on separate line). If no +host or host file is specified then, by default, list +all. Hostfile format is the same as config hostfile format.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-H, --host-only

Suppress tags listing.

+
+
-I INVENTORY_DIR, --inventory INVENTORY_DIR

Use specified custom inventory directory. Inventory +directory is set up by the following rules: if cdist +configuration resolves this value then specified +directory is used, if HOME env var is set then +~/.cdit/inventory is used, otherwise distribution +inventory directory is used.

+
+
-t, --tag

Host is specified by tag, not hostname/address; list +all hosts that contain any of specified tags.

+
+
+
+
+

9.13. PREOS

+

Create PreOS.

+
+
-c CONF_DIR, --conf-dir CONF_DIR

Add configuration directory (one that contains "preos" subdirectory).

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-L, --list-preoses

List available PreOS-es.

+
+
+

Currently, the following PreOS-es are supported:

+
    +
  • debian

  • +
  • ubuntu

  • +
  • devuan

  • +
+
+
+

9.14. PREOS DEBIAN/DEVUAN

+
+
target_dir

target directory where PreOS will be bootstrapped

+
+
-a ARCH, --arch ARCH

target debootstrap architecture, by default 'amd64'

+
+
-B, --bootstrap

do bootstrap step

+
+
-b, --beta

Enable beta functionality.

+
+
-C, --configure

do configure step

+
+
-c CDIST_PARAMS, --cdist-params CDIST_PARAMS

parameters that will be passed to cdist config, by +default '-v' is used

+
+
-D DRIVE, --drive-boot DRIVE

create bootable PreOS on specified drive

+
+
-e REMOTE_EXEC, --remote-exec REMOTE_EXEC

remote exec that cdist config will use, by default +internal script is used

+
+
-i MANIFEST, --init-manifest MANIFEST

init manifest that cdist config will use, by default +internal init manifest is used

+
+
-k KEYFILE, --keyfile KEYFILE

ssh key files that will be added to cdist config; +'__ssh_authorized_keys root ...' type is appended to initial manifest

+
+
-m MIRROR, --mirror MIRROR

use specified mirror for debootstrap

+
+
-P ROOT_PASSWORD, --root-password ROOT_PASSWORD

Set specified password for root, generated by default

+
+
-p PXE_BOOT_DIR, --pxe-boot-dir PXE_BOOT_DIR

PXE boot directory

+
+
-r, --rm-bootstrap-dir

remove target directory after finishing

+
+
-S SCRIPT, --script SCRIPT

use specified script for debootstrap

+
+
-s SUITE, --suite SUITE

suite used for debootstrap, by default 'stable'

+
+
-y REMOTE_COPY, --remote-copy REMOTE_COPY

remote copy that cdist config will use, by default +internal script is used

+
+
+
+
+

9.15. PREOS UBUNTU

+
+
target_dir

target directory where PreOS will be bootstrapped

+
+
-a ARCH, --arch ARCH

target debootstrap architecture, by default 'amd64'

+
+
-B, --bootstrap

do bootstrap step

+
+
-b, --beta

Enable beta functionality.

+
+
-C, --configure

do configure step

+
+
-c CDIST_PARAMS, --cdist-params CDIST_PARAMS

parameters that will be passed to cdist config, by +default '-v' is used

+
+
-D DRIVE, --drive-boot DRIVE

create bootable PreOS on specified drive

+
+
-e REMOTE_EXEC, --remote-exec REMOTE_EXEC

remote exec that cdist config will use, by default +internal script is used

+
+
-i MANIFEST, --init-manifest MANIFEST

init manifest that cdist config will use, by default +internal init manifest is used

+
+
-k KEYFILE, --keyfile KEYFILE

ssh key files that will be added to cdist config; +'__ssh_authorized_keys root ...' type is appended to initial manifest

+
+
-m MIRROR, --mirror MIRROR

use specified mirror for debootstrap

+
+
-P ROOT_PASSWORD, --root-password ROOT_PASSWORD

Set specified password for root, generated by default

+
+
-p PXE_BOOT_DIR, --pxe-boot-dir PXE_BOOT_DIR

PXE boot directory

+
+
-r, --rm-bootstrap-dir

remove target directory after finishing

+
+
-S SCRIPT, --script SCRIPT

use specified script for debootstrap

+
+
-s SUITE, --suite SUITE

suite used for debootstrap, by default 'xenial'

+
+
-y REMOTE_COPY, --remote-copy REMOTE_COPY

remote copy that cdist config will use, by default +internal script is used

+
+
+
+
+

9.16. SHELL

+

This command allows you to spawn a shell that enables access +to the types as commands. It can be thought as an +"interactive manifest" environment. See below for example +usage. Its primary use is for debugging type parameters.

+
+
-s SHELL, --shell SHELL

Select shell to use, defaults to current shell. Used shell should +be POSIX compatible shell.

+
+
+
+
+

9.17. INFO

+

Display information for cdist (global explorers, types).

+
+
pattern

Glob pattern. If it contains special characters('?', '*', '[') then it is +used as specified, otherwise it is translated to *pattern*.

+
+
-h, --help

Show help message and exit.

+
+
-a, --all

Display all info. This is the default.

+
+
-c CONF_DIR, --conf-dir CONF_DIR

Add configuration directory (can be repeated).

+
+
-e, --global-explorers

Display info for global explorers.

+
+
-F, --fixed-string

Interpret pattern as a fixed string.

+
+
-f, --full

Display full details.

+
+
-g CONFIG_FILE, --config-file CONFIG_FILE

Use specified custom configuration file.

+
+
-t, --types

Display info for types.

+
+
+
+
+

9.18. CONFIGURATION

+

cdist obtains configuration data from the following sources in the following +order (from higher to lower precedence):

+
+
    +
  1. command-line options

  2. +
  3. configuration file specified at command-line

  4. +
  5. configuration file specified in CDIST_CONFIG_FILE environment variable

  6. +
  7. environment variables

  8. +
  9. user's configuration file (first one found of ~/.cdist.cfg, $XDG_CONFIG_HOME/cdist/cdist.cfg, in specified order)

  10. +
  11. system-wide configuration file (/etc/cdist.cfg).

  12. +
+
+
+

9.18.1. CONFIGURATION FILE FORMAT

+

cdist configuration file is in the INI file format. Currently it supports +only [GLOBAL] section. +The possible keywords and their meanings are as follows:

+
+
archiving

Use specified archiving. Valid values include: +'none', 'tar', 'tgz', 'tbz2' and 'txz'.

+
+
beta

Enable beta functionality. It recognizes boolean values from +'yes'/'no', 'on'/'off', 'true'/'false' and '1'/'0'.

+
+
cache_path_pattern

Specify cache path pattern.

+
+
colored_output

Colorize cdist's output. cf. the --colors option.

+
+
conf_dir

List of configuration directories separated with the character conventionally +used by the operating system to separate search path components (as in PATH), +such as ':' for POSIX or ';' for Windows. +If also specified at command line then values from command line are +appended to this value.

+
+
init_manifest

Specify default initial manifest.

+
+
inventory_dir

Specify inventory directory.

+
+
jobs

Specify number of jobs for parallel processing. If -1 then the default, +number of CPU's in the system is used. If 0 then parallel processing in +jobs is disabled. If set to positive number then specified maximum +number of processes will be used.

+
+
local_shell

Shell command used for local execution.

+
+
out_path

Directory to save cdist output in.

+
+
parallel

Process hosts in parallel. If -1 then the default, number of CPU's in +the system is used. If 0 then parallel processing of hosts is disabled. +If set to positive number then specified maximum number of processes +will be used.

+
+
remote_copy

Command to use for remote copy (should behave like scp).

+
+
remote_exec

Command to use for remote execution (should behave like ssh).

+
+
remote_out_path

Directory to save cdist output in on the target host.

+
+
remote_shell

Shell command at remote host used for remote execution.

+
+
save_output_streams

Enable/disable saving output streams (enabled by default). +It recognizes boolean values from 'yes'/'no', 'on'/'off', 'true'/'false' +and '1'/'0'.

+
+
timestamp

Timestamp log messages with the current local date and time +in the format: YYYYMMDDHHMMSS.us.

+
+
verbosity

Set verbosity level. Valid values are: +'ERROR', 'WARNING', 'INFO', 'VERBOSE', 'DEBUG', 'TRACE' and 'OFF'.

+
+
+
+
+
+

9.19. FILES

+
+
~/.cdist

Your personal cdist config directory. If exists it will be +automatically used.

+
+
~/.cdist/cache

Local cache directory.

+
+
~/.cdist/inventory

The home inventory directory. If ~/.cdist exists it will be used as +default inventory directory.

+
+
~/.cdist/preos

PreOS plugins directory, if existing.

+
+
cdist/conf

The distribution configuration directory. It contains official types and +explorers. This path is relative to cdist installation directory.

+
+
cdist/inventory

The distribution inventory directory. +This path is relative to cdist installation directory.

+
+
cdist/preos

The distribution PreOS plugins directory.

+
+
/etc/cdist.cfg

Global cdist configuration file, if exists.

+
+
~/.cdist.cfg or $XDG_CONFIG_HOME/cdist/cdist.cfg

Local cdist configuration file, if exists.

+
+
+
+
+

9.20. NOTES

+

cdist detects if host is specified by IPv6 address. If so then remote_copy +command is executed with host address enclosed in square brackets +(see scp(1)).

+
+
+

9.21. EXAMPLES

+
# Configure ikq05.ethz.ch with debug enabled
+% cdist config -vvv ikq05.ethz.ch
+
+# Configure hosts in parallel and use a different configuration directory
+% cdist config -c ~/p/cdist-nutzung \
+    -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch
+
+# Use custom remote exec / copy commands
+% cdist config --remote-exec /path/to/my/remote/exec \
+    --remote-copy /path/to/my/remote/copy \
+    -p ikq02.ethz.ch ikq03.ethz.ch ikq04.ethz.ch
+
+# Configure hosts read from file loadbalancers
+% cdist config -f loadbalancers
+
+# Configure hosts read from file web.hosts using 16 parallel jobs
+% cdist config -j 16 -f web.hosts
+
+# Display banner
+cdist banner
+
+# Show help
+% cdist --help
+
+# Show Version
+% cdist --version
+
+# Enter a shell that has access to emulated types
+% cdist shell
+% __git
+usage: __git --source SOURCE [--state STATE] [--branch BRANCH]
+             [--group GROUP] [--owner OWNER] [--mode MODE] object_id
+
+# Install ikq05.ethz.ch with debug enabled
+% cdist install -vvv ikq05.ethz.ch
+
+# List inventory content
+% cdist inventory list -b
+
+# List inventory for specified host localhost
+% cdist inventory list -b localhost
+
+# List inventory for specified tag loadbalancer
+% cdist inventory list -b -t loadbalancer
+
+# Add hosts to inventory
+% cdist inventory add-host -b web1 web2 web3
+
+# Delete hosts from file old-hosts from inventory
+% cdist inventory del-host -b -f old-hosts
+
+# Add tags to specified hosts
+% cdist inventory add-tag -b -t europe,croatia,web,static web1 web2
+
+# Add tag to all hosts in inventory
+% cdist inventory add-tag -b -t vm
+
+# Delete all tags from specified host
+% cdist inventory del-tag -b -a localhost
+
+# Delete tags read from stdin from hosts specified by file hosts
+% cdist inventory del-tag -b -T - -f hosts
+
+# Configure hosts from inventory with any of specified tags
+% cdist config -b -t web dynamic
+
+# Configure hosts from inventory with all specified tags
+% cdist config -b -t -a web dynamic
+
+# Configure all hosts from inventory db
+$ cdist config -b -A
+
+# Create default debian PreOS in debug mode
+$ cdist preos debian /preos/preos-debian -vvvv -C \
+    -k ~/.ssh/id_rsa.pub -p /preos/pxe-debian
+
+# Create ubuntu PreOS
+$ cdist preos ubuntu /preos/preos-ubuntu -C \
+    -k ~/.ssh/id_rsa.pub -p /preos/pxe-ubuntu
+
+# Create ubuntu PreOS on drive /dev/sdb
+# and set root password to 'password'.
+$ cdist preos ubuntu /mnt -B -C \
+    -k ~/.ssh/id_rsa.pub -D /dev/sdb \
+    -P password
+
+
+
+
+

9.22. ENVIRONMENT

+
+
TMPDIR, TEMP, TMP

Setup the base directory for the temporary directory. +See http://docs.python.org/py3k/library/tempfile.html for +more information. This is rather useful, if the standard +directory used does not allow executables.

+
+
CDIST_PATH

Colon delimited list of config directories.

+
+
CDIST_LOCAL_SHELL

Selects shell for local script execution, defaults to /bin/sh.

+
+
CDIST_REMOTE_SHELL

Selects shell for remote script execution, defaults to /bin/sh.

+
+
CDIST_OVERRIDE

Allow overwriting type parameters.

+
+
CDIST_ORDER_DEPENDENCY

Create dependencies based on the execution order. +Note that in version 6.2.0 semantic of this processing mode is +finally fixed and well defined.

+
+
CDIST_REMOTE_EXEC

Use this command for remote execution (should behave like ssh).

+
+
CDIST_REMOTE_COPY

Use this command for remote copy (should behave like scp).

+
+
CDIST_INVENTORY_DIR

Use this directory as inventory directory.

+
+
CDIST_BETA

Enable beta functionality.

+
+
CDIST_CACHE_PATH_PATTERN

Custom cache path pattern.

+
+
CDIST_COLORED_OUTPUT

Colorize cdist's output. cf. the --colors option.

+
+
CDIST_CONFIG_FILE

Custom configuration file.

+
+
+
+
+

9.23. EXIT STATUS

+

The following exit values shall be returned:

+

0 Successful completion.

+

1 One or more host configurations failed.

+
+
+

9.24. AUTHORS

+

Originally written by Nico Schottelius <nico-cdist--@--schottelius.org> +and Steven Armstrong <steven-cdist--@--armstrong.cc>.

+
+
+

9.25. CAVEATS

+

When operating in parallel, either by operating in parallel for each host +(-p/--parallel) or by parallel jobs within a host (-j/--jobs), and depending +on target SSH server and its configuration you may encounter connection drops. +This is controlled with sshd MaxStartups configuration options. +You may also encounter session open refusal. This happens with ssh multiplexing +when you reach maximum number of open sessions permitted per network +connection. In this case ssh will disable multiplexing. +This limit is controlled with sshd MaxSessions configuration +options. For more details refer to sshd_config(5).

+

When requirements for the same object are defined in different manifests (see +example below), for example, in init manifest and in some other type manifest +and those requirements differ then dependency resolver cannot detect +dependencies correctly. This happens because cdist cannot prepare all objects first +and run all objects afterwards. Some object can depend on the result of type +explorer(s) and explorers are executed during object run. cdist will detect +such case and display a warning message. An example of such a case:

+
init manifest:
+    __a a
+    require="__e/e" __b b
+    require="__f/f" __c c
+    __e e
+    __f f
+    require="__c/c" __d d
+    __g g
+    __h h
+
+type __g manifest:
+    require="__c/c __d/d" __a a
+
+Warning message:
+    WARNING: cdisttesthost: Object __a/a already exists with requirements:
+    /usr/home/darko/ungleich/cdist/cdist/test/config/fixtures/manifest/init-deps-resolver /tmp/tmp.cdist.test.ozagkg54/local/759547ff4356de6e3d9e08522b0d0807/data/conf/type/__g/manifest: set()
+    /tmp/tmp.cdist.test.ozagkg54/local/759547ff4356de6e3d9e08522b0d0807/data/conf/type/__g/manifest: {'__c/c', '__d/d'}
+    Dependency resolver could not handle dependencies as expected.
+
+
+
+
+

9.26. COPYING

+

Copyright (C) 2011-2020 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__acl.html b/src/extra/manual/6.7.0/man7/cdist-type__acl.html new file mode 100644 index 00000000..2bbb0c80 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__acl.html @@ -0,0 +1,514 @@ + + + + + + + + + + + 16.1. cdist-type__acl(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.1. cdist-type__acl(7)

+
+

16.1.1. NAME

+

cdist-type__acl - Set ACL entries

+
+
+

16.1.2. DESCRIPTION

+

Fully supported and tested on Linux (ext4 filesystem), partial support for FreeBSD.

+

See setfacl and acl manpages for more details.

+
+
+

16.1.3. REQUIRED MULTIPLE PARAMETERS

+
+
entry

Set ACL entry following getfacl output syntax.

+
+
+
+
+

16.1.4. OPTIONAL PARAMETERS

+
+
source

Read ACL entries from stdin or file. +Ordering of entries is not important. +When reading from file, comments and empty lines are ignored.

+
+
file

Create/change file with __file using user:group:mode pattern.

+
+
directory

Create/change directory with __directory using user:group:mode pattern.

+
+
+
+
+

16.1.5. BOOLEAN PARAMETERS

+
+
default

Set all ACL entries as default too. +Only directories can have default ACLs. +Setting default ACL in FreeBSD is currently not supported.

+
+
recursive

Make setfacl recursive (Linux only), but not getfacl in explorer.

+
+
remove

Remove undefined ACL entries. +mask and other entries can't be removed, but only changed.

+
+
+
+
+

16.1.6. DEPRECATED PARAMETERS

+

Parameters acl, user, group, mask and other are deprecated and they +will be removed in future versions. Please use entry parameter instead.

+
+
+

16.1.7. EXAMPLES

+
__acl /srv/project \
+    --default \
+    --recursive \
+    --remove \
+    --entry user:alice:rwx \
+    --entry user:bob:r-x \
+    --entry group:project-group:rwx \
+    --entry group:some-other-group:r-x \
+    --entry mask::r-x \
+    --entry other::r-x
+
+# give Alice read-only access to subdir,
+# but don't allow her to see parent content.
+
+__acl /srv/project2 \
+    --remove \
+    --entry default:group:secret-project:rwx \
+    --entry group:secret-project:rwx \
+    --entry user:alice:--x
+
+__acl /srv/project2/subdir \
+    --default \
+    --remove \
+    --entry group:secret-project:rwx \
+    --entry user:alice:r-x
+
+# read acl from stdin
+echo 'user:alice:rwx' \
+    | __acl /path/to/directory --source -
+
+# create/change directory too
+__acl /path/to/directory \
+    --default \
+    --remove \
+    --directory root:root:770 \
+    --entry user:nobody:rwx
+
+
+
+
+

16.1.8. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.1.9. COPYING

+

Copyright (C) 2018 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_default_release.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_default_release.html new file mode 100644 index 00000000..9c696f12 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_default_release.html @@ -0,0 +1,451 @@ + + + + + + + + + + + 16.2. cdist-type__apt_default_release(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.2. cdist-type__apt_default_release(7)

+
+

16.2.1. NAME

+

cdist-type__apt_default_release - Configure the default release for apt

+
+
+

16.2.2. DESCRIPTION

+

Configure the default release for apt, using the APT::Default-Release +configuration value.

+
+
+

16.2.3. REQUIRED PARAMETERS

+
+
release

The value to set APT::Default-Release to.

+

This can contain release name, codename or release version. Examples: +'stable', 'testing', 'unstable', 'stretch', 'buster', '4.0', '5.0*'.

+
+
+
+
+

16.2.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.2.5. EXAMPLES

+
__apt_default_release --release stretch
+
+
+
+
+

16.2.6. AUTHORS

+

Matthijs Kooijman <matthijs--@--stdin.nl>

+
+
+

16.2.7. COPYING

+

Copyright (C) 2017 Matthijs Kooijman. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_key.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_key.html new file mode 100644 index 00000000..2bd02cb9 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_key.html @@ -0,0 +1,473 @@ + + + + + + + + + + + 16.3. cdist-type__apt_key(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.3. cdist-type__apt_key(7)

+
+

16.3.1. NAME

+

cdist-type__apt_key - Manage the list of keys used by apt

+
+
+

16.3.2. DESCRIPTION

+

Manages the list of keys used by apt to authenticate packages.

+
+
+

16.3.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.3.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent'. Defaults to 'present'

+
+
keyid

the id of the key to add. Defaults to __object_id

+
+
keyserver

the keyserver from which to fetch the key. If omitted the default set +in ./parameter/default/keyserver is used.

+
+
keydir

key save location, defaults to /etc/apt/trusted.pgp.d

+
+
uri

the URI from which to download the key

+
+
+
+
+

16.3.5. EXAMPLES

+
# Add Ubuntu Archive Automatic Signing Key
+__apt_key 437D05B5
+# Same thing
+__apt_key 437D05B5 --state present
+# Get rid of it
+__apt_key 437D05B5 --state absent
+
+# same thing with human readable name and explicit keyid
+__apt_key UbuntuArchiveKey --keyid 437D05B5
+
+# same thing with other keyserver
+__apt_key UbuntuArchiveKey --keyid 437D05B5 --keyserver keyserver.ubuntu.com
+
+# download key from the internet
+__apt_key rabbitmq \
+   --uri http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
+
+
+
+
+

16.3.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc> +Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.3.7. COPYING

+

Copyright (C) 2011-2019 Steven Armstrong and Ander Punnar. You can +redistribute it and/or modify it under the terms of the GNU General Public +License as published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_key_uri.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_key_uri.html new file mode 100644 index 00000000..0e72a8da --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_key_uri.html @@ -0,0 +1,457 @@ + + + + + + + + + + + 16.4. cdist-type__apt_key_uri(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.4. cdist-type__apt_key_uri(7)

+
+

16.4.1. NAME

+

cdist-type__apt_key_uri - Add apt key from uri

+
+
+

16.4.2. DESCRIPTION

+

Download a key from an uri and add it to the apt keyring.

+
+
+

16.4.3. REQUIRED PARAMETERS

+
+
uri

the uri from which to download the key

+
+
+
+
+

16.4.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
name

a name for this key, used when testing if it is already installed. +Defaults to __object_id

+
+
+
+
+

16.4.5. EXAMPLES

+
__apt_key_uri rabbitmq \
+   --name 'RabbitMQ Release Signing Key <info@rabbitmq.com>' \
+   --uri http://www.rabbitmq.com/rabbitmq-signing-key-public.asc \
+   --state present
+
+
+
+
+

16.4.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.4.7. COPYING

+

Copyright (C) 2011-2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_mark.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_mark.html new file mode 100644 index 00000000..ff6d4930 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_mark.html @@ -0,0 +1,454 @@ + + + + + + + + + + + 16.5. cdist-type__apt_mark(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.5. cdist-type__apt_mark(7)

+
+

16.5.1. NAME

+

cdist-type__apt_mark - set package state as 'hold' or 'unhold'

+
+
+

16.5.2. DESCRIPTION

+

See apt-mark(8) for details.

+
+
+

16.5.3. REQUIRED PARAMETERS

+
+
state

Either "hold" or "unhold".

+
+
+
+
+

16.5.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
+
+
+

16.5.5. EXAMPLES

+
# hold package
+__apt_mark quagga --state hold
+# unhold package
+__apt_mark quagga --state unhold
+
+
+
+
+

16.5.6. AUTHORS

+

Ander Punnar <cdist--@--kvlt.ee>

+
+
+

16.5.7. COPYING

+

Copyright (C) 2016 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_norecommends.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_norecommends.html new file mode 100644 index 00000000..b7652376 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_norecommends.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.6. cdist-type__apt_norecommends(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.6. cdist-type__apt_norecommends(7)

+
+

16.6.1. NAME

+

cdist-type__apt_norecommends - Configure apt to not install recommended packages

+
+
+

16.6.2. DESCRIPTION

+

Configure apt to not install any recommended or suggested packages.

+
+
+

16.6.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.6.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.6.5. EXAMPLES

+
__apt_norecommends
+
+
+
+
+

16.6.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.6.7. COPYING

+

Copyright (C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_ppa.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_ppa.html new file mode 100644 index 00000000..6c3784ee --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_ppa.html @@ -0,0 +1,455 @@ + + + + + + + + + + + 16.7. cdist-type__apt_ppa(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.7. cdist-type__apt_ppa(7)

+
+

16.7.1. NAME

+

cdist-type__apt_ppa - Manage ppa repositories

+
+
+

16.7.2. DESCRIPTION

+

This cdist type allows manage ubuntu ppa repositories.

+
+
+

16.7.3. REQUIRED PARAMETERS

+
+
state

The state the ppa should be in, either 'present' or 'absent'. +Defaults to 'present'

+
+
+
+
+

16.7.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.7.5. EXAMPLES

+
# Enable a ppa repository
+__apt_ppa ppa:sans-intern/missing-bits
+# same as
+__apt_ppa ppa:sans-intern/missing-bits --state present
+
+# Disable a ppa repository
+__apt_ppa ppa:sans-intern/missing-bits --state absent
+
+
+
+
+

16.7.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.7.7. COPYING

+

Copyright (C) 2011-2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_source.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_source.html new file mode 100644 index 00000000..dbb88245 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_source.html @@ -0,0 +1,476 @@ + + + + + + + + + + + 16.8. cdist-type__apt_source(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.8. cdist-type__apt_source(7)

+
+

16.8.1. NAME

+

cdist-type__apt_source - Manage apt sources

+
+
+

16.8.2. DESCRIPTION

+

This cdist type allows you to manage apt sources. It invokes index update +internally when needed so call of index updating type is not needed.

+
+
+

16.8.3. REQUIRED PARAMETERS

+
+
uri

the uri to the apt repository

+
+
+
+
+

16.8.4. OPTIONAL PARAMETERS

+
+
arch

set this if you need to force and specific arch (ubuntu specific)

+
+
state

'present' or 'absent', defaults to 'present'

+
+
distribution

the distribution codename to use. Defaults to DISTRIB_CODENAME from +the targets /etc/lsb-release

+
+
component

space delimited list of components to enable. Defaults to an empty string.

+
+
+
+
+

16.8.5. BOOLEAN PARAMETERS

+
+
include-src

include deb-src entries

+
+
+
+
+

16.8.6. EXAMPLES

+
__apt_source rabbitmq \
+   --uri http://www.rabbitmq.com/debian/ \
+   --distribution testing \
+   --component main \
+   --include-src \
+   --state present
+
+__apt_source canonical_partner \
+   --uri http://archive.canonical.com/ \
+   --component partner --state present
+
+
+
+
+

16.8.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.8.8. COPYING

+

Copyright (C) 2011-2018 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_unattended_upgrades.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_unattended_upgrades.html new file mode 100644 index 00000000..1f8cc02d --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_unattended_upgrades.html @@ -0,0 +1,470 @@ + + + + + + + + + + + 16.9. cdist-type__apt_unattended_upgrades(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.9. cdist-type__apt_unattended_upgrades(7)

+
+

16.9.1. NAME

+

cdist-type__apt_unattended_upgrades - automatic installation of updates

+
+
+

16.9.2. DESCRIPTION

+

Install and configure unattended-upgrades package.

+

For more information see https://wiki.debian.org/UnattendedUpgrades.

+
+
+

16.9.3. OPTIONAL MULTIPLE PARAMETERS

+
+
option

Set options for unattended-upgrades. See examples.

+

Supported options with default values (as of 2020-01-17) are:

+
    +
  • AutoFixInterruptedDpkg, default is "true"

  • +
  • MinimalSteps, default is "true"

  • +
  • InstallOnShutdown, default is "false"

  • +
  • Mail, default is "" (empty)

  • +
  • MailOnlyOnError, default is "false"

  • +
  • Remove-Unused-Kernel-Packages, default is "true"

  • +
  • Remove-New-Unused-Dependencies, default is "true"

  • +
  • Remove-Unused-Dependencies, default is "false"

  • +
  • Automatic-Reboot, default is "false"

  • +
  • Automatic-Reboot-WithUsers, default is "true"

  • +
  • Automatic-Reboot-Time, default is "02:00"

  • +
  • SyslogEnable, default is "false"

  • +
  • SyslogFacility, default is "daemon"

  • +
  • OnlyOnACPower, default is "true"

  • +
  • Skip-Updates-On-Metered-Connections, default is "true"

  • +
  • Verbose, default is "false"

  • +
  • Debug, default is "false"

  • +
+
+
blacklist

Python regular expressions, matching packages to exclude from upgrading.

+
+
+
+
+

16.9.4. EXAMPLES

+
__apt_unattended_upgrades \
+    --option Mail=root \
+    --option MailOnlyOnError=true \
+    --blacklist multipath-tools \
+    --blacklist open-iscsi
+
+
+
+
+

16.9.5. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.9.6. COPYING

+

Copyright (C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__apt_update_index.html b/src/extra/manual/6.7.0/man7/cdist-type__apt_update_index.html new file mode 100644 index 00000000..be4f4ff6 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__apt_update_index.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.10. cdist-type__apt_update_index(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.10. cdist-type__apt_update_index(7)

+
+

16.10.1. NAME

+

cdist-type__apt_update_index - Update apt's package index

+
+
+

16.10.2. DESCRIPTION

+

This cdist type runs apt-get update whenever any apt sources have changed.

+
+
+

16.10.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.10.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.10.5. EXAMPLES

+
__apt_update_index
+
+
+
+
+

16.10.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.10.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__block.html b/src/extra/manual/6.7.0/man7/cdist-type__block.html new file mode 100644 index 00000000..3b7771d1 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__block.html @@ -0,0 +1,488 @@ + + + + + + + + + + + 16.11. cdist-type__block(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.11. cdist-type__block(7)

+
+

16.11.1. NAME

+

cdist-type__block - Manage blocks of text in files

+
+
+

16.11.2. DESCRIPTION

+

Manage a block of text in an existing file. +The block is identified using the prefix and suffix parameters. +Everything between prefix and suffix is considered to be a managed block +of text.

+
+
+

16.11.3. REQUIRED PARAMETERS

+
+
text

the text to manage. +If text is '-' (dash), take what was written to stdin as the text.

+
+
+
+
+

16.11.4. OPTIONAL PARAMETERS

+
+
file

the file in which to manage the text block. +Defaults to object_id.

+
+
prefix

the prefix to add before the text. +Defaults to #cdist:__block/$__object_id

+
+
suffix

the suffix to add after the text. +Defaults to #/cdist:__block/$__object_id

+
+
state

'present' or 'absent', defaults to 'present'

+
+
+
+
+

16.11.5. MESSAGES

+
+
add

block was added

+
+
update

block was updated/changed

+
+
remove

block was removed

+
+
+
+
+

16.11.6. EXAMPLES

+
# text from argument
+__block /path/to/file \
+   --prefix '#start' \
+   --suffix '#end' \
+   --text 'some\nblock of\ntext'
+
+# text from stdin
+__block some-id \
+   --file /path/to/file \
+   --text - << DONE
+here some block
+of text
+DONE
+
+
+
+
+

16.11.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.11.8. COPYING

+

Copyright (C) 2013 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ccollect_source.html b/src/extra/manual/6.7.0/man7/cdist-type__ccollect_source.html new file mode 100644 index 00000000..47c570c4 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ccollect_source.html @@ -0,0 +1,489 @@ + + + + + + + + + + + 16.12. cdist-type__ccollect_source(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.12. cdist-type__ccollect_source(7)

+
+

16.12.1. NAME

+

cdist-type__ccollect_source - Manage ccollect sources

+
+
+

16.12.2. DESCRIPTION

+

This cdist type allows you to create or delete ccollect sources.

+
+
+

16.12.3. REQUIRED PARAMETERS

+
+
source

The source from which to backup

+
+
destination

The destination directory

+
+
+
+
+

16.12.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
ccollectconf

The CCOLLECT_CONF directory. Defaults to /etc/ccollect.

+
+
+
+
+

16.12.5. OPTIONAL MULTIPLE PARAMETERS

+
+
exclude

Paths to exclude of backup

+
+
+
+
+

16.12.6. BOOLEAN PARAMETERS

+
+
verbose

Whether to report backup verbosely

+
+
create-destination

Create the directory specified in the destination parameter on the remote host

+
+
+
+
+

16.12.7. EXAMPLES

+
__ccollect_source doc.ungleich.ch \
+    --source doc.ungleich.ch:/ \
+    --destination /backup/doc.ungleich.ch \
+    --exclude '/proc/*' --exclude '/sys/*' \
+    --verbose
+
+__ccollect_source doc.ungleich.ch \
+    --source doc.ungleich.ch:/ \
+    --destination /backup/doc.ungleich.ch \
+    --exclude '/proc/*' --exclude '/sys/*' \
+    --verbose \
+    --create-destination
+
+
+
+
+

16.12.8. SEE ALSO

+

ccollect(1)

+
+
+

16.12.9. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.12.10. COPYING

+

Copyright (C) 2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__cdist.html b/src/extra/manual/6.7.0/man7/cdist-type__cdist.html new file mode 100644 index 00000000..fdbe5770 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__cdist.html @@ -0,0 +1,464 @@ + + + + + + + + + + + 16.13. cdist-type__cdist(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.13. cdist-type__cdist(7)

+
+

16.13.1. NAME

+

cdist-type__cdist - Manage cdist installations

+
+
+

16.13.2. DESCRIPTION

+

This cdist type allows you to easily setup cdist +on another box, to allow the other box to configure +systems.

+

This type is NOT required by target hosts. +It is only helpful to build FROM which you configure +other hosts.

+

This type will use git to clone

+
+
+

16.13.3. REQUIRED PARAMETERS

+
+
+

16.13.4. OPTIONAL PARAMETERS

+
+
username

Select the user to create for the cdist installation. +Defaults to "cdist".

+
+
source

Select the source from which to clone cdist from. +Defaults to "git@code.ungleich.ch:ungleich-public/cdist.git".

+
+
branch

Select the branch to checkout from. +Defaults to "master".

+
+
+
+
+

16.13.5. EXAMPLES

+
# Install cdist for user cdist in her home as subfolder cdist
+__cdist /home/cdist/cdist
+
+# Use alternative source
+__cdist --source "git@code.ungleich.ch:ungleich-public/cdist.git" /home/cdist/cdist
+
+
+
+
+

16.13.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.13.7. COPYING

+

Copyright (C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__cdistmarker.html b/src/extra/manual/6.7.0/man7/cdist-type__cdistmarker.html new file mode 100644 index 00000000..6f16e585 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__cdistmarker.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.14. cdist-type__cdistmarker(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.14. cdist-type__cdistmarker(7)

+
+

16.14.1. NAME

+

cdist-type__cdistmarker - Add a timestamped cdist marker.

+
+
+

16.14.2. DESCRIPTION

+

This type is used to add a common marker file which indicates that a given +machine is being managed by cdist. The contents of this file consist of a +timestamp, which can be used to determine the most recent time at which cdist +was run against the machine in question.

+
+
+

16.14.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.14.4. OPTIONAL PARAMETERS

+
+
destination

The path and filename of the marker. +Default: /etc/cdist-configured

+
+
format

The format of the timestamp. This is passed directly to system 'date'. +Default: -u

+
+
+
+
+

16.14.5. EXAMPLES

+
# Creates the marker as normal.
+__cdistmarker
+
+# Creates the marker differently.
+__cdistmarker --destination /tmp/cdist_marker --format '+%s'
+
+
+
+
+

16.14.6. AUTHORS

+

Daniel Maher <phrawzty+cdist--@--gmail.com>

+
+
+

16.14.7. COPYING

+

Copyright (C) 2011 Daniel Maher. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__check_messages.html b/src/extra/manual/6.7.0/man7/cdist-type__check_messages.html new file mode 100644 index 00000000..adfb46d6 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__check_messages.html @@ -0,0 +1,453 @@ + + + + + + + + + + + 16.15. cdist-type__check_messages(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.15. cdist-type__check_messages(7)

+
+

16.15.1. NAME

+

cdist-type__check_messages - Check messages for pattern and execute command on match.

+
+
+

16.15.2. DESCRIPTION

+

Check messages for pattern and execute command on match.

+

This type is useful if you chain together multiple related types using +dependencies and want to restart service if at least one type changes +something.

+

For more information about messages see cdist messaging.

+

For more information about dependencies and execution order see +cdist manifest documentation.

+
+
+

16.15.3. REQUIRED PARAMETERS

+
+
pattern

Extended regular expression pattern for search (passed to grep -E).

+
+
execute

Command to execute on pattern match.

+
+
+
+
+

16.15.4. EXAMPLES

+
__check_messages munin \
+    --pattern '^__(file|link|line)/etc/munin/' \
+    --execute 'service munin-node restart'
+
+
+
+
+

16.15.5. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.15.6. COPYING

+

Copyright (C) 2019 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__chroot_mount.html b/src/extra/manual/6.7.0/man7/cdist-type__chroot_mount.html new file mode 100644 index 00000000..a6796576 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__chroot_mount.html @@ -0,0 +1,460 @@ + + + + + + + + + + + 16.16. cdist-type__chroot_mount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.16. cdist-type__chroot_mount(7)

+
+

16.16.1. NAME

+

cdist-type__chroot_mount - mount a chroot

+
+
+

16.16.2. DESCRIPTION

+

Mount and prepare a chroot for running commands within it.

+
+
+

16.16.3. REQUIRED PARAMETERS

+

None

+
+
+

16.16.4. OPTIONAL PARAMETERS

+
+
manage-resolv-conf

manage /etc/resolv.conf inside the chroot. +Use the value of this parameter as the suffix to save a copy +of the current /etc/resolv.conf to /etc/resolv.conf.$suffix. +This is used by the __chroot_umount type to restore the initial +file content when unmounting the chroot.

+
+
+
+
+

16.16.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.16.6. EXAMPLES

+
__chroot_mount /path/to/chroot
+
+__chroot_mount /path/to/chroot \
+  --manage-resolv-conf "some-known-string"
+
+
+
+
+

16.16.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.16.8. COPYING

+

Copyright (C) 2012-2017 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__chroot_umount.html b/src/extra/manual/6.7.0/man7/cdist-type__chroot_umount.html new file mode 100644 index 00000000..0203aaea --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__chroot_umount.html @@ -0,0 +1,465 @@ + + + + + + + + + + + 16.17. cdist-type__chroot_umount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.17. cdist-type__chroot_umount(7)

+
+

16.17.1. NAME

+

cdist-type__chroot_umount - unmount a chroot mounted by __chroot_mount

+
+
+

16.17.2. DESCRIPTION

+

Undo what __chroot_mount did.

+
+
+

16.17.3. REQUIRED PARAMETERS

+

None

+
+
+

16.17.4. OPTIONAL PARAMETERS

+
+
manage-resolv-conf

manage /etc/resolv.conf inside the chroot. +Use the value of this parameter as the suffix to find the backup file +that was saved by the __chroot_mount. +This is used by the to restore the initial file content when unmounting +the chroot.

+
+
+
+
+

16.17.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.17.6. EXAMPLES

+
__chroot_umount /path/to/chroot
+
+__chroot_umount /path/to/chroot \
+  --manage-resolv-conf "some-known-string"
+
+
+
+
+

16.17.7. SEE ALSO

+

cdist-type__chroot_mount(7)

+
+
+

16.17.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.17.9. COPYING

+

Copyright (C) 2012-2017 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__clean_path.html b/src/extra/manual/6.7.0/man7/cdist-type__clean_path.html new file mode 100644 index 00000000..be39a684 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__clean_path.html @@ -0,0 +1,469 @@ + + + + + + + + + + + 16.18. cdist-type__clean_path(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.18. cdist-type__clean_path(7)

+
+

16.18.1. NAME

+

cdist-type__clean_path - Remove files and directories which match the pattern.

+
+
+

16.18.2. DESCRIPTION

+

Remove files and directories which match the pattern.

+

Provided path must be a directory.

+

Patterns are passed to find's -regex - see find(1) for more details.

+

Look up of files and directories is non-recursive (-maxdepth 1).

+

Parent directory is excluded (-mindepth 1).

+

This type is not POSIX compatible (sorry, Solaris users).

+
+
+

16.18.3. REQUIRED PARAMETERS

+
+
pattern

Pattern of files which are removed from path.

+
+
+
+
+

16.18.4. OPTIONAL PARAMETERS

+
+
path

Path which will be cleaned. Defaults to $__object_id.

+
+
exclude

Pattern of files which are excluded from removal.

+
+
onchange

The code to run if files or directories were removed.

+
+
+
+
+

16.18.5. EXAMPLES

+
__clean_path /etc/apache2/conf-enabled \
+    --pattern '.+' \
+    --exclude '.+\(charset\.conf\|security\.conf\)' \
+    --onchange 'service apache2 restart'
+
+__clean_path apache2-conf-enabled \
+    --path /etc/apache2/conf-enabled \
+    --pattern '.+' \
+    --exclude '.+\(charset\.conf\|security\.conf\)' \
+    --onchange 'service apache2 restart'
+
+
+
+
+

16.18.6. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.18.7. COPYING

+

Copyright (C) 2019 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__config_file.html b/src/extra/manual/6.7.0/man7/cdist-type__config_file.html new file mode 100644 index 00000000..183be6dd --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__config_file.html @@ -0,0 +1,469 @@ + + + + + + + + + + + 16.19. cdist-type__config_file(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.19. cdist-type__config_file(7)

+
+

16.19.1. NAME

+

cdist-type__config_file - _Manages config files

+
+
+

16.19.2. DESCRIPTION

+

Deploy config files using the file type. +Run the given code if the files changes.

+
+
+

16.19.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.19.4. OPTIONAL PARAMETERS

+
+
group

see cdist-type__file

+
+
mode

see cdist-type__file

+
+
onchange

the code to run if the file changes

+
+
owner

see cdist-type__file

+
+
source

Path to the config file. +If source is '-' (dash), take what was written to stdin as the config file content.

+
+
state

see cdist-type__file

+
+
+
+
+

16.19.5. EXAMPLES

+
__config_file /etc/consul/conf.d/watch_foo.json \
+   --owner root --group consul --mode 640 \
+   --source "$__type/files/watch_foo.json" \
+   --state present \
+   --onchange 'service consul status >/dev/null && service consul reload || true'
+
+
+
+
+

16.19.6. SEE ALSO

+

cdist-type__file(7)

+
+
+

16.19.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.19.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul.html b/src/extra/manual/6.7.0/man7/cdist-type__consul.html new file mode 100644 index 00000000..fe957870 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul.html @@ -0,0 +1,483 @@ + + + + + + + + + + + 16.20. cdist-type__consul(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.20. cdist-type__consul(7)

+
+

16.20.1. NAME

+

cdist-type__consul - Install consul

+
+
+

16.20.2. DESCRIPTION

+

Downloads and installs the consul binary from https://dl.bintray.com/mitchellh/consul. +Note that the consul binary is downloaded on the server (the machine running +cdist) and then deployed to the target host using the __file type unless --direct +parameter is used.

+
+
+

16.20.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.20.4. OPTIONAL PARAMETERS

+
+
state

either 'present' or 'absent'. Defaults to 'present'

+
+
version

which version of consul to install. See ./files/versions for a list of +supported versions. Defaults to the latest known version.

+
+
+
+
+

16.20.5. BOOLEAN PARAMETERS

+
+
direct

Download and deploy consul binary directly on the target machine.

+
+
+
+
+

16.20.6. MESSAGES

+

If consul binary is created using __staged_file then underlaying __file type messages are emitted.

+

If consul binary is created by direct method then the following messages are emitted:

+
+
/usr/local/bin/consul created

consul binary was created

+
+
+
+
+

16.20.7. EXAMPLES

+
# just install using defaults
+__consul
+
+# install by downloading consul binary directly on the target machine
+__consul --direct
+
+# specific version
+__consul \
+   --version 0.4.1
+
+
+
+
+

16.20.8. AUTHORS

+
+ + +
+
+
+

16.20.9. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_agent.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_agent.html new file mode 100644 index 00000000..8fa06a63 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_agent.html @@ -0,0 +1,564 @@ + + + + + + + + + + + 16.21. cdist-type__consul_agent(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.21. cdist-type__consul_agent(7)

+
+

16.21.1. NAME

+

cdist-type__consul_agent - Manage the consul agent

+
+
+

16.21.2. DESCRIPTION

+

Configure and manage the consul agent.

+
+
+

16.21.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.21.4. OPTIONAL PARAMETERS

+
+
acl-datacenter

only used by servers. This designates the datacenter which is authoritative +for ACL information.

+
+
acl-default-policy

either "allow" or "deny"; defaults to "allow". The default policy controls the +behavior of a token when there is no matching rule.

+
+
acl-down-policy

either "allow", "deny" or "extend-cache"; "extend-cache" is the default.

+
+
acl-master-token

only used for servers in the acl_datacenter. This token will be created with +management-level permissions if it does not exist. It allows operators to +bootstrap the ACL system with a token ID that is well-known.

+
+
acl-token

when provided, the agent will use this token when making requests to the +Consul servers.

+
+
acl-ttl

used to control Time-To-Live caching of ACLs.

+
+
bind-addr

sets the bind address for cluster communication

+
+
bootstrap-expect

sets server to expect bootstrap mode

+
+
ca-file-source

path to a PEM encoded certificate authority file which will be uploaded and +configure using the ca_file config option.

+
+
cert-file-source

path to a PEM encoded certificate file which will be uploaded and +configure using the cert_file config option.

+
+
client-addr

sets the address to bind for client access

+
+
datacenter

datacenter of the agent

+
+
encrypt

provides the gossip encryption key

+
+
group

the primary group for the agent

+
+
json-config

path to a partial json config file without leading { and trailing }. +If json-config is '-' (dash), take what was written to stdin as the file content.

+
+
key-file-source

path to a PEM encoded private key file which will be uploaded and +configure using the key_file config option.

+
+
node-name

name of this node. Must be unique in the cluster

+
+
retry-join

address to attempt joining every retry_interval until at least one join works. +Can be specified multiple times.

+
+
user

the user to run the agent as

+
+
state

if the agent is 'present' or 'absent'. Defaults to 'present'. +Currently state=absent is not working due to some dependency issues.

+
+
+
+
+

16.21.5. BOOLEAN PARAMETERS

+
+
disable-remote-exec

disables support for remote execution. When set to true, the agent will ignore any incoming remote exec requests.

+
+
disable-update-check

disables automatic checking for security bulletins and new version releases

+
+
leave-on-terminate

gracefully leave cluster on SIGTERM

+
+
rejoin-after-leave

rejoin the cluster using the previous state after leaving

+
+
server

used to control if an agent is in server or client mode

+
+
enable-syslog

enables logging to syslog

+
+
verify-incoming

enforce the use of TLS and verify a client's authenticity on incoming connections

+
+
verify-outgoing

enforce the use of TLS and verify the peers authenticity on outgoing connections

+
+
use-distribution-package

uses distribution package instead of upstream binary

+
+
+
+
+

16.21.6. EXAMPLES

+
# configure as server, bootstrap and rejoin
+hostname="$(cat "$__global/explorer/hostname")"
+__consul_agent \
+   --datacenter dc1 \
+   --node-name "${hostname%%.*}" \
+   --disable-update-check \
+   --server \
+   --rejoin-after-leave \
+   --bootstrap-expect 3 \
+   --retry-join consul-01 \
+   --retry-join consul-02 \
+   --retry-join consul-03
+
+# configure as server, bootstrap and rejoin with ssl support
+hostname="$(cat "$__global/explorer/hostname")"
+__consul_agent \
+   --datacenter dc1 \
+   --node-name "${hostname%%.*}" \
+   --disable-update-check \
+   --server \
+   --rejoin-after-leave \
+   --bootstrap-expect 3 \
+   --retry-join consul-01 \
+   --retry-join consul-02 \
+   --retry-join consul-03 \
+   --ca-file-source /path/to/ca.pem \
+   --cert-file-source /path/to/cert.pem \
+   --key-file-source /path/to/key.pem \
+   --verify-incoming \
+   --verify-outgoing
+
+# configure as client and try joining existing cluster
+__consul_agent \
+   --datacenter dc1 \
+   --node-name "${hostname%%.*}" \
+   --disable-update-check \
+   --retry-join consul-01 \
+   --retry-join consul-02 \
+   --retry-join consul-03
+
+
+
+
+

16.21.7. SEE ALSO

+

consul documentation at: <http://www.consul.io/docs/agent/options.html>.

+
+
+

16.21.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.21.9. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_check.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_check.html new file mode 100644 index 00000000..c0339c6d --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_check.html @@ -0,0 +1,492 @@ + + + + + + + + + + + 16.22. cdist-type__consul_check(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.22. cdist-type__consul_check(7)

+
+

16.22.1. NAME

+

cdist-type__consul_check - Manages consul checks

+
+
+

16.22.2. DESCRIPTION

+

Generate and deploy check definitions for a consul agent. +See http://www.consul.io/docs/agent/checks.html for parameter documentation.

+

Use either script together with interval, or use ttl.

+
+
+

16.22.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.22.4. OPTIONAL PARAMETERS

+
+
docker-container-id

the id of the docker container to run

+
+
http

the url to check

+
+
id

The id of this check.

+
+
interval

the interval in which the check should run

+
+
name

The name of this check. Defaults to __object_id

+
+
notes

human readable description

+
+
script

the shell command to run

+
+
service-id

the id of the service this check is bound to

+
+
shell

the shell to run inside the docker container

+
+
state

if this check is 'present' or 'absent'. Defaults to 'present'.

+
+
status

specify the initial state of this health check

+
+
tcp

the host and port to check

+
+
timeout

after how long to timeout checks which take to long

+
+
token

ACL token to use for interacting with the catalog

+
+
ttl

how long a TTL check is considered healthy without being updated through the +HTTP interface

+
+
+
+
+

16.22.5. EXAMPLES

+
__consul_check redis \
+   --script /usr/local/bin/check_redis.py \
+   --interval 10s
+
+__consul_check some-object-id \
+   --id web-app \
+   --name "Web App Status" \
+   --notes "Web app does a curl internally every 10 seconds" \
+   --ttl 30s
+
+
+
+
+

16.22.6. SEE ALSO

+

cdist-type__consul_agent(7)

+
+
+

16.22.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.22.8. COPYING

+

Copyright (C) 2015-2016 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_reload.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_reload.html new file mode 100644 index 00000000..47492ae5 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_reload.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.23. cdist-type__consul_reload(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.23. cdist-type__consul_reload(7)

+
+

16.23.1. NAME

+

cdist-type__consul_reload - Reload consul

+
+
+

16.23.2. DESCRIPTION

+

Reload consul after configuration changes.

+
+
+

16.23.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.23.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.23.5. EXAMPLES

+
__consul_reload
+
+
+
+
+

16.23.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.23.7. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_service.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_service.html new file mode 100644 index 00000000..c32043d8 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_service.html @@ -0,0 +1,481 @@ + + + + + + + + + + + 16.24. cdist-type__consul_service(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.24. cdist-type__consul_service(7)

+
+

16.24.1. NAME

+

cdist-type__consul_service - Manages consul services

+
+
+

16.24.2. DESCRIPTION

+

Generate and deploy service definitions for a consul agent. +See http://www.consul.io/docs/agent/services.html for parameter documentation.

+

Use either script together with interval, or use ttl.

+
+
+

16.24.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.24.4. OPTIONAL PARAMETERS

+
+
check-interval

the interval in which the script given with --check-script should be run

+
+
check-http

the URL to check for HTTP 200-ish status every --check-interval

+
+
check-script

the shell command to run every --check-interval

+
+
check-ttl

how long a service is considered healthy without being updated through the +HTTP interfave

+
+
id

Defaults to --name

+
+
name

The name of this service. Defaults to __object_id

+
+
port

the port at which this service can be reached

+
+
state

if this service is 'present' or 'absent'. Defaults to 'present'.

+
+
tag

a tag to add to this service. Can be specified multiple times.

+
+
+
+
+

16.24.5. EXAMPLES

+
__consul_service redis \
+   --tag master \
+   --tag production \
+   --port 8000 \
+   --check-script /usr/local/bin/check_redis.py \
+   --check-interval 10s
+
+__consul_service webapp \
+   --port 80 \
+   --check-ttl 10s
+
+
+
+
+

16.24.6. SEE ALSO

+

cdist-type__consul_agent(7)

+
+
+

16.24.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.24.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_template.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_template.html new file mode 100644 index 00000000..31fcb645 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_template.html @@ -0,0 +1,527 @@ + + + + + + + + + + + 16.25. cdist-type__consul_template(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.25. cdist-type__consul_template(7)

+
+

16.25.1. NAME

+

cdist-type__consul_template - Manage the consul-template service

+
+
+

16.25.2. DESCRIPTION

+

Downloads and installs the consul-template binary from +https://github.com/hashicorp/consul-template/releases/download/. +Generates a global config file and creates directory for per template config files. +Note that the consul-template binary is downloaded on the server (the machine running +cdist) and then deployed to the target host using the __file type.

+
+
+

16.25.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.25.4. OPTIONAL PARAMETERS

+
+
auth-username

specify a username for basic authentication.

+
+
auth-password

specify a password for basic authentication.

+
+
batch-size

the size of the batch when polling multiple dependencies.

+
+
consul

the location of the Consul instance to query (may be an IP address or FQDN) with port. +Defaults to 'localhost:8500'.

+
+
log-level

The log level for output. This applies to the stdout/stderr logging as well +as syslog logging (if enabled). Valid values are "debug", "info", "warn", +and "err". The default value is "warn".

+
+
max-stale

the maximum staleness of a query. If specified, Consul will distribute work among all +servers instead of just the leader.

+
+
retry

the amount of time to wait if Consul returns an error when communicating +with the API.

+
+
state

either 'present' or 'absent'. Defaults to 'present'

+
+
ssl-cert

Path to an SSL client certificate to use to authenticate to the consul server. +Useful if the consul server "verify_incoming" option is set.

+
+
ssl-ca-cert

Path to a CA certificate file, containing one or more CA certificates to +use to validate the certificate sent by the consul server to us. This is a +handy alternative to setting --ssl-no-verify if you are using your own CA.

+
+
syslog-facility

The facility to use when sending to syslog. This requires the use of --syslog. +The default value is LOCAL0.

+
+
token

the Consul API token.

+
+
vault-address

the location of the Vault instance to query (may be an IP address or FQDN) with port.

+
+
vault-token

the Vault API token.

+
+
vault-ssl-cert

Path to an SSL client certificate to use to authenticate to the vault server.

+
+
vault-ssl-ca-cert

Path to a CA certificate file, containing one or more CA certificates to +use to validate the certificate sent by the vault server to us.

+
+
version

which version of consul-template to install. See ./files/versions for a list of +supported versions. Defaults to the latest known version.

+
+
wait

the minimum(:maximum) to wait before rendering a new template to disk and +triggering a command, separated by a colon (:). If the optional maximum +value is omitted, it is assumed to be 4x the required minimum value.

+
+
+
+
+

16.25.5. BOOLEAN PARAMETERS

+
+
ssl

use HTTPS while talking to Consul. Requires the Consul server to be configured to serve secure connections.

+
+
ssl-no-verify

ignore certificate warnings. Only used if ssl is enabled.

+
+
syslog

Send log output to syslog (in addition to stdout and stderr).

+
+
vault-ssl

use HTTPS while talking to Vault. Requires the Vault server to be configured to serve secure connections.

+
+
vault-ssl-no-verify

ignore certificate warnings. Only used if vault is enabled.

+
+
+
+
+

16.25.6. EXAMPLES

+
__consul_template \
+   --consul consul.service.consul:8500 \
+   --retry 30s
+
+# specific version
+__consul_template \
+   --version 0.6.5 \
+   --retry 30s
+
+
+
+
+

16.25.7. SEE ALSO

+

consul documentation at: <https://github.com/hashicorp/consul-template>.

+
+
+

16.25.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.25.9. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_template_template.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_template_template.html new file mode 100644 index 00000000..76e66a1f --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_template_template.html @@ -0,0 +1,487 @@ + + + + + + + + + + + 16.26. cdist-type__consul_template_template(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.26. cdist-type__consul_template_template(7)

+
+

16.26.1. NAME

+

cdist-type__consul_template_template - Manage consul-template templates

+
+
+

16.26.2. DESCRIPTION

+

Generate and deploy template definitions for a consul-template. +See https://github.com/hashicorp/consul-template#examples for documentation. +Templates are written in the Go template format. +Either the --source or the --source-file parameter must be given.

+
+
+

16.26.3. REQUIRED PARAMETERS

+
+
destination

the destination where the generated file should go.

+
+
+
+
+

16.26.4. OPTIONAL PARAMETERS

+
+
command

an optional command to run after rendering the template to its destination.

+
+
source

path to the template source. Conflicts --source-file.

+
+
source-file

path to a local file which is uploaded using the __file type and configured +as the source. +If source is '-' (dash), take what was written to stdin as the file content. +Conflicts --source.

+
+
state

if this template is 'present' or 'absent'. Defaults to 'present'.

+
+
wait

The minimum(:maximum) time to wait before rendering a new template to +disk and triggering a command, separated by a colon (:). If the optional +maximum value is omitted, it is assumed to be 4x the required minimum value. +This is a numeric time with a unit suffix ("5s"). There is no default value. +The wait value for a template takes precedence over any globally-configured +wait.

+
+
+
+
+

16.26.5. EXAMPLES

+
# configure template on the target
+__consul_template_template nginx \
+   --source /etc/my-consul-templates/nginx.ctmpl \
+   --destination /etc/nginx/nginx.conf \
+   --command 'service nginx restart'
+
+
+# upload a local file to the target and configure it
+__consul_template_template nginx \
+   --wait '2s:6s' \
+   --source-file "$__manifest/files/nginx.ctmpl" \
+   --destination /etc/nginx/nginx.conf \
+   --command 'service nginx restart'
+
+
+
+
+

16.26.6. SEE ALSO

+

cdist-type__consul_template(7), cdist-type__consul_template_config(7)

+
+
+

16.26.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.26.8. COPYING

+

Copyright (C) 2015-2016 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_checks.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_checks.html new file mode 100644 index 00000000..f247b757 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_checks.html @@ -0,0 +1,475 @@ + + + + + + + + + + + 16.27. cdist-type__consul_watch_checks(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.27. cdist-type__consul_watch_checks(7)

+
+

16.27.1. NAME

+

cdist-type__consul_watch_checks - Manages consul checks watches

+
+
+

16.27.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'checks' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.27.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
+
+
+

16.27.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
filter-service

filter to a specific service. Conflicts with --filter-state.

+
+
filter-state

filter to a specific state. Conflicts with --filter-service.

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
+
+
+

16.27.5. EXAMPLES

+
__consul_watch_checks some-id \
+   --handler /usr/bin/my-handler.sh
+
+__consul_watch_checks some-id \
+   --filter-service consul \
+   --handler /usr/bin/my-handler.sh
+
+__consul_watch_checks some-id \
+   --filter-state passing \
+   --handler /usr/bin/my-handler.sh
+
+
+
+
+

16.27.6. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.27.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.27.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_event.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_event.html new file mode 100644 index 00000000..52bf56bf --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_event.html @@ -0,0 +1,469 @@ + + + + + + + + + + + 16.28. cdist-type__consul_watch_event(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.28. cdist-type__consul_watch_event(7)

+
+

16.28.1. NAME

+

cdist-type__consul_watch_event - Manages consul event watches

+
+
+

16.28.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'event' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.28.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
+
+
+

16.28.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
name

restrict the watch to only events with the given name

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
+
+
+

16.28.5. EXAMPLES

+
__consul_watch_event some-id \
+   --handler /usr/bin/my-handler.sh
+
+__consul_watch_event some-id \
+   --name web-deploy \
+   --handler /usr/bin/my-handler.sh
+
+
+
+
+

16.28.6. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.28.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.28.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_key.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_key.html new file mode 100644 index 00000000..62889917 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_key.html @@ -0,0 +1,466 @@ + + + + + + + + + + + 16.29. cdist-type__consul_watch_key(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.29. cdist-type__consul_watch_key(7)

+
+

16.29.1. NAME

+

cdist-type__consul_watch_key - Manages consul key watches

+
+
+

16.29.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'key' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.29.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
key

the key to watch for changes

+
+
+
+
+

16.29.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
+
+
+

16.29.5. EXAMPLES

+
__consul_watch_key some-id \
+   --key foo/bar/baz \
+   --handler /usr/bin/my-key-handler.sh
+
+
+
+
+

16.29.6. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.29.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.29.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_keyprefix.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_keyprefix.html new file mode 100644 index 00000000..1fb6acab --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_keyprefix.html @@ -0,0 +1,466 @@ + + + + + + + + + + + 16.30. cdist-type__consul_watch_keyprefix(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.30. cdist-type__consul_watch_keyprefix(7)

+
+

16.30.1. NAME

+

cdist-type__consul_watch_keyprefix - Manages consul keyprefix watches

+
+
+

16.30.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'keyprefix' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.30.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
prefix

the prefix of keys to watch for changes

+
+
+
+
+

16.30.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
+
+
+

16.30.5. EXAMPLES

+
__consul_watch_keyprefix some-id \
+   --prefix foo/ \
+   --handler /usr/bin/my-prefix-handler.sh
+
+
+
+
+

16.30.6. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.30.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.30.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_nodes.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_nodes.html new file mode 100644 index 00000000..513006d1 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_nodes.html @@ -0,0 +1,463 @@ + + + + + + + + + + + 16.31. cdist-type__consul_watch_nodes(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.31. cdist-type__consul_watch_nodes(7)

+
+

16.31.1. NAME

+

cdist-type__consul_watch_nodes - Manages consul nodes watches

+
+
+

16.31.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'nodes' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.31.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
+
+
+

16.31.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
+
+
+

16.31.5. EXAMPLES

+
__consul_watch_nodes some-id \
+   --handler /usr/bin/my-key-handler.sh
+
+
+
+
+

16.31.6. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.31.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.31.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_service.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_service.html new file mode 100644 index 00000000..fb8cf49c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_service.html @@ -0,0 +1,487 @@ + + + + + + + + + + + 16.32. cdist-type__consul_watch_service(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.32. cdist-type__consul_watch_service(7)

+
+

16.32.1. NAME

+

cdist-type__consul_watch_service - Manages consul service watches

+
+
+

16.32.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'service' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.32.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
service

the service to watch for changes

+
+
+
+
+

16.32.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
tag

filter by tag

+
+
+
+
+

16.32.5. BOOLEAN PARAMETERS

+
+
passingonly

specifies if only hosts passing all checks are displayed

+
+
+
+
+

16.32.6. EXAMPLES

+
__consul_watch_service some-id \
+   --service consul \
+   --handler /usr/bin/my-handler.sh
+
+__consul_watch_service some-id \
+   --service redis \
+   --tag production \
+   --handler /usr/bin/my-handler.sh
+
+__consul_watch_service some-id \
+   --service redis \
+   --tag production \
+   --passingonly \
+   --handler /usr/bin/my-handler.sh
+
+
+
+
+

16.32.7. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.32.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.32.9. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_services.html b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_services.html new file mode 100644 index 00000000..7ee01f42 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__consul_watch_services.html @@ -0,0 +1,463 @@ + + + + + + + + + + + 16.33. cdist-type__consul_watch_services(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.33. cdist-type__consul_watch_services(7)

+
+

16.33.1. NAME

+

cdist-type__consul_watch_services - Manages consul services watches

+
+
+

16.33.2. DESCRIPTION

+

Generate and deploy watch definitions of type 'services' for a consul agent. +See http://www.consul.io/docs/agent/watches.html for parameter documentation.

+
+
+

16.33.3. REQUIRED PARAMETERS

+
+
handler

the handler to invoke when the data view updates

+
+
+
+
+

16.33.4. OPTIONAL PARAMETERS

+
+
datacenter

can be provided to override the agent's default datacenter

+
+
state

if this watch is 'present' or 'absent'. Defaults to 'present'.

+
+
token

can be provided to override the agent's default ACL token

+
+
+
+
+

16.33.5. EXAMPLES

+
__consul_watch_services some-id \
+   --handler /usr/bin/my-key-handler.sh
+
+
+
+
+

16.33.6. SEE ALSO

+

cdist-type__consul_agent(7)

+

consul documentation at: <http://www.consul.io/docs/agent/watches.html>.

+
+
+

16.33.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.33.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__cron.html b/src/extra/manual/6.7.0/man7/cdist-type__cron.html new file mode 100644 index 00000000..5bcf148e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__cron.html @@ -0,0 +1,495 @@ + + + + + + + + + + + 16.34. cdist-type__cron(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.34. cdist-type__cron(7)

+
+

16.34.1. NAME

+

cdist-type__cron - Installs and manages cron jobs

+
+
+

16.34.2. DESCRIPTION

+

This cdist type allows you to manage entries in a users crontab.

+
+
+

16.34.3. REQUIRED PARAMETERS

+
+
user

The user who's crontab is edited

+
+
command

The command to run.

+
+
+
+
+

16.34.4. OPTIONAL PARAMETERS

+

NOTE: All time-related parameters (--minute, --hour, --day_of_month +--month and --day_of_week) defaults to *, which means to execute it +always. If you set --hour 0 to execute the cronjob only at midnight, it +will execute every minute in the first hour of the morning all days.

+
+
state

Either present or absent. Defaults to present.

+
+
minute

See crontab(5). Defaults to *

+
+
hour

See crontab(5). Defaults to *

+
+
day_of_month

See crontab(5). Defaults to *

+
+
month

See crontab(5). Defaults to *

+
+
day_of_week

See crontab(5). Defaults to *

+
+
raw

Take whatever the user has given instead of time and date fields. +If given, all other time and date fields are ignored. +Can for example be used to specify cron EXTENSIONS like reboot, yearly etc. +See crontab(5) for the extensions if any that your cron implementation +implements.

+
+
raw_command

Take whatever the user has given in the command and ignore everything else. +If given, the command will be added to crontab. +Can for example be used to define variables like SHELL or MAILTO.

+
+
+
+
+

16.34.5. EXAMPLES

+
# run Monday to Saturday at 23:15
+__cron some-id --user root --command "/path/to/script" \
+   --hour 23 --minute 15 --day_of_week 1-6
+
+# run on reboot
+__cron some-id --user root --command "/path/to/script" \
+   --raw @reboot
+
+# remove cronjob
+__cron some-id --user root --command "/path/to/script" --state absent
+
+# define default shell
+__cron some-id --user root --raw_command --command "SHELL=/bin/bash" \
+   --state present
+
+
+
+
+

16.34.6. SEE ALSO

+

crontab(5)

+
+
+

16.34.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.34.8. COPYING

+

Copyright (C) 2011-2013 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__daemontools.html b/src/extra/manual/6.7.0/man7/cdist-type__daemontools.html new file mode 100644 index 00000000..4f09e437 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__daemontools.html @@ -0,0 +1,463 @@ + + + + + + + + + + + 16.35. cdist-type__daemontools(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.35. cdist-type__daemontools(7)

+
+

16.35.1. NAME

+

cdist-type__daemontools - Install daemontools

+
+
+

16.35.2. DESCRIPTION

+

Install djb daemontools and (optionally) an init script.

+
+
+

16.35.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.35.4. OPTIONAL PARAMETERS

+
+
from-package

Package to install. Must be compatible with the original daemontools. Example: daemontools-encore. Default: daemontools.

+
+
servicedir

Directory to scan for services. Default: /service

+
+
+
+
+

16.35.5. BOOLEAN PARAMETERS

+
+
install-init-script

Add an init script and set it to start on boot.

+
+
+
+
+

16.35.6. EXAMPLES

+
__daemontools --from-package daemontools-encore  # if you prefer
+
+
+
+
+

16.35.7. SEE ALSO

+

cdist-type__daemontools_service(7)

+
+
+

16.35.8. AUTHORS

+

Kamila Součková <kamila--@--ksp.sk>

+
+
+

16.35.9. COPYING

+

Copyright (C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__daemontools_service.html b/src/extra/manual/6.7.0/man7/cdist-type__daemontools_service.html new file mode 100644 index 00000000..712a1ec7 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__daemontools_service.html @@ -0,0 +1,475 @@ + + + + + + + + + + + 16.36. cdist-type__daemontools_service(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.36. cdist-type__daemontools_service(7)

+
+

16.36.1. NAME

+

cdist-type__daemontools_service - Create a daemontools-compatible service dir.

+
+
+

16.36.2. DESCRIPTION

+

Create a directory structure compatible with daemontools-like service management.

+

Note that svc must be present on the target system.

+

The object ID will be used as the service name.

+
+
+

16.36.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.36.4. OPTIONAL PARAMETERS

+
+
run

Command to run. exec-ing and stderr redirection will be added. One of run, run-file must be specified.

+

Example: my-program

+
+
run-file

File to save as <servicedir>/run. One of run, run-file must be specified.

+

Example:

+
+
+
#!/bin/sh
+exec 2>&1
+exec my_program
+
+
+
+
log-run

Command to run for log consumption. Default: multilog t ./main

+
+
servicedir

Directory to install into. Default: /service

+
+
+
+
+

16.36.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.36.6. EXAMPLES

+
require="__daemontools" __daemontools_service prometheus --run "setuidgid prometheus $GOBIN/prometheus $FLAGS"
+
+
+
+
+

16.36.7. SEE ALSO

+

cdist-type__daemontools(7)

+
+
+

16.36.8. AUTHORS

+

Kamila Součková <kamila--@--ksp.sk>

+
+
+

16.36.9. COPYING

+

Copyright (C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__debconf_set_selections.html b/src/extra/manual/6.7.0/man7/cdist-type__debconf_set_selections.html new file mode 100644 index 00000000..d109a789 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__debconf_set_selections.html @@ -0,0 +1,458 @@ + + + + + + + + + + + 16.37. cdist-type__debconf_set_selections(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.37. cdist-type__debconf_set_selections(7)

+
+

16.37.1. NAME

+

cdist-type__debconf_set_selections - Setup debconf selections

+
+
+

16.37.2. DESCRIPTION

+

On Debian and alike systems debconf-set-selections(1) can be used +to setup configuration parameters.

+
+
+

16.37.3. REQUIRED PARAMETERS

+
+
file

Use the given filename as input for debconf-set-selections(1) +If filename is "-", read from stdin.

+
+
+
+
+

16.37.4. EXAMPLES

+
# Setup configuration for nslcd
+__debconf_set_selections nslcd --file /path/to/file
+
+# Setup configuration for nslcd from another type
+__debconf_set_selections nslcd --file "$__type/files/preseed/nslcd"
+
+__debconf_set_selections nslcd --file - << eof
+gitolite gitolite/gituser string git
+eof
+
+
+
+
+

16.37.5. SEE ALSO

+

debconf-set-selections(1), cdist-type__update_alternatives(7)

+
+
+

16.37.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.37.7. COPYING

+

Copyright (C) 2011-2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__directory.html b/src/extra/manual/6.7.0/man7/cdist-type__directory.html new file mode 100644 index 00000000..2a5a00b2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__directory.html @@ -0,0 +1,518 @@ + + + + + + + + + + + 16.38. cdist-type__directory(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.38. cdist-type__directory(7)

+
+

16.38.1. NAME

+

cdist-type__directory - Manage a directory

+
+
+

16.38.2. DESCRIPTION

+

This cdist type allows you to create or remove directories on the target.

+
+
+

16.38.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.38.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where:

+
+
present

the directory exists and the given attributes are set.

+
+
absent

the directory does not exist.

+
+
exists

the directory exists, but its attributes are not altered if it already +existed.

+
+
pre-exists

check that the directory exists and is indeed a directory, but do not +create or modify it.

+
+
+
+
group

Group to chgrp to.

+
+
mode

Unix permissions, suitable for chmod.

+
+
owner

User to chown to.

+
+
+
+
+

16.38.5. BOOLEAN PARAMETERS

+
+
parents

Whether to create parents as well (mkdir -p behaviour). +Warning: all intermediate directory permissions default +to whatever mkdir -p does.

+

Usually this means root:root, 0700.

+
+
recursive

If supplied the chgrp and chown call will run recursively. +This does not influence the behaviour of chmod.

+
+
+
+
+

16.38.6. MESSAGES

+
+
chgrp <group>

Changed group membership

+
+
chown <owner>

Changed owner

+
+
chmod <mode>

Changed mode

+
+
create

Empty directory was created

+
+
remove

Directory exists, but state is absent, directory will be removed by generated code.

+
+
remove non directory

Something other than a directory with the same name exists and was removed prior to create.

+
+
+
+
+

16.38.7. EXAMPLES

+
# A silly example
+__directory /tmp/foobar
+
+# Remove a directory
+__directory /tmp/foobar --state absent
+
+# Ensure /etc exists correctly
+__directory /etc --owner root --group root --mode 0755
+
+# Create nfs service directory, including parents
+__directory /home/services/nfs --parents
+
+# Change permissions recursively
+__directory /home/services --recursive --owner root --group root
+
+# Setup a temp directory
+__directory /local --mode 1777
+
+# Take it all
+__directory /home/services/kvm --recursive --parents \
+    --owner root --group root --mode 0755 --state present
+
+
+
+
+

16.38.8. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.38.9. COPYING

+

Copyright (C) 2011 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__docker.html b/src/extra/manual/6.7.0/man7/cdist-type__docker.html new file mode 100644 index 00000000..c91645ac --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__docker.html @@ -0,0 +1,461 @@ + + + + + + + + + + + 16.39. cdist-type__docker(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.39. cdist-type__docker(7)

+
+

16.39.1. NAME

+

cdist-type__docker - install Docker CE

+
+
+

16.39.2. DESCRIPTION

+

Installs latest Docker Community Edition package.

+
+
+

16.39.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.39.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
version

The specific version to install. Defaults to the special value 'latest', +meaning the version the package manager will install by default.

+
+
+
+
+

16.39.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.39.6. EXAMPLES

+
# Install docker
+__docker
+
+# Remove docker
+__docker --state absent
+
+# Install specific version
+__docker --state present --version 18.03.0.ce
+
+
+
+
+

16.39.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.39.8. COPYING

+

Copyright (C) 2016 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__docker_compose.html b/src/extra/manual/6.7.0/man7/cdist-type__docker_compose.html new file mode 100644 index 00000000..be6f6d9a --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__docker_compose.html @@ -0,0 +1,462 @@ + + + + + + + + + + + 16.40. cdist-type__docker_compose(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.40. cdist-type__docker_compose(7)

+
+

16.40.1. NAME

+

cdist-type__docker_compose - install docker-compose

+
+
+

16.40.2. DESCRIPTION

+

Installs docker-compose package. +State 'absent' will not remove docker binary itself, +only docker-compose binary will be removed

+
+
+

16.40.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.40.4. OPTIONAL PARAMETERS

+
+
version

Define docker_compose version, defaults to "1.9.0"

+
+
state

'present' or 'absent', defaults to 'present'

+
+
+
+
+

16.40.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.40.6. EXAMPLES

+
# Install docker-compose
+__docker_compose
+
+# Install version 1.9.0-rc4
+__docker_compose --version 1.9.0-rc4
+
+# Remove docker-compose
+__docker_compose --state absent
+
+
+
+
+

16.40.7. AUTHORS

+

Dominique Roux <dominique.roux--@--ungleich.ch>

+
+
+

16.40.8. COPYING

+

Copyright (C) 2016 Dominique Roux. Free use of this software is +granted under the terms of the GNU General Public License version 3 or later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__docker_config.html b/src/extra/manual/6.7.0/man7/cdist-type__docker_config.html new file mode 100644 index 00000000..9d0e79a5 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__docker_config.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.41. cdist-type__docker_config(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.41. cdist-type__docker_config(7)

+
+

16.41.1. NAME

+

cdist-type__docker_config - Manage Docker configs

+
+
+

16.41.2. DESCRIPTION

+

This type manages Docker configs.

+
+
+

16.41.3. OPTIONAL PARAMETERS

+
+
source

Path to the source file. If it is '-' (dash), read standard input.

+
+
state

'present' or 'absent', defaults to 'present' where:

+
+
present

if the config does not exist, it is created

+
+
absent

the config is removed

+
+
+
+
+
+
+

16.41.4. CAVEATS

+

Since Docker configs cannot be updated once created, this type tries removing +and recreating the config if it changes. If the config is used by a service at +the time of removing, then this type will fail.

+
+
+

16.41.5. EXAMPLES

+
# Creates "foo" config from "bar" source file
+__docker_config foo --source bar
+
+
+
+
+

16.41.6. AUTHORS

+

Ľubomír Kučera <lubomir.kucera.jr at gmail.com>

+
+
+

16.41.7. COPYING

+

Copyright (C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__docker_secret.html b/src/extra/manual/6.7.0/man7/cdist-type__docker_secret.html new file mode 100644 index 00000000..640174a6 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__docker_secret.html @@ -0,0 +1,458 @@ + + + + + + + + + + + 16.42. cdist-type__docker_secret(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.42. cdist-type__docker_secret(7)

+
+

16.42.1. NAME

+

cdist-type__docker_secret - Manage Docker secrets

+
+
+

16.42.2. DESCRIPTION

+

This type manages Docker secrets.

+
+
+

16.42.3. OPTIONAL PARAMETERS

+
+
source

Path to the source file. If it is '-' (dash), read standard input.

+
+
state

'present' or 'absent', defaults to 'present' where:

+
+
present

if the secret does not exist, it is created

+
+
absent

the secret is removed

+
+
+
+
+
+
+

16.42.4. CAVEATS

+

Since Docker secrets cannot be updated once created, this type takes no action +if the specified secret already exists.

+
+
+

16.42.5. EXAMPLES

+
# Creates "foo" secret from "bar" source file
+__docker_secret foo --source bar
+
+
+
+
+

16.42.6. AUTHORS

+

Ľubomír Kučera <lubomir.kucera.jr at gmail.com>

+
+
+

16.42.7. COPYING

+

Copyright (C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__docker_stack.html b/src/extra/manual/6.7.0/man7/cdist-type__docker_stack.html new file mode 100644 index 00000000..3268d600 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__docker_stack.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.43. cdist-type__docker_stack(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.43. cdist-type__docker_stack(7)

+
+

16.43.1. NAME

+

cdist-type__docker_stack - Manage Docker stacks

+
+
+

16.43.2. DESCRIPTION

+

This type manages service stacks.

+
+

Note

+

Since there is no easy way to tell whether a stack needs to be updated, +docker stack deploy is being run every time this type is invoked. +However, it does not mean this type is not idempotent. If Docker does not +detect changes, the existing stack will not be updated.

+
+
+
+

16.43.3. OPTIONAL PARAMETERS

+
+
compose-file

Path to the compose file. If it is '-' (dash), read standard input.

+
+
state

'present' or 'absent', defaults to 'present' where:

+
+
present

the stack is deployed

+
+
absent

the stack is removed

+
+
+
+
+
+
+

16.43.4. EXAMPLES

+
# Deploys 'foo' stack defined in 'docker-compose.yml' compose file
+__docker_stack foo --compose-file docker-compose.yml
+
+
+
+
+

16.43.5. AUTHORS

+

Ľubomír Kučera <lubomir.kucera.jr at gmail.com>

+
+
+

16.43.6. COPYING

+

Copyright (C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__docker_swarm.html b/src/extra/manual/6.7.0/man7/cdist-type__docker_swarm.html new file mode 100644 index 00000000..b6dac940 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__docker_swarm.html @@ -0,0 +1,454 @@ + + + + + + + + + + + 16.44. cdist-type__docker_swarm(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.44. cdist-type__docker_swarm(7)

+
+

16.44.1. NAME

+

cdist-type__docker_swarm - Manage Swarm

+
+
+

16.44.2. DESCRIPTION

+

This type can initialize Docker swarm mode. For more information about swarm +mode, see Swarm mode overview.

+
+
+

16.44.3. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present' where:

+
+
present

Swarm is initialized

+
+
absent

Swarm is left

+
+
+
+
+
+
+

16.44.4. EXAMPLES

+
# Initializes a swarm
+__docker_swarm
+
+# Leaves a swarm
+__docker_swarm --state absent
+
+
+
+
+

16.44.5. AUTHORS

+

Ľubomír Kučera <lubomir.kucera.jr at gmail.com>

+
+
+

16.44.6. COPYING

+

Copyright (C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__dog_vdi.html b/src/extra/manual/6.7.0/man7/cdist-type__dog_vdi.html new file mode 100644 index 00000000..da24734b --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__dog_vdi.html @@ -0,0 +1,462 @@ + + + + + + + + + + + 16.45. cdist-type__dog_vdi(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.45. cdist-type__dog_vdi(7)

+
+

16.45.1. NAME

+

cdist-type__dog_vdi - Manage Sheepdog VM images

+
+
+

16.45.2. DESCRIPTION

+

The dog program is used to create images for sheepdog +to be used in qemu.

+
+
+

16.45.3. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
size

Size of the image in "dog vdi" compatible units.

+

Required if state is "present".

+
+
+
+
+

16.45.4. EXAMPLES

+
# Create a 50G size image
+__dog_vdi nico-privat.sky.ungleich.ch --size 50G
+
+# Create a 50G size image (more explicit)
+__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state present
+
+# Remove image
+__dog_vdi nico-privat.sky.ungleich.ch --state absent
+
+# Remove image - keeping --size is ok
+__dog_vdi nico-privat.sky.ungleich.ch --size 50G --state absent
+
+
+
+
+

16.45.5. SEE ALSO

+

qemu(1), dog(8)

+
+
+

16.45.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.45.7. COPYING

+

Copyright (C) 2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__dot_file.html b/src/extra/manual/6.7.0/man7/cdist-type__dot_file.html new file mode 100644 index 00000000..6e16b3f5 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__dot_file.html @@ -0,0 +1,475 @@ + + + + + + + + + + + 16.46. cdist-type__dot_file(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.46. cdist-type__dot_file(7)

+
+

16.46.1. NAME

+

cdist-type__dot_file - install file under user's home directory

+
+
+

16.46.2. DESCRIPTION

+

This type installs a file (=__object_id) under user's home directory, +providing a way to install per-user configuration files. File owner +and group is deduced from user, for who file is installed.

+

Unlike regular __file type, you do not need make any assumptions, +where user's home directory is.

+
+
+

16.46.3. REQUIRED PARAMETERS

+
+
user

User, for who file is installed

+
+
+
+
+

16.46.4. OPTIONAL PARAMETERS

+
+
mode

forwarded to __file type

+
+
state

forwarded to __file type

+
+
source

forwarded to __file type

+
+
+
+
+

16.46.5. MESSAGES

+

This type inherits all messages from file type, and do not add +any new.

+
+
+

16.46.6. EXAMPLES

+
# Install .forward file for user 'alice'. Since state is 'present',
+# user is not meant to edit this file, all changes will be overridden.
+# It is good idea to put warning about it in file itself.
+__dot_file .forward --user alice --source "$__files/forward"
+
+# Install .muttrc for user 'bob', if not already present. User can safely
+# edit it, his changes will not be overwritten.
+__dot_file .muttrc --user bob --source "$__files/recommended_mutt_config" --state exists
+
+
+# Install default xmonad config for user 'eve'. Parent directory is created automatically.
+__dot_file .xmonad/xmonad.hs --user eve --state exists --source "$__files/xmonad.hs"
+
+
+
+
+

16.46.7. SEE ALSO

+

cdist-type__file(7)

+
+
+

16.46.8. COPYING

+

Copyright (C) 2015 Dmitry Bogatov. Free use of this software is granted +under the terms of the GNU General Public License version 3 or later +(GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__download.html b/src/extra/manual/6.7.0/man7/cdist-type__download.html new file mode 100644 index 00000000..c3bb2f66 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__download.html @@ -0,0 +1,487 @@ + + + + + + + + + + + 16.47. cdist-type__download(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.47. cdist-type__download(7)

+
+

16.47.1. NAME

+

cdist-type__download - Download a file

+
+
+

16.47.2. DESCRIPTION

+

Destination ($__object_id) in target host must be persistent storage +in order to calculate checksum and decide if file must be (re-)downloaded.

+

By default type will try to use wget, curl or fetch. +If download happens in target (see --download) then type will +fallback to (and install) wget.

+

If download happens in local machine, then environment variables like +{http,https,ftp}_proxy etc can be used on cdist execution +(http_proxy=foo cdist config ...).

+
+
+

16.47.3. REQUIRED PARAMETERS

+
+
url

File's URL.

+
+
sum

Checksum of file going to be downloaded. +By default output of cksum without filename is expected. +Other hash formats supported with prefixes: md5:, sha1: and sha256:.

+
+
onchange

Execute this command after download.

+
+
+
+
+

16.47.4. OPTIONAL PARAMETERS

+
+
download

If local (default), then download file to local storage and copy +it to target host. If remote, then download happens in target.

+
+
cmd-get

Command used for downloading. +Command must output to stdout. +Parameter will be used for printf and must include only one +format specification %s which will become URL. +For example: wget -O - '%s'.

+
+
cmd-sum

Command used for checksum calculation. +Command output and --sum parameter must match. +Parameter will be used for printf and must include only one +format specification %s which will become destination. +For example: md5sum '%s' | awk '{print $1}'.

+
+
+
+
+

16.47.5. EXAMPLES

+
__directory /opt/cpma
+
+require='__directory/opt/cpma' \
+    __download /opt/cpma/cnq3.zip \
+        --url https://cdn.playmorepromode.com/files/cnq3/cnq3-1.51.zip \
+        --sum md5:46da3021ca9eace277115ec9106c5b46
+
+require='__download/opt/cpma/cnq3.zip' \
+    __unpack /opt/cpma/cnq3.zip \
+        --move-existing-destination \
+        --destination /opt/cpma/server
+
+
+
+
+

16.47.6. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.47.7. COPYING

+

Copyright (C) 2020 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__file.html b/src/extra/manual/6.7.0/man7/cdist-type__file.html new file mode 100644 index 00000000..8e9fe099 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__file.html @@ -0,0 +1,529 @@ + + + + + + + + + + + 16.48. cdist-type__file(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.48. cdist-type__file(7)

+
+

16.48.1. NAME

+

cdist-type__file - Manage files.

+
+
+

16.48.2. DESCRIPTION

+

This cdist type allows you to create files, remove files and set file +attributes on the target.

+

If the file already exists on the target, then if it is a:

+
+
regular file, and state is:
+
present

replace it with the source file if they are not equal

+
+
exists

do nothing

+
+
+
+
symlink

replace it with the source file

+
+
directory

replace it with the source file

+
+
+

One exception is that when state is pre-exists, an error is raised if +the file would have been created otherwise (e.g. it is not present or +not a regular file).

+

In any case, make sure that the file attributes are as specified.

+
+
+

16.48.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.48.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where:

+
+
present

the file is exactly the one from source

+
+
absent

the file does not exist

+
+
exists

the file from source but only if it doesn't already exist

+
+
pre-exists

check that the file exists and is a regular file, but do not +create or modify it

+
+
+
+
group

Group to chgrp to. Defaults to root.

+
+
mode

Unix permissions, suitable for chmod. Defaults to a very secure 0600.

+
+
owner

User to chown to. Defaults to root.

+
+
source

If supplied, copy this file from the host running cdist to the target. +If not supplied, an empty file or directory will be created. +If source is '-' (dash), take what was written to stdin as the file content.

+
+
onchange

The code to run if file is modified.

+
+
+
+
+

16.48.5. MESSAGES

+
+
chgrp <group>

Changed group membership

+
+
chown <owner>

Changed owner

+
+
chmod <mode>

Changed mode

+
+
create

Empty file was created (no --source specified)

+
+
remove

File exists, but state is absent, file will be removed by generated code.

+
+
upload

File was uploaded

+
+
+
+
+

16.48.6. EXAMPLES

+
# Create  /etc/cdist-configured as an empty file
+__file /etc/cdist-configured
+# The same thing
+__file /etc/cdist-configured --state present
+# Use __file from another type
+__file /etc/issue --source "$__type/files/archlinux" --state present
+# Delete existing file
+__file /etc/cdist-configured --state absent
+# Supply some more settings
+__file /etc/shadow --source "$__type/files/shadow" \
+   --owner root --group shadow --mode 0640 \
+   --state present
+# Provide a default file, but let the user change it
+__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
+   --state exists \
+   --owner frodo --mode 0600
+# Check that the file is present, show an error when it is not
+__file /etc/somefile --state pre-exists
+# Take file content from stdin
+__file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
+    Here goes the content for /tmp/whatever
+DONE
+
+
+
+
+

16.48.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.48.8. COPYING

+

Copyright (C) 2011-2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__filesystem.html b/src/extra/manual/6.7.0/man7/cdist-type__filesystem.html new file mode 100644 index 00000000..47a70aa7 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__filesystem.html @@ -0,0 +1,491 @@ + + + + + + + + + + + 16.49. cdist-type__filesystem(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.49. cdist-type__filesystem(7)

+
+

16.49.1. NAME

+

cdist-type__filesystem - Create Filesystems.

+
+
+

16.49.2. DESCRIPTION

+

This cdist type allows you to create filesystems on devices.

+

If the device is mounted on target, it refuses to do anything.

+

If the device has a filesystem other then the specified and/or +the label is not correct, it only makes a new filesystem +if you have specified --force option.

+
+
+

16.49.3. REQUIRED PARAMETERS

+
+
fstype

Filesystem type, for example 'ext3', 'btrfs' or 'xfs'.

+
+
+
+
+

16.49.4. OPTIONAL PARAMETERS

+
+
device

Blockdevice for filesystem, Defaults to object_id. +On linux, it can be any lsblk accepted device notation.

+
+

+
For example:
+
+
/dev/sdx
+
or /dev/disk/by-xxxx/xxx
+
or /dev/mapper/xxxx
+
+
+
+
label

Label which should be applied on the filesystem.

+
+
mkfsoptions

Additional options which are inserted to the mkfs.xxx call.

+
+
+
+
+

16.49.5. BOOLEAN PARAMETERS

+
+
force

Normally, this type does nothing if a filesystem is found +on the target device. If you specify force, it's formatted +if the filesystem type or label differs from parameters. +Warning: This option can easily lead into data loss!

+
+
+
+
+

16.49.6. MESSAGES

+
+
filesystem <fstype> on <device><discoverd device> created

Filesystem was created on <discoverd device>

+
+
+
+
+

16.49.7. EXAMPLES

+
# Ensures that device /dev/sdb is formatted with xfs
+__filesystem /dev/sdb --fstype xfs --label Testdisk1
+# The same thing with btrfs and disk spezified by pci path to disk 1:0 on vmware
+__filesystem dev_sdb --fstype btrfs --device /dev/disk/by-path/pci-0000:0b:00.0-scsi-0:0:0:0 --label Testdisk2
+# Make sure that a multipath san device has a filesystem ...
+__filesystem dev_sdb --fstype xfs --device /dev/mapper/360060e80432f560050202f22000023ff --label Testdisk3
+
+
+
+
+

16.49.8. AUTHORS

+

Daniel Heule <hda--@--sfs.biz>

+
+
+

16.49.9. COPYING

+

Copyright (C) 2016 Daniel Heule. Free use of this software is +granted under the terms of the GNU General Public License version 3 or any later version (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__firewalld_rule.html b/src/extra/manual/6.7.0/man7/cdist-type__firewalld_rule.html new file mode 100644 index 00000000..aae62a4f --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__firewalld_rule.html @@ -0,0 +1,488 @@ + + + + + + + + + + + 16.50. cdist-type__firewalld_rule(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.50. cdist-type__firewalld_rule(7)

+
+

16.50.1. NAME

+

cdist-type__firewalld_rule - Configure firewalld rules

+
+
+

16.50.2. DESCRIPTION

+

This cdist type allows you to manage rules in firewalld +using the direct way (i.e. no zone support).

+
+
+

16.50.3. REQUIRED PARAMETERS

+
+
rule

The rule to apply. Essentially an firewalld command +line without firewalld in front of it.

+
+
protocol

Either ipv4, ipv4 or eb. See firewall-cmd(1)

+
+
table

The table to use (like filter or nat). See firewall-cmd(1).

+
+
chain

The chain to use (like INPUT_direct or FORWARD_direct). See firewall-cmd(1).

+
+
priority

The priority to use (0 is topmost). See firewall-cmd(1).

+
+
+
+
+

16.50.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
+
+
+

16.50.5. EXAMPLES

+
# Allow access from entrance.place4.ungleich.ch
+__firewalld_rule entrance \
+    --protocol ipv4 \
+    --table filter \
+    --chain INPUT_direct \
+    --priority 0 \
+    --rule '-s entrance.place4.ungleich.ch -j ACCEPT'
+
+# Allow forwarding of traffic from br0
+__firewalld_rule vm-forward --protocol ipv4 \
+    --table filter \
+    --chain FORWARD_direct \
+    --priority 0 \
+    --rule '-i br0 -j ACCEPT'
+
+# Ensure old rule is absent - warning, the rule part must stay the same!
+__firewalld_rule vm-forward
+    --protocol ipv4 \
+    --table filter \
+    --chain FORWARD_direct \
+    --priority 0 \
+    --rule '-i br0 -j ACCEPT' \
+    --state absent
+
+
+
+
+

16.50.6. SEE ALSO

+

cdist-type__iptables_rule(7), firewalld(8)

+
+
+

16.50.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.50.8. COPYING

+

Copyright (C) 2015 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__firewalld_start.html b/src/extra/manual/6.7.0/man7/cdist-type__firewalld_start.html new file mode 100644 index 00000000..75416f45 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__firewalld_start.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.51. cdist-type__firewalld_start(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.51. cdist-type__firewalld_start(7)

+
+

16.51.1. NAME

+

cdist-type__firewalld_start - start and enable firewalld

+
+
+

16.51.2. DESCRIPTION

+

This cdist type allows you to start and enable firewalld.

+
+
+

16.51.3. REQUIRED PARAMETERS

+

None

+
+
+

16.51.4. OPTIONAL PARAMETERS

+
+
startstate

'present' or 'absent', start/stop firewalld. Default is 'present'.

+
+
bootstate

'present' or 'absent', enable/disable firewalld on boot. Default is 'present'.

+
+
+
+
+

16.51.5. EXAMPLES

+
# start and enable firewalld
+__firewalld_start
+
+# only enable firewalld to start on boot
+__firewalld_start --startstate present --bootstate absent
+
+
+
+
+

16.51.6. SEE ALSO

+

firewalld(8)

+
+
+

16.51.7. AUTHORS

+

Darko Poljak <darko.poljak--@--ungleich.ch>

+
+
+

16.51.8. COPYING

+

Copyright (C) 2016 Darko Poljak. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__git.html b/src/extra/manual/6.7.0/man7/cdist-type__git.html new file mode 100644 index 00000000..b3a022fc --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__git.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.52. cdist-type__git(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.52. cdist-type__git(7)

+
+

16.52.1. NAME

+

cdist-type__git - Get and or keep git repositories up-to-date

+
+
+

16.52.2. DESCRIPTION

+

This cdist type allows you to clone git repositories

+
+
+

16.52.3. REQUIRED PARAMETERS

+
+
source

Specifies the git remote to clone from

+
+
+
+
+

16.52.4. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
branch

Create this branch by checking out the remote branch of this name +Default branch is "master"

+
+
group

Group to chgrp to.

+
+
mode

Unix permissions, suitable for chmod.

+
+
owner

User to chown to.

+
+
recursive

Passes the --recurse-submodules flag to git when cloning the repository.

+
+
shallow

Sets --depth=1 and --shallow-submodules for cloning repositories with big history.

+
+
+
+
+

16.52.5. EXAMPLES

+
__git /home/services/dokuwiki --source git://github.com/splitbrain/dokuwiki.git
+
+# Checkout cdist, stay on branch 2.1
+__git /home/nico/cdist --source git@code.ungleich.ch:ungleich-public/cdist.git --branch 2.1
+
+
+
+
+

16.52.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.52.7. COPYING

+

Copyright (C) 2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__go_get.html b/src/extra/manual/6.7.0/man7/cdist-type__go_get.html new file mode 100644 index 00000000..de3b7c54 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__go_get.html @@ -0,0 +1,450 @@ + + + + + + + + + + + 16.53. cdist-type__go_get(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.53. cdist-type__go_get(7)

+
+

16.53.1. NAME

+

cdist-type__go_get - Install go packages with go get

+
+
+

16.53.2. DESCRIPTION

+

This cdist type allows you to install golang packages with go get. +A sufficiently recent version of go must be present on the system.

+

The object ID is the go package to be installed.

+
+
+

16.53.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.53.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.53.5. EXAMPLES

+
__go_get github.com/prometheus/prometheus/cmd/...
+
+# usually you'd need to require golang from somewhere:
+require="__golang_from_vendor" __go_get github.com/prometheus/prometheus/cmd/...
+
+
+
+
+

16.53.6. AUTHORS

+

Kamila Součková <kamila@ksp.sk>

+
+
+

16.53.7. COPYING

+

Copyright (C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__golang_from_vendor.html b/src/extra/manual/6.7.0/man7/cdist-type__golang_from_vendor.html new file mode 100644 index 00000000..f60e4e89 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__golang_from_vendor.html @@ -0,0 +1,450 @@ + + + + + + + + + + + 16.54. cdist-type__golang_from_vendor(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.54. cdist-type__golang_from_vendor(7)

+
+

16.54.1. NAME

+

cdist-type__golang_from_vendor - Install any version of golang from golang.org

+
+
+

16.54.2. DESCRIPTION

+

This cdist type allows you to install golang from archives provided by https://golang.org/dl/.

+

See https://golang.org/dl/ for the list of supported versions, operating systems and architectures.

+

This is a singleton type.

+
+
+

16.54.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.54.4. OPTIONAL PARAMETERS

+
+
version

The golang version to install, defaults to 1.8.1

+
+
+
+
+

16.54.5. EXAMPLES

+
__golang_from_vendor --version 1.8.1
+
+
+
+
+

16.54.6. AUTHORS

+

Kamila Součková <kamila@ksp.sk>

+
+
+

16.54.7. COPYING

+

Copyright (C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__grafana_dashboard.html b/src/extra/manual/6.7.0/man7/cdist-type__grafana_dashboard.html new file mode 100644 index 00000000..9a8d8e1e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__grafana_dashboard.html @@ -0,0 +1,446 @@ + + + + + + + + + + + 16.55. cdist-type__grafana_dashboard(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.55. cdist-type__grafana_dashboard(7)

+
+

16.55.1. NAME

+

cdist-type__grafana_dashboard - Install Grafana (https://grafana.com)

+
+
+

16.55.2. DESCRIPTION

+

This cdist type adds the Grafana repository, installs the grafana package, and sets the server to start on boot.

+

This is a singleton type.

+
+
+

16.55.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.55.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.55.5. EXAMPLES

+
__grafana_dashboard
+
+
+
+
+

16.55.6. AUTHORS

+

Kamila Součková <kamila@ksp.sk>

+
+
+

16.55.7. COPYING

+

Copyright (C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__group.html b/src/extra/manual/6.7.0/man7/cdist-type__group.html new file mode 100644 index 00000000..833688a8 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__group.html @@ -0,0 +1,489 @@ + + + + + + + + + + + 16.56. cdist-type__group(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.56. cdist-type__group(7)

+
+

16.56.1. NAME

+

cdist-type__group - Manage groups

+
+
+

16.56.2. DESCRIPTION

+

This cdist type allows you to create or modify groups on the target.

+
+
+

16.56.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.56.4. OPTIONAL PARAMETERS

+
+
state

absent or present, defaults to present

+
+
gid

see groupmod(8)

+
+
password

see above

+
+
+
+
+

16.56.5. BOOLEAN PARAMETERS

+
+
system

see groupadd(8), apply only on group creation

+
+
+
+
+

16.56.6. MESSAGES

+
+
mod

group is modified

+
+
add

New group added

+
+
remove

group is removed

+
+
change <property> <new_value> <current_value>

Changed group property from current_value to new_value

+
+
set <property> <new_value>

set property to new value, property was not set before

+
+
+
+
+

16.56.7. EXAMPLES

+
# Create a group 'foobar' with operating system default settings
+__group foobar
+
+# Remove the 'foobar' group
+__group foobar --state absent
+
+# Create a system group 'myservice' with operating system default settings
+__group myservice --system
+
+# Same but with a specific gid
+__group foobar --gid 1234
+
+# Same but with a gid and password
+__group foobar --gid 1234 --password 'crypted-password-string'
+
+
+
+
+

16.56.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.56.9. COPYING

+

Copyright (C) 2011-2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__hostname.html b/src/extra/manual/6.7.0/man7/cdist-type__hostname.html new file mode 100644 index 00000000..9bc9af64 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__hostname.html @@ -0,0 +1,463 @@ + + + + + + + + + + + 16.57. cdist-type__hostname(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.57. cdist-type__hostname(7)

+
+

16.57.1. NAME

+

cdist-type__hostname - Set the hostname

+
+
+

16.57.2. DESCRIPTION

+

Sets the hostname on various operating systems.

+

Tip: For advice on choosing a hostname, see +RFC 1178.

+
+
+

16.57.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.57.4. OPTIONAL PARAMETERS

+
+
name

The hostname to set. Defaults to the first segment of __target_host +(${__target_host%%.*})

+
+
+
+
+

16.57.5. MESSAGES

+
+
changed

Changed the hostname

+
+
+
+
+

16.57.6. EXAMPLES

+
# take hostname from __target_host
+__hostname
+
+# set hostname explicitly
+__hostname --name some-static-hostname
+
+
+
+
+

16.57.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.57.8. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__hosts.html b/src/extra/manual/6.7.0/man7/cdist-type__hosts.html new file mode 100644 index 00000000..f792bc93 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__hosts.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.58. cdist-type__hosts(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.58. cdist-type__hosts(7)

+
+

16.58.1. NAME

+

cdist-type__hosts - manage entries in /etc/hosts

+
+
+

16.58.2. DESCRIPTION

+

Add or remove entries from /etc/hosts file.

+
+
+

16.58.3. OPTIONAL PARAMETERS

+
+
state

If state is present, make object_id resolve to ip. If +state is absent, object_id will no longer resolve via +/etc/hosts, if it was previously configured with this type. +Manually inserted entries are unaffected.

+
+
ip

IP address, to which hostname (=object_id) must resolve. If +state is present, this parameter is mandatory, if state is +absent, this parameter is silently ignored.

+
+
alias

An alias for the hostname. +This parameter can be specified multiple times (once per alias).

+
+
+
+
+

16.58.4. EXAMPLES

+
# Now `funny' resolves to 192.168.1.76,
+__hosts funny --ip 192.168.1.76
+# and `happy' no longer resolve via /etc/hosts if it was
+# previously configured via __hosts.
+__hosts happy --state absent
+
+__hosts srv1.example.com --ip 192.168.0.42 --alias srv1
+
+
+
+
+

16.58.5. SEE ALSO

+

hosts(5)

+
+
+

16.58.6. AUTHORS

+
+
Dmitry Bogatov <KAction@gnu.org>
+ +
+
+
+

16.58.7. COPYING

+

Copyright (C) 2015-2016 Dmitry Bogatov, 2019 Dennis Camera. +You can redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_bootloader_grub.html b/src/extra/manual/6.7.0/man7/cdist-type__install_bootloader_grub.html new file mode 100644 index 00000000..beed43e4 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_bootloader_grub.html @@ -0,0 +1,452 @@ + + + + + + + + + + + 16.59. cdist-type__install_bootloader_grub(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.59. cdist-type__install_bootloader_grub(7)

+
+

16.59.1. NAME

+

cdist-type__install_bootloader_grub - install grub2 bootloader on given disk

+
+
+

16.59.2. DESCRIPTION

+

This cdist type allows you to install grub2 bootloader on given disk.

+
+
+

16.59.3. REQUIRED PARAMETERS

+

None

+
+
+

16.59.4. OPTIONAL PARAMETERS

+
+
device

The device to install grub to. Defaults to object_id

+
+
chroot

where to chroot before running grub-install. Defaults to /target.

+
+
+
+
+

16.59.5. EXAMPLES

+
__install_bootloader_grub /dev/sda
+
+__install_bootloader_grub /dev/sda --chroot /mnt/foobar
+
+
+
+
+

16.59.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.59.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_chroot_mount.html b/src/extra/manual/6.7.0/man7/cdist-type__install_chroot_mount.html new file mode 100644 index 00000000..89d46909 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_chroot_mount.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.60. cdist-type__install_chroot_mount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.60. cdist-type__install_chroot_mount(7)

+
+

16.60.1. NAME

+

cdist-type__install_chroot_mount - mount a chroot with install command

+
+
+

16.60.2. DESCRIPTION

+

Mount and prepare a chroot for running commands within it.

+
+
+

16.60.3. REQUIRED PARAMETERS

+

None

+
+
+

16.60.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.60.5. EXAMPLES

+
__install_chroot_mount /path/to/chroot
+
+
+
+
+

16.60.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.60.7. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_chroot_umount.html b/src/extra/manual/6.7.0/man7/cdist-type__install_chroot_umount.html new file mode 100644 index 00000000..4d077868 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_chroot_umount.html @@ -0,0 +1,450 @@ + + + + + + + + + + + 16.61. cdist-type__install_chroot_umount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.61. cdist-type__install_chroot_umount(7)

+
+

16.61.1. NAME

+

cdist-type__install_chroot_umount - unmount a chroot mounted by __install_chroot_mount

+
+
+

16.61.2. DESCRIPTION

+

Undo what __install_chroot_mount did.

+
+
+

16.61.3. REQUIRED PARAMETERS

+

None

+
+
+

16.61.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.61.5. EXAMPLES

+
__install_chroot_umount /path/to/chroot
+
+
+
+
+

16.61.6. SEE ALSO

+

cdist-type__install_chroot_mount(7)

+
+
+

16.61.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.61.8. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_config.html b/src/extra/manual/6.7.0/man7/cdist-type__install_config.html new file mode 100644 index 00000000..8c880c68 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_config.html @@ -0,0 +1,452 @@ + + + + + + + + + + + 16.62. cdist-type__install_config(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.62. cdist-type__install_config(7)

+
+

16.62.1. NAME

+

cdist-type__install_config - run cdist config as part of the installation

+
+
+

16.62.2. DESCRIPTION

+

This cdist type allows you to run cdist config as part of the installation. +It does this by using a custom __remote_{copy,exec} prefix which runs +cdist config against the /target chroot on the remote host.

+
+
+

16.62.3. REQUIRED PARAMETERS

+

None

+
+
+

16.62.4. OPTIONAL PARAMETERS

+
+
chroot

where to chroot before running grub-install. Defaults to /target.

+
+
+
+
+

16.62.5. EXAMPLES

+
__install_config
+
+__install_config --chroot /mnt/somewhere
+
+
+
+
+

16.62.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.62.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_coreos.html b/src/extra/manual/6.7.0/man7/cdist-type__install_coreos.html new file mode 100644 index 00000000..2f603ff2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_coreos.html @@ -0,0 +1,454 @@ + + + + + + + + + + + 16.63. cdist-type__install_coreos(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.63. cdist-type__install_coreos(7)

+
+

16.63.1. NAME

+

cdist-type__install_coreos - Install CoreOS

+
+
+

16.63.2. DESCRIPTION

+

This type installs CoreOS to a given device using coreos-install, which is +present in CoreOS ISO by default.

+
+
+

16.63.3. REQUIRED PARAMETERS

+
+
device

A device CoreOS will be installed to.

+
+
+
+
+

16.63.4. OPTIONAL PARAMETERS

+
+
ignition

Path to ignition config.

+
+
+
+
+

16.63.5. EXAMPLES

+
__install_coreos \
+    --device /dev/sda \
+    --ignition ignition.json
+
+
+
+
+

16.63.6. AUTHORS

+

Ľubomír Kučera <lubomir.kucera.jr at gmail.com>

+
+
+

16.63.7. COPYING

+

Copyright (C) 2018 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_directory.html b/src/extra/manual/6.7.0/man7/cdist-type__install_directory.html new file mode 100644 index 00000000..dec83195 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_directory.html @@ -0,0 +1,506 @@ + + + + + + + + + + + 16.64. cdist-type__install_directory(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.64. cdist-type__install_directory(7)

+
+

16.64.1. NAME

+

cdist-type__install_directory - Manage a directory with install command

+
+
+

16.64.2. DESCRIPTION

+

This cdist type allows you to create or remove directories on the target.

+
+
+

16.64.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.64.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
group

Group to chgrp to.

+
+
mode

Unix permissions, suitable for chmod.

+
+
owner

User to chown to.

+
+
+
+
+

16.64.5. BOOLEAN PARAMETERS

+
+
parents

Whether to create parents as well (mkdir -p behaviour). +Warning: all intermediate directory permissions default +to whatever mkdir -p does.

+

Usually this means root:root, 0700.

+
+
recursive

If supplied the chgrp and chown call will run recursively. +This does not influence the behaviour of chmod.

+
+
+
+
+

16.64.6. MESSAGES

+
+
chgrp <group>

Changed group membership

+
+
chown <owner>

Changed owner

+
+
chmod <mode>

Changed mode

+
+
create

Empty directory was created

+
+
remove

Directory exists, but state is absent, directory will be removed by generated code.

+
+
remove non directory

Something other than a directory with the same name exists and was removed prior to create.

+
+
+
+
+

16.64.7. EXAMPLES

+
# A silly example
+__install_directory /tmp/foobar
+
+# Remove a directory
+__install_directory /tmp/foobar --state absent
+
+# Ensure /etc exists correctly
+__install_directory /etc --owner root --group root --mode 0755
+
+# Create nfs service directory, including parents
+__install_directory /home/services/nfs --parents
+
+# Change permissions recursively
+__install_directory /home/services --recursive --owner root --group root
+
+# Setup a temp directory
+__install_directory /local --mode 1777
+
+# Take it all
+__install_directory /home/services/kvm --recursive --parents \
+    --owner root --group root --mode 0755 --state present
+
+
+
+
+

16.64.8. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.64.9. COPYING

+

Copyright (C) 2011 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_file.html b/src/extra/manual/6.7.0/man7/cdist-type__install_file.html new file mode 100644 index 00000000..09c70d6a --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_file.html @@ -0,0 +1,529 @@ + + + + + + + + + + + 16.65. cdist-type__install_file(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.65. cdist-type__install_file(7)

+
+

16.65.1. NAME

+

cdist-type__install_file - Manage files with install command.

+
+
+

16.65.2. DESCRIPTION

+

This cdist type allows you to create files, remove files and set file +attributes on the target.

+

If the file already exists on the target, then if it is a:

+
+
regular file, and state is:
+
present

replace it with the source file if they are not equal

+
+
exists

do nothing

+
+
+
+
symlink

replace it with the source file

+
+
directory

replace it with the source file

+
+
+

One exception is that when state is pre-exists, an error is raised if +the file would have been created otherwise (e.g. it is not present or +not a regular file).

+

In any case, make sure that the file attributes are as specified.

+
+
+

16.65.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.65.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', 'exists' or 'pre-exists', defaults to 'present' where:

+
+
present

the file is exactly the one from source

+
+
absent

the file does not exist

+
+
exists

the file from source but only if it doesn't already exist

+
+
pre-exists

check that the file exists and is a regular file, but do not +create or modify it

+
+
+
+
group

Group to chgrp to.

+
+
mode

Unix permissions, suitable for chmod.

+
+
owner

User to chown to.

+
+
source

If supplied, copy this file from the host running cdist to the target. +If not supplied, an empty file or directory will be created. +If source is '-' (dash), take what was written to stdin as the file content.

+
+
onchange

The code to run if file is modified.

+
+
+
+
+

16.65.5. MESSAGES

+
+
chgrp <group>

Changed group membership

+
+
chown <owner>

Changed owner

+
+
chmod <mode>

Changed mode

+
+
create

Empty file was created (no --source specified)

+
+
remove

File exists, but state is absent, file will be removed by generated code.

+
+
upload

File was uploaded

+
+
+
+
+

16.65.6. EXAMPLES

+
# Create  /etc/cdist-configured as an empty file
+__install_file /etc/cdist-configured
+# The same thing
+__install_file /etc/cdist-configured --state present
+# Use __file from another type
+__install_file /etc/issue --source "$__type/files/archlinux" --state present
+# Delete existing file
+__install_file /etc/cdist-configured --state absent
+# Supply some more settings
+__install_file /etc/shadow --source "$__type/files/shadow" \
+   --owner root --group shadow --mode 0640 \
+   --state present
+# Provide a default file, but let the user change it
+__install_file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \
+   --state exists \
+   --owner frodo --mode 0600
+# Check that the file is present, show an error when it is not
+__install_file /etc/somefile --state pre-exists
+# Take file content from stdin
+__install_file /tmp/whatever --owner root --group root --mode 644 --source - << DONE
+    Here goes the content for /tmp/whatever
+DONE
+
+
+
+
+

16.65.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.65.8. COPYING

+

Copyright (C) 2011-2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_fstab.html b/src/extra/manual/6.7.0/man7/cdist-type__install_fstab.html new file mode 100644 index 00000000..cb085761 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_fstab.html @@ -0,0 +1,458 @@ + + + + + + + + + + + 16.66. cdist-type__install_fstab(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.66. cdist-type__install_fstab(7)

+
+

16.66.1. NAME

+

cdist-type__install_fstab - generate /etc/fstab during installation

+
+
+

16.66.2. DESCRIPTION

+

Uses __install_generate_fstab to generate a /etc/fstab file and uploads it +to the target machine at ${prefix}/etc/fstab.

+
+
+

16.66.3. REQUIRED PARAMETERS

+

None

+
+
+

16.66.4. OPTIONAL PARAMETERS

+
+
prefix

The prefix under which to generate the /etc/fstab file. +Defaults to /target.

+
+
+
+
+

16.66.5. EXAMPLES

+
__install_fstab
+
+__install_fstab --prefix /mnt/target
+
+
+
+
+

16.66.6. SEE ALSO

+

cdist-type__install_generate_fstab(7), +cdist-type__install_mount(7)

+
+
+

16.66.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.66.8. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_generate_fstab.html b/src/extra/manual/6.7.0/man7/cdist-type__install_generate_fstab.html new file mode 100644 index 00000000..36c1f6ba --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_generate_fstab.html @@ -0,0 +1,460 @@ + + + + + + + + + + + 16.67. cdist-type__install_generate_fstab(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.67. cdist-type__install_generate_fstab(7)

+
+

16.67.1. NAME

+

cdist-type__install_generate_fstab - generate /etc/fstab during installation

+
+
+

16.67.2. DESCRIPTION

+

Generates a /etc/fstab file from information retrieved from +__install_mount definitions.

+
+
+

16.67.3. REQUIRED PARAMETERS

+
+
destination

The path where to store the generated fstab file. +Note that this is a path on the server, where cdist is running, not the target host.

+
+
+
+
+

16.67.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.67.5. BOOLEAN PARAMETERS

+
+
uuid

use UUID instead of device in fstab

+
+
+
+
+

16.67.6. EXAMPLES

+
__install_generate_fstab --destination /path/where/you/want/fstab
+
+__install_generate_fstab --uuid --destination /path/where/you/want/fstab
+
+
+
+
+

16.67.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.67.8. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_mkfs.html b/src/extra/manual/6.7.0/man7/cdist-type__install_mkfs.html new file mode 100644 index 00000000..0f0f2619 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_mkfs.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.68. cdist-type__install_mkfs(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.68. cdist-type__install_mkfs(7)

+
+

16.68.1. NAME

+

cdist-type__install_mkfs - build a linux file system

+
+
+

16.68.2. DESCRIPTION

+

This cdist type is a wrapper for the mkfs command.

+
+
+

16.68.3. REQUIRED PARAMETERS

+
+
type

The filesystem type to use. Same as used with mkfs -t.

+
+
+
+
+

16.68.4. OPTIONAL PARAMETERS

+
+
device

defaults to object_id

+
+
options

file system-specific options to be passed to the mkfs command

+
+
blocks

the number of blocks to be used for the file system

+
+
+
+
+

16.68.5. EXAMPLES

+
# reiserfs /dev/sda5
+__install_mkfs /dev/sda5 --type reiserfs
+
+# same thing with explicit device
+__install_mkfs whatever --device /dev/sda5 --type reiserfs
+
+# jfs with journal on /dev/sda2
+__install_mkfs /dev/sda1 --type jfs --options "-j /dev/sda2"
+
+
+
+
+

16.68.6. SEE ALSO

+

mkfs(8)

+
+
+

16.68.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.68.8. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_mount.html b/src/extra/manual/6.7.0/man7/cdist-type__install_mount.html new file mode 100644 index 00000000..147a5587 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_mount.html @@ -0,0 +1,469 @@ + + + + + + + + + + + 16.69. cdist-type__install_mount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.69. cdist-type__install_mount(7)

+
+

16.69.1. NAME

+

cdist-type__install_mount - mount filesystems in the installer

+
+
+

16.69.2. DESCRIPTION

+

Mounts filesystems in the installer. Collects data to generate /etc/fstab.

+
+
+

16.69.3. REQUIRED PARAMETERS

+
+
device

the device to mount

+
+
+
+
+

16.69.4. OPTIONAL PARAMETERS

+
+
dir

where to mount device. Defaults to object_id.

+
+
options

mount options passed to mount(8) and used in /etc/fstab

+
+
type

filesystem type passed to mount(8) and used in /etc/fstab. +If type is swap, 'dir' is ignored. +Defaults to the filesystem used in __install_mkfs for the same 'device'.

+
+
prefix

the prefix to prepend to 'dir' when mounting in the installer. +Defaults to /target.

+
+
+
+
+

16.69.5. EXAMPLES

+
__install_mount slash --dir / --device /dev/sda5 --options noatime
+require="__install_mount/slash" __install_mount /boot --device /dev/sda1
+__install_mount swap --device /dev/sda2 --type swap
+require="__install_mount/slash" __install_mount /tmp --device tmpfs --type tmpfs
+
+
+
+
+

16.69.6. SEE ALSO

+

cdist-type__install_mkfs(7), +cdist-type__install_mount_apply (7)

+
+
+

16.69.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.69.8. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_partition_msdos.html b/src/extra/manual/6.7.0/man7/cdist-type__install_partition_msdos.html new file mode 100644 index 00000000..6d1375c2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_partition_msdos.html @@ -0,0 +1,475 @@ + + + + + + + + + + + 16.70. cdist-type__install_partition_msdos(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.70. cdist-type__install_partition_msdos(7)

+
+

16.70.1. NAME

+

cdist-type__install_partition_msdos - creates msdos partitions

+
+
+

16.70.2. DESCRIPTION

+

This cdist type allows you to create msdos paritions.

+
+
+

16.70.3. REQUIRED PARAMETERS

+
+
type

the partition type used in fdisk (such as 82 or 83) or "extended"

+
+
+
+
+

16.70.4. OPTIONAL PARAMETERS

+
+
device

the device we're working on. Defaults to the string prefix of --partition

+
+
minor

the partition number we're working on. Defaults to the numeric suffix of --partition

+
+
partition

defaults to object_id

+
+
bootable

mark partition as bootable, true or false, defaults to false

+
+
size

the size of the partition (such as 32M or 15G, whole numbers +only), '+' for remaining space, or 'n%' for percentage of remaining +(these should only be used after all specific partition sizes are +specified). Defaults to +.

+
+
+
+
+

16.70.5. EXAMPLES

+
# 128MB, linux, bootable
+__install_partition_msdos /dev/sda1 --type 83 --size 128M --bootable true
+# 512MB, swap
+__install_partition_msdos /dev/sda2 --type 82 --size 512M
+# 100GB, extended
+__install_partition_msdos /dev/sda3 --type extended --size 100G
+# 10GB, linux
+__install_partition_msdos /dev/sda5 --type 83 --size 10G
+# 50% of the free space of the extended partition, linux
+__install_partition_msdos /dev/sda6 --type 83 --size 50%
+# rest of the extended partition, linux
+__install_partition_msdos /dev/sda7 --type 83 --size +
+# nvm device partition 2
+__install_partition_msdos /dev/nvme0n1p2 --device /dev/nvme0n1 --minor 2 --type 83 --size 128M --bootable true
+
+
+
+
+

16.70.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.70.7. COPYING

+

Copyright (C) 2011-2017 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_partition_msdos_apply.html b/src/extra/manual/6.7.0/man7/cdist-type__install_partition_msdos_apply.html new file mode 100644 index 00000000..73d983ae --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_partition_msdos_apply.html @@ -0,0 +1,450 @@ + + + + + + + + + + + 16.71. cdist-type__install_partition_msdos_apply(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.71. cdist-type__install_partition_msdos_apply(7)

+
+

16.71.1. NAME

+

cdist-type__install_partition_msdos_apply - Apply dos partition settings

+
+
+

16.71.2. DESCRIPTION

+

Create the partitions defined with __install_partition_msdos

+
+
+

16.71.3. REQUIRED PARAMETERS

+

None

+
+
+

16.71.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.71.5. EXAMPLES

+
__install_partition_msdos_apply
+
+
+
+
+

16.71.6. SEE ALSO

+

cdist-type__install_partition_msdos_apply(7)

+
+
+

16.71.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.71.8. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_reboot.html b/src/extra/manual/6.7.0/man7/cdist-type__install_reboot.html new file mode 100644 index 00000000..943a37ae --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_reboot.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.72. cdist-type__install_reboot(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.72. cdist-type__install_reboot(7)

+
+

16.72.1. NAME

+

cdist-type__install_reboot - run reboot

+
+
+

16.72.2. DESCRIPTION

+

This cdist type allows you to reboot a machine.

+
+
+

16.72.3. REQUIRED PARAMETERS

+

None

+
+
+

16.72.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.72.5. EXAMPLES

+
__install_reboot
+
+
+
+
+

16.72.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.72.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_reset_disk.html b/src/extra/manual/6.7.0/man7/cdist-type__install_reset_disk.html new file mode 100644 index 00000000..b7fff677 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_reset_disk.html @@ -0,0 +1,447 @@ + + + + + + + + + + + 16.73. cdist-type__install_reset_disk(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.73. cdist-type__install_reset_disk(7)

+
+

16.73.1. NAME

+

cdist-type__install_reset_disk - reset a disk

+
+
+

16.73.2. DESCRIPTION

+

Remove partition table. +Remove all lvm labels. +Remove mdadm superblock.

+
+
+

16.73.3. REQUIRED PARAMETERS

+

None

+
+
+

16.73.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.73.5. EXAMPLES

+
__install_reset_disk /dev/sdb
+
+
+
+
+

16.73.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.73.7. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_stage.html b/src/extra/manual/6.7.0/man7/cdist-type__install_stage.html new file mode 100644 index 00000000..551f412c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_stage.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.74. cdist-type__install_stage(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.74. cdist-type__install_stage(7)

+
+

16.74.1. NAME

+

cdist-type__install_stage - download and unpack a stage file

+
+
+

16.74.2. DESCRIPTION

+

Downloads a operating system stage using curl and unpacks it to /target +using tar. The stage tarball is expected to be gzip compressed.

+
+
+

16.74.3. REQUIRED PARAMETERS

+
+
uri

The uri from which to fetch the tarball. +Can be anything understood by curl, e.g: +| http://path/to/stage.tgz +| tftp:///path/to/stage.tgz +| file:///local/path/stage.tgz

+
+
+
+
+

16.74.4. OPTIONAL PARAMETERS

+
+
target

where to unpack the tarball to. Defaults to /target.

+
+
+
+
+

16.74.5. BOOLEAN PARAMETERS

+
+
insecure

run curl in insecure mode so it does not check the servers ssl certificate

+
+
+
+
+

16.74.6. EXAMPLES

+
__install_stage --uri tftp:///path/to/stage.tgz
+__install_stage --uri http://path/to/stage.tgz --target /mnt/foobar
+__install_stage --uri file:///path/to/stage.tgz --target /target
+__install_stage --uri https://path/to/stage.tgz --target /mnt/foobar --insecure
+
+
+
+
+

16.74.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.74.8. COPYING

+

Copyright (C) 2011 - 2013 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__install_umount.html b/src/extra/manual/6.7.0/man7/cdist-type__install_umount.html new file mode 100644 index 00000000..03f955eb --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__install_umount.html @@ -0,0 +1,448 @@ + + + + + + + + + + + 16.75. cdist-type__install_umount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.75. cdist-type__install_umount(7)

+
+

16.75.1. NAME

+

cdist-type__install_umount - umount target directory

+
+
+

16.75.2. DESCRIPTION

+

This cdist type allows you to recursively umount the given target directory.

+
+
+

16.75.3. REQUIRED PARAMETERS

+

None

+
+
+

16.75.4. OPTIONAL PARAMETERS

+
+
target

the mount point to umount. Defaults to object_id

+
+
+
+
+

16.75.5. EXAMPLES

+
__install_umount /target
+
+
+
+
+

16.75.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.75.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__iptables_apply.html b/src/extra/manual/6.7.0/man7/cdist-type__iptables_apply.html new file mode 100644 index 00000000..0079da08 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__iptables_apply.html @@ -0,0 +1,450 @@ + + + + + + + + + + + 16.76. cdist-type__iptables_apply(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.76. cdist-type__iptables_apply(7)

+
+

16.76.1. NAME

+

cdist-type__iptables_apply - Apply the rules

+
+
+

16.76.2. DESCRIPTION

+

This cdist type deploys an init script that triggers +the configured rules and also re-applies them on +configuration.

+
+
+

16.76.3. REQUIRED PARAMETERS

+

None

+
+
+

16.76.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.76.5. EXAMPLES

+

None (__iptables_apply is used by __iptables_rule)

+
+
+

16.76.6. SEE ALSO

+

cdist-type__iptables_rule(7), iptables(8)

+
+
+

16.76.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.76.8. COPYING

+

Copyright (C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__iptables_rule.html b/src/extra/manual/6.7.0/man7/cdist-type__iptables_rule.html new file mode 100644 index 00000000..362f37db --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__iptables_rule.html @@ -0,0 +1,473 @@ + + + + + + + + + + + 16.77. cdist-type__iptables_rule(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.77. cdist-type__iptables_rule(7)

+
+

16.77.1. NAME

+

cdist-type__iptables_rule - Deploy iptable rulesets

+
+
+

16.77.2. DESCRIPTION

+

This cdist type allows you to manage iptable rules +in a distribution independent manner.

+
+
+

16.77.3. REQUIRED PARAMETERS

+
+
rule

The rule to apply. Essentially an iptables command +line without iptables in front of it.

+
+
+
+
+

16.77.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
+
+
+

16.77.5. EXAMPLES

+
# Deploy some policies
+__iptables_rule policy-in  --rule "-P INPUT DROP"
+__iptables_rule policy-out  --rule "-P OUTPUT ACCEPT"
+__iptables_rule policy-fwd  --rule "-P FORWARD DROP"
+
+# The usual established rule
+__iptables_rule established  --rule "-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT"
+
+# Some service rules
+__iptables_rule http  --rule "-A INPUT -p tcp --dport 80 -j ACCEPT"
+__iptables_rule ssh   --rule "-A INPUT -p tcp --dport 22 -j ACCEPT"
+__iptables_rule https --rule "-A INPUT -p tcp --dport 443 -j ACCEPT"
+
+# Ensure some rules are not present anymore
+__iptables_rule munin --rule "-A INPUT -p tcp --dport 4949 -j ACCEPT" \
+    --state absent
+
+
+
+
+

16.77.6. SEE ALSO

+

cdist-type__iptables_apply(7), iptables(8)

+
+
+

16.77.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.77.8. COPYING

+

Copyright (C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__issue.html b/src/extra/manual/6.7.0/man7/cdist-type__issue.html new file mode 100644 index 00000000..65871721 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__issue.html @@ -0,0 +1,451 @@ + + + + + + + + + + + 16.78. cdist-type__issue(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.78. cdist-type__issue(7)

+
+

16.78.1. NAME

+

cdist-type__issue - Manage issue

+
+
+

16.78.2. DESCRIPTION

+

This cdist type allows you to easily setup /etc/issue.

+
+
+

16.78.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.78.4. OPTIONAL PARAMETERS

+
+
source

If supplied, use this file as /etc/issue instead of default.

+
+
+
+
+

16.78.5. EXAMPLES

+
__issue
+
+# When called from another type
+__issue --source "$__type/files/myfancyissue"
+
+
+
+
+

16.78.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.78.7. COPYING

+

Copyright (C) 2011 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__jail.html b/src/extra/manual/6.7.0/man7/cdist-type__jail.html new file mode 100644 index 00000000..bfc5e09e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__jail.html @@ -0,0 +1,530 @@ + + + + + + + + + + + 16.79. cdist-type__jail(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.79. cdist-type__jail(7)

+
+

16.79.1. NAME

+

cdist-type__jail - Manage FreeBSD jails

+
+
+

16.79.2. DESCRIPTION

+

This type is used on FreeBSD to manage jails by calling the appropriate per-version subtype.

+
+
+

16.79.3. REQUIRED PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present".

+
+
jailbase

The location of the .tgz archive containing the base fs for your jails.

+
+
+
+
+

16.79.4. OPTIONAL PARAMETERS

+
+
name

The name of the jail. Default is to use the object_id as the jail name.

+
+
ip

The ifconfig style IP/netmask combination to use for the jail guest. If +the state parameter is "present," this parameter is required.

+
+
hostname

The FQDN to use for the jail guest. Defaults to the name parameter.

+
+
interface

The name of the physical interface on the jail server to bind the jail to. +Defaults to the first interface found in the output of ifconfig -l.

+
+
devfs-ruleset

The name of the devfs ruleset to associate with the jail. Defaults to +"jailrules." This ruleset must be copied to the server via another type. +To use this option, devfs-enable must be "true."

+
+
jaildir

The location on the remote server to use for hosting jail filesystems. +Defaults to /usr/jail.

+
+
+
+
+

16.79.5. BOOLEAN PARAMETERS

+
+
stopped

Do not start the jail

+
+
devfs-disable

Whether to disallow devfs mounting within the jail

+
+
onboot

Whether to add the jail to rc.conf's jail_list variable.

+
+
+
+
+

16.79.6. CAVEATS

+

This type does not currently support modification of jail options. If, for +example a jail needs to have its IP address or netmask changed, the jail must +be removed then re-added with the correct IP address/netmask or the appropriate +line (jail_<name>_ip="...") modified within rc.conf through some alternate +means.

+
+
+

16.79.7. MESSAGES

+
+
start

The jail was started

+
+
stop

The jail was stopped

+
+
create:

The jail was created

+
+
delete

The jail was deleted

+
+
onboot

The jail was configured to start on boot

+
+
+
+
+

16.79.8. EXAMPLES

+
# Create a jail called www
+__jail www --state present --ip "192.168.1.2" --jailbase /my/jail/base.tgz
+
+# Remove the jail called www
+__jail www --state absent --jailbase /my/jail/base.tgz
+
+# The jail www should not be started
+__jail www --state present --stopped \
+   --ip "192.168.1.2 netmask 255.255.255.0" \
+   --jailbase /my/jail/base.tgz
+
+# Use the name variable explicitly
+__jail thisjail --state present --name www \
+   --ip "192.168.1.2" \
+   --jailbase /my/jail/base.tgz
+
+# Go nuts
+__jail lotsofoptions --state present --name testjail \
+   --ip "192.168.1.100 netmask 255.255.255.0" \
+   --hostname "testjail.example.com" --interface "em0" \
+   --onboot --jailbase /my/jail/base.tgz --jaildir /jails
+
+
+
+
+

16.79.9. SEE ALSO

+

jail(8)

+
+
+

16.79.10. AUTHORS

+

Jake Guffey <jake.guffey--@--jointheirstm.org>

+
+
+

16.79.11. COPYING

+

Copyright (C) 2012,2016 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__jail_freebsd10.html b/src/extra/manual/6.7.0/man7/cdist-type__jail_freebsd10.html new file mode 100644 index 00000000..e6d8c780 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__jail_freebsd10.html @@ -0,0 +1,529 @@ + + + + + + + + + + + 16.80. cdist-type__jail_freebsd10(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.80. cdist-type__jail_freebsd10(7)

+
+

16.80.1. NAME

+

cdist-type__jail_freeebsd10 - Manage FreeBSD jails

+
+
+

16.80.2. DESCRIPTION

+

This type is used on FreeBSD >= 10.0 to manage jails.

+
+
+

16.80.3. REQUIRED PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present".

+
+
jailbase

The location of the .tgz archive containing the base fs for your jails.

+
+
+
+
+

16.80.4. OPTIONAL PARAMETERS

+
+
name

The name of the jail. Default is to use the object_id as the jail name.

+
+
ip

The ifconfig style IP/netmask combination to use for the jail guest. If +the state parameter is "present," this parameter is required.

+
+
hostname

The FQDN to use for the jail guest. Defaults to the name parameter.

+
+
interface

The name of the physical interface on the jail server to bind the jail to. +Defaults to the first interface found in the output of ifconfig -l.

+
+
devfs-ruleset

The name of the devfs ruleset to associate with the jail. Defaults to +"jailrules." This ruleset must be copied to the server via another type. +To use this option, devfs-enable must be "true."

+
+
jaildir

The location on the remote server to use for hosting jail filesystems. +Defaults to /usr/jail.

+
+
+
+
+

16.80.5. BOOLEAN PARAMETERS

+
+
stopped

Do not start the jail

+
+
devfs-disable

Whether to disallow devfs mounting within the jail

+
+
onboot

Whether to add the jail to rc.conf's jail_list variable.

+
+
+
+
+

16.80.6. CAVEATS

+

This type does not currently support modification of jail options. If, for +example a jail needs to have its IP address or netmask changed, the jail must +be removed then re-added with the correct IP address/netmask or the appropriate +modifications to jail.conf need to be made through alternate means.

+
+
+

16.80.7. MESSAGES

+
+
start

The jail was started

+
+
stop

The jail was stopped

+
+
create:

The jail was created

+
+
delete

The jail was deleted

+
+
onboot

The jail was configured to start on boot

+
+
+
+
+

16.80.8. EXAMPLES

+
# Create a jail called www
+__jail_freebsd10 www --state present --ip "192.168.1.2" --jailbase /my/jail/base.tgz
+
+# Remove the jail called www
+__jail_freebsd10 www --state absent --jailbase /my/jail/base.tgz
+
+# The jail www should not be started
+__jail_freebsd10 www --state present --stopped \
+   --ip "192.168.1.2 netmask 255.255.255.0" \
+   --jailbase /my/jail/base.tgz
+
+# Use the name variable explicitly
+__jail_freebsd10 thisjail --state present --name www \
+   --ip "192.168.1.2" \
+   --jailbase /my/jail/base.tgz
+
+# Go nuts
+__jail_freebsd10 lotsofoptions --state present --name testjail \
+   --ip "192.168.1.100 netmask 255.255.255.0" \
+   --hostname "testjail.example.com" --interface "em0" \
+   --onboot --jailbase /my/jail/base.tgz --jaildir /jails
+
+
+
+
+

16.80.9. SEE ALSO

+

jail(8)

+
+
+

16.80.10. AUTHORS

+

Jake Guffey <jake.guffey--@--jointheirstm.org>

+
+
+

16.80.11. COPYING

+

Copyright (C) 2012-2016 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__jail_freebsd9.html b/src/extra/manual/6.7.0/man7/cdist-type__jail_freebsd9.html new file mode 100644 index 00000000..3bcce324 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__jail_freebsd9.html @@ -0,0 +1,530 @@ + + + + + + + + + + + 16.81. cdist-type__jail_freebsd9(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.81. cdist-type__jail_freebsd9(7)

+
+

16.81.1. NAME

+

cdist-type__jail_freebsd9 - Manage FreeBSD jails

+
+
+

16.81.2. DESCRIPTION

+

This type is used on FreeBSD <= 9.x to manage jails.

+
+
+

16.81.3. REQUIRED PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present".

+
+
jailbase

The location of the .tgz archive containing the base fs for your jails.

+
+
+
+
+

16.81.4. OPTIONAL PARAMETERS

+
+
name

The name of the jail. Default is to use the object_id as the jail name.

+
+
ip

The ifconfig style IP/netmask combination to use for the jail guest. If +the state parameter is "present," this parameter is required.

+
+
hostname

The FQDN to use for the jail guest. Defaults to the name parameter.

+
+
interface

The name of the physical interface on the jail server to bind the jail to. +Defaults to the first interface found in the output of ifconfig -l.

+
+
devfs-ruleset

The name of the devfs ruleset to associate with the jail. Defaults to +"jailrules." This ruleset must be copied to the server via another type. +To use this option, devfs-enable must be "true."

+
+
jaildir

The location on the remote server to use for hosting jail filesystems. +Defaults to /usr/jail.

+
+
+
+
+

16.81.5. BOOLEAN PARAMETERS

+
+
stopped

Do not start the jail

+
+
devfs-disable

Whether to disallow devfs mounting within the jail

+
+
onboot

Whether to add the jail to rc.conf's jail_list variable.

+
+
+
+
+

16.81.6. CAVEATS

+

This type does not currently support modification of jail options. If, for +example a jail needs to have its IP address or netmask changed, the jail must +be removed then re-added with the correct IP address/netmask or the appropriate +line (jail_<name>_ip="...") modified within rc.conf through some alternate +means.

+
+
+

16.81.7. MESSAGES

+
+
start

The jail was started

+
+
stop

The jail was stopped

+
+
create:

The jail was created

+
+
delete

The jail was deleted

+
+
onboot

The jail was configured to start on boot

+
+
+
+
+

16.81.8. EXAMPLES

+
# Create a jail called www
+__jail_freebsd9 www --state present --ip "192.168.1.2" --jailbase /my/jail/base.tgz
+
+# Remove the jail called www
+__jail_freebsd9 www --state absent --jailbase /my/jail/base.tgz
+
+# The jail www should not be started
+__jail_freebsd9 www --state present --stopped \
+   --ip "192.168.1.2 netmask 255.255.255.0" \
+   --jailbase /my/jail/base.tgz
+
+# Use the name variable explicitly
+__jail_freebsd9 thisjail --state present --name www \
+   --ip "192.168.1.2" \
+   --jailbase /my/jail/base.tgz
+
+# Go nuts
+__jail_freebsd9 lotsofoptions --state present --name testjail \
+   --ip "192.168.1.100 netmask 255.255.255.0" \
+   --hostname "testjail.example.com" --interface "em0" \
+   --onboot --jailbase /my/jail/base.tgz --jaildir /jails
+
+
+
+
+

16.81.9. SEE ALSO

+

jail(8)

+
+
+

16.81.10. AUTHORS

+

Jake Guffey <jake.guffey--@--eprotex.com>

+
+
+

16.81.11. COPYING

+

Copyright (C) 2012-2016 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__key_value.html b/src/extra/manual/6.7.0/man7/cdist-type__key_value.html new file mode 100644 index 00000000..49d53cae --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__key_value.html @@ -0,0 +1,507 @@ + + + + + + + + + + + 16.82. cdist-type__key_value(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.82. cdist-type__key_value(7)

+
+

16.82.1. NAME

+

cdist-type__key_value - Change property values in files

+
+
+

16.82.2. DESCRIPTION

+

This cdist type allows you to change values in a key value based config +file.

+
+
+

16.82.3. REQUIRED PARAMETERS

+
+
file

The file to operate on.

+
+
delimiter

The delimiter which separates the key from the value.

+
+
+
+
+

16.82.4. OPTIONAL PARAMETERS

+
+
state

present or absent, defaults to present. If present, sets the key to value, +if absent, removes the key from the file.

+
+
key

The key to change. Defaults to object_id.

+
+
value

The value for the key. Optional if state=absent, required otherwise.

+
+
comment

If supplied, the value will be inserted before the line with the key, +but only if the key or value must be changed. +You need to ensure yourself that the line is prefixed with the correct +comment sign. (for example # or ; or wathever ..)

+
+
onchange

The code to run if the key or value changes (i.e. is inserted, removed or replaced).

+
+
+
+
+

16.82.5. BOOLEAN PARAMETERS

+
+
exact_delimiter

If supplied, treat additional whitespaces between key, delimiter and value +as wrong value.

+
+
+
+
+

16.82.6. MESSAGES

+
+
remove

Removed existing key and value

+
+
insert

Added key and value

+
+
change

Changed value of existing key

+
+
create

A new line was inserted in a new file

+
+
+
+
+

16.82.7. EXAMPLES

+
# Set the maximum system user id
+__key_value SYS_UID_MAX --file /etc/login.defs --value 666 --delimiter ' '
+
+# Same with fancy id
+__key_value my-fancy-id --file /etc/login.defs --key SYS_UID_MAX --value 666 \
+   --delimiter ' '
+
+# Enable packet forwarding
+__key_value net.ipv4.ip_forward --file /etc/sysctl.conf --value 1 \
+   --delimiter ' = ' --comment '# my linux kernel should act as a router'
+
+# Remove existing key/value
+__key_value LEGACY_KEY --file /etc/somefile --state absent --delimiter '='
+
+
+
+
+

16.82.8. MORE INFORMATION

+

This type try to handle as many values as possible, so it doesn't use regexes. +So you need to exactly specify the key and delimiter. Delimiter can be of any length.

+
+
+

16.82.9. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.82.10. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__keyboard.html b/src/extra/manual/6.7.0/man7/cdist-type__keyboard.html new file mode 100644 index 00000000..329f4bb9 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__keyboard.html @@ -0,0 +1,442 @@ + + + + + + + + + + + 16.83. cdist-type__keyboard(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.83. cdist-type__keyboard(7)

+
+

16.83.1. NAME

+

cdit-type__keyboard - Set keyboard layout

+
+
+

16.83.2. DESCRIPTION

+

This cdist type allows you to modify keyboard layout.

+
+
+

16.83.3. REQUIRED PARAMETERS

+
+
type

Any valid type, for example "us"

+
+
+
+
+

16.83.4. EXAMPLES

+
# Set keyboard type to "us"
+__keyboard --type "us"
+
+
+
+
+

16.83.5. AUTHORS

+

Carlos Ortigoza <carlos.ortigoza--@--ungleich.ch>

+
+
+

16.83.6. COPYING

+

Copyright (C) 2016 Carlos Ortigoza. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__letsencrypt_cert.html b/src/extra/manual/6.7.0/man7/cdist-type__letsencrypt_cert.html new file mode 100644 index 00000000..d5a4b496 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__letsencrypt_cert.html @@ -0,0 +1,518 @@ + + + + + + + + + + + 16.84. cdist-type__letsencrypt_cert(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.84. cdist-type__letsencrypt_cert(7)

+
+

16.84.1. NAME

+

cdist-type__letsencrypt_cert - Get an SSL certificate from Let's Encrypt

+
+
+

16.84.2. DESCRIPTION

+

Automatically obtain a Let's Encrypt SSL certificate using Certbot.

+
+
+

16.84.3. REQUIRED PARAMETERS

+
+
object id

A cert name. If domain parameter is not specified then it is used +as a domain to be included in the certificate.

+
+
admin-email

Where to send Let's Encrypt emails like "certificate needs renewal".

+
+
+
+
+

16.84.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present' where:

+
+
present

if the certificate does not exist, it will be obtained

+
+
absent

the certificate will be removed

+
+
+
+
webroot

The path to your webroot, as set up in your webserver config. If this +parameter is not present, Certbot will be run in standalone mode.

+
+
+
+
+

16.84.5. OPTIONAL MULTIPLE PARAMETERS

+
+
renew-hook

Renew hook command directly passed to Certbot in cron job.

+
+
domain

Domains to be included in the certificate. When specified then object id +is not used as a domain.

+
+
+
+
+

16.84.6. BOOLEAN PARAMETERS

+
+
automatic-renewal

Install a cron job, which attempts to renew certificates daily.

+
+
staging

Obtain a test certificate from a staging server.

+
+
+
+
+

16.84.7. MESSAGES

+
+
change

Certificate was changed.

+
+
create

Certificate was created.

+
+
remove

Certificate was removed.

+
+
+
+
+

16.84.8. EXAMPLES

+
# use object id as domain
+__letsencrypt_cert example.com \
+    --admin-email root@example.com \
+    --automatic-renewal \
+    --renew-hook "service nginx reload" \
+    --webroot /data/letsencrypt/root
+
+
+
# domain parameter is specified so object id is not used as domain
+# and example.com needs to be included again with domain parameter
+__letsencrypt_cert example.com \
+    --admin-email root@example.com \
+    --automatic-renewal \
+    --domain example.com \
+    --domain foo.example.com \
+    --domain bar.example.com \
+    --renew-hook "service nginx reload" \
+    --webroot /data/letsencrypt/root
+
+
+
+
+

16.84.9. AUTHORS

+
+ +
Kamila Součková <kamila--@--ksp.sk>
+ +
Ľubomír Kučera <lubomir.kucera.jr at gmail.com>
+
+
+
+

16.84.10. COPYING

+

Copyright (C) 2017-2018 Nico Schottelius, Kamila Součková, Darko Poljak and +Ľubomír Kučera. You can redistribute it and/or modify it under the terms of +the GNU General Public License as published by the Free Software Foundation, +either version 3 of the License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__line.html b/src/extra/manual/6.7.0/man7/cdist-type__line.html new file mode 100644 index 00000000..c5252ee0 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__line.html @@ -0,0 +1,512 @@ + + + + + + + + + + + 16.85. cdist-type__line(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.85. cdist-type__line(7)

+
+

16.85.1. NAME

+

cdist-type__line - Manage lines in files

+
+
+

16.85.2. DESCRIPTION

+

This cdist type allows you to add lines and remove lines from files.

+
+
+

16.85.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.85.4. OPTIONAL PARAMETERS

+
+
after

Insert the given line after this pattern.

+
+
before

Insert the given line before this pattern.

+
+
file

If supplied, use this as the destination file. +Otherwise the object_id is used.

+
+
line

Specifies the line which should be absent or present.

+

Must be present, if state is 'present'. +Ignored if regex is given and state is 'absent'.

+
+
regex

If state is 'present', search for this pattern and if it matches add +the given line.

+

If state is 'absent', ensure all lines matching the regular expression +are absent.

+

The regular expression is interpreted by awk's match function.

+
+
state

'present' or 'absent', defaults to 'present'

+
+
onchange

The code to run if line is added, removed or updated.

+
+
+
+
+

16.85.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.85.6. MESSAGES

+
+
added

The line was added.

+
+
updated

The line or its position was changed.

+
+
removed

The line was removed.

+
+
+
+
+

16.85.7. EXAMPLES

+
# Manage a hosts entry for www.example.com.
+__line /etc/hosts \
+    --line '127.0.0.2 www.example.com'
+
+# Manage another hosts entry for test.example.com.
+__line hosts:test.example.com \
+    --file /etc/hosts \
+    --line '127.0.0.3 test.example.com'
+
+# Remove the line starting with TIMEZONE from the /etc/rc.conf file.
+__line legacy_timezone \
+   --file /etc/rc.conf \
+   --regex 'TIMEZONE=.*' \
+   --state absent
+
+# Insert a line before another one.
+__line password-auth-local:classify \
+    --file /etc/pam.d/password-auth-local \
+    --line '-session required pam_exec.so debug log=/tmp/classify.log /usr/local/libexec/classify' \
+    --before '^session[[:space:]]+include[[:space:]]+password-auth-ac$'
+
+# Insert a line after another one.
+__line password-auth-local:classify \
+    --file /etc/pam.d/password-auth-local \
+    --line '-session required pam_exec.so debug log=/tmp/classify.log /usr/local/libexec/classify' \
+    --after '^session[[:space:]]+include[[:space:]]+password-auth-ac$'
+
+
+
+
+

16.85.8. SEE ALSO

+

cdist-type(7)

+
+
+

16.85.9. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.85.10. COPYING

+

Copyright (C) 2018 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__link.html b/src/extra/manual/6.7.0/man7/cdist-type__link.html new file mode 100644 index 00000000..ee5f6fcc --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__link.html @@ -0,0 +1,480 @@ + + + + + + + + + + + 16.86. cdist-type__link(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ + + + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__locale.html b/src/extra/manual/6.7.0/man7/cdist-type__locale.html new file mode 100644 index 00000000..3a729764 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__locale.html @@ -0,0 +1,455 @@ + + + + + + + + + + + 16.87. cdist-type__locale(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.87. cdist-type__locale(7)

+
+

16.87.1. NAME

+

cdist-type__locale - Configure locales

+
+
+

16.87.2. DESCRIPTION

+

This cdist type allows you to setup locales. On systems that don't +support locale setting like alpine/musl libc, it is a no-op.

+
+
+

16.87.3. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to present

+
+
+
+
+

16.87.4. EXAMPLES

+
# Add locale de_CH.UTF-8
+__locale de_CH.UTF-8
+
+# Same as above, but more explicit
+__locale de_CH.UTF-8 --state present
+
+# Remove colourful British English
+__locale en_GB.UTF-8 --state absent
+
+
+
+
+

16.87.5. SEE ALSO

+

locale(1), localedef(1), cdist-type__locale_system(7)

+
+
+

16.87.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.87.7. COPYING

+

Copyright (C) 2013-2019 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License version 3 or +later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__locale_system.html b/src/extra/manual/6.7.0/man7/cdist-type__locale_system.html new file mode 100644 index 00000000..bf1e98d4 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__locale_system.html @@ -0,0 +1,468 @@ + + + + + + + + + + + 16.88. cdist-type__locale_system(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.88. cdist-type__locale_system(7)

+
+

16.88.1. NAME

+

cdist-type__locale_system - Set system-wide locale

+
+
+

16.88.2. DESCRIPTION

+

This cdist type allows you to modify system-wide locale. +The name of the locale category is given as the object id +(usually you are probably interested in using LANG).

+
+
+

16.88.3. OPTIONAL PARAMETERS

+
+
state

present or absent, defaults to present. +If present, sets the locale category to the given value. +If absent, removes the locale category from the system file.

+
+
value

The value for the locale category. +Defaults to en_US.UTF-8.

+
+
+
+
+

16.88.4. EXAMPLES

+
# Set LANG to en_US.UTF-8
+__locale_system LANG
+
+# Same as above, but more explicit
+__locale_system LANG --value en_US.UTF-8
+
+# Set category LC_MESSAGES to de_CH.UTF-8
+__locale_system LC_MESSAGES --value de_CH.UTF-8
+
+# Remove setting for LC_ALL
+__locale_system LC_ALL --state absent
+
+
+
+
+

16.88.5. SEE ALSO

+

locale(1), localedef(1), cdist-type__locale(7)

+
+
+

16.88.6. AUTHORS

+
+ + + +
+
+
+

16.88.7. COPYING

+

Copyright (C) 2016 Nico Schottelius. Free use of this software is +granted under the terms of the GNU General Public License version 3 or +later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__motd.html b/src/extra/manual/6.7.0/man7/cdist-type__motd.html new file mode 100644 index 00000000..80d0f775 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__motd.html @@ -0,0 +1,471 @@ + + + + + + + + + + + 16.89. cdist-type__motd(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.89. cdist-type__motd(7)

+
+

16.89.1. NAME

+

cdist-type__motd - Manage message of the day

+
+
+

16.89.2. DESCRIPTION

+

This cdist type allows you to easily setup /etc/motd.

+
+

Note

+

In some OS, motd is a bit special, check motd(5). +Currently Debian, Devuan, Ubuntu and FreeBSD are taken into account. +If your OS of choice does something besides /etc/motd, check the source +and contribute support for it. +Otherwise it will likely just work.

+
+
+
+

16.89.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.89.4. OPTIONAL PARAMETERS

+
+
source

If supplied, copy this file from the host running cdist to the target. +If source is '-' (dash), take what was written to stdin as the file content. +If not supplied, a default message will be placed onto the target.

+
+
+
+
+

16.89.5. EXAMPLES

+
# Use cdist defaults
+__motd
+
+# Supply source file from a different type
+__motd --source "$__type/files/my-motd"
+
+# Supply source from stdin
+__motd --source "-" <<EOF
+Take this kiss upon the brow!
+And, in parting from you now,
+Thus much let me avow-
+You are not wrong, who deem
+That my days have been a dream
+EOF
+
+
+
+
+

16.89.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.89.7. COPYING

+

Copyright (C) 2020 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__mount.html b/src/extra/manual/6.7.0/man7/cdist-type__mount.html new file mode 100644 index 00000000..00800be4 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__mount.html @@ -0,0 +1,483 @@ + + + + + + + + + + + 16.90. cdist-type__mount(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.90. cdist-type__mount(7)

+
+

16.90.1. NAME

+

cdit-type__mount - Manage filesystem mounts

+
+
+

16.90.2. DESCRIPTION

+

Manage filesystem mounts either via /etc/fstab or manually.

+
+
+

16.90.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.90.4. OPTIONAL PARAMETERS

+
+
device

device to mount at path, defaults to 'none'. see mount(8)

+
+
dump

value for the dump field in fstab. see fstab(5) +defaults to 0.

+

This parameter is ignored, if the nofstab parameter is given.

+
+
options

comma separated string of options, see mount(8)

+
+
pass

value for the pass field in fstab. see fstab(5) +defaults to 0.

+

This parameter is ignored, if the nofstab parameter is given.

+
+
path

mount point where to mount the device, see mount(8). +Defaults to __object_id

+
+
state

either present or absent. Defaults to present.

+
+
type

vfstype, see mount(8)

+
+
+
+
+

16.90.5. BOOLEAN PARAMETERS

+
+
nofstab

do not manage an entry in /etc/fstab

+
+
+
+
+

16.90.6. EXAMPLES

+
__mount /some/dir \
+   --device /dev/sdc3 \
+   --type xfs \
+   --options "defaults,ro"
+   --dump 0 \
+   --pass 1
+
+__mount /var/lib/one \
+   --device mfsmount \
+   --type fuse \
+   --options "mfsmaster=mfsmaster.domain.tld,mfssubfolder=/one,nonempty,_netdev"
+
+
+
+
+

16.90.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.90.8. COPYING

+

Copyright (C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__mysql_database.html b/src/extra/manual/6.7.0/man7/cdist-type__mysql_database.html new file mode 100644 index 00000000..de73c18c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__mysql_database.html @@ -0,0 +1,456 @@ + + + + + + + + + + + 16.91. cdist-type__mysql_database(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.91. cdist-type__mysql_database(7)

+
+

16.91.1. NAME

+

cdist-type__mysql_database - Manage a MySQL database

+
+
+

16.91.2. DESCRIPTION

+

Create MySQL database and optionally user with all privileges.

+
+
+

16.91.3. OPTIONAL PARAMETERS

+
+
name

Name of database. Defaults to object id.

+
+
user

Create user and give all privileges to database.

+
+
password

Password for user.

+
+
state

Defaults to present. +If absent and user is also set, both will be removed (with privileges).

+
+
+
+
+

16.91.4. EXAMPLES

+
# just create database
+__mysql_database foo
+
+# create database with respective user with all privileges to database
+__mysql_database bar \
+    --user name \
+    --password secret
+
+
+
+
+

16.91.5. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.91.6. COPYING

+

Copyright (C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__mysql_privileges.html b/src/extra/manual/6.7.0/man7/cdist-type__mysql_privileges.html new file mode 100644 index 00000000..b09c44c5 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__mysql_privileges.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.92. cdist-type__mysql_privileges(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.92. cdist-type__mysql_privileges(7)

+
+

16.92.1. NAME

+

cdist-type__mysql_privileges - Manage MySQL privileges

+
+
+

16.92.2. DESCRIPTION

+

Grant and revoke privileges of MySQL user.

+
+
+

16.92.3. REQUIRED PARAMETERS

+
+
database

Name of database.

+
+
user

Name of user.

+
+
+
+
+

16.92.4. OPTIONAL PARAMETERS

+
+
privileges

Defaults to "all".

+
+
table

Defaults to "*".

+
+
host

Defaults to localhost.

+
+
state

"present" grants and "absent" revokes. Defaults to present.

+
+
+
+
+

16.92.5. EXAMPLES

+
__mysql_privileges user-to-db --database db --user user
+
+
+
+
+

16.92.6. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.92.7. COPYING

+

Copyright (C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__mysql_user.html b/src/extra/manual/6.7.0/man7/cdist-type__mysql_user.html new file mode 100644 index 00000000..b3687a27 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__mysql_user.html @@ -0,0 +1,449 @@ + + + + + + + + + + + 16.93. cdist-type__mysql_user(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.93. cdist-type__mysql_user(7)

+
+

16.93.1. NAME

+

cdist-type__mysql_user - Manage a MySQL user

+
+
+

16.93.2. DESCRIPTION

+

Create MySQL user or change password for the user.

+
+
+

16.93.3. OPTIONAL PARAMETERS

+
+
name

Name of user. Defaults to object id.

+
+
host

Host of user. Defaults to localhost.

+
+
password

Password of user.

+
+
state

Defaults to present.

+
+
+
+
+

16.93.4. EXAMPLES

+
__mysql_user user --password secret
+
+
+
+
+

16.93.5. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.93.6. COPYING

+

Copyright (C) 2020 Ander Punnar. You can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the Free +Software Foundation, either version 3 of the License, or (at your option) any +later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__openldap_server.html b/src/extra/manual/6.7.0/man7/cdist-type__openldap_server.html new file mode 100644 index 00000000..e0f7f4ff --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__openldap_server.html @@ -0,0 +1,614 @@ + + + + + + + + + + + 16.94. cdist-type__openldap_server(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.94. cdist-type__openldap_server(7)

+
+

16.94.1. NAME

+

cdist-type__openldap_server - Setup an openldap(4) server instance

+
+
+

16.94.2. DESCRIPTION

+

This type can be used to bootstrap an LDAP environment using openldap as slapd.

+

It bootstraps the LDAP server with sane defaults and creates and manages the +base DN defined by suffix.

+
+
+

16.94.3. REQUIRED PARAMETERS

+
+
manager-dn

The rootdn to set up in the directory. +E.g. cn=manager,dc=ungleich,dc=ch. See slapd.conf(5).

+
+
manager-password

The password for manager-dn in the directory. +This will be used to connect to the LDAP server on the first slapd-url +with the given manager-dn.

+
+
manager-password-hash

The password for manager-dn in the directory. +This should be valid for slapd.conf like {SSHA}qV+mCs3u8Q2sCmUXT4Ybw7MebHTASMyr. +Generate e.g. with: slappasswd -s weneedgoodsecurity. +See slappasswd(8C), slapd.conf(5). +TODO: implement this: http://blog.adamsbros.org/2015/06/09/openldap-ssha-salted-hashes-by-hand/

+
+

to derive from the manager-password parameter and ensure idempotency (care with salts). +At that point, manager-password-hash should be deprecated and ignored.

+
+
+
serverid

The server for the directory. +E.g. dc=ungleich,dc=ch. See slapd.conf(5).

+
+
suffix

The suffix for the directory. +E.g. dc=ungleich,dc=ch. See slapd.conf(5).

+
+
+
+
+

16.94.4. REQUIRED MULTIPLE PARAMETERS

+
+
slapd-url

A URL for slapd to listen on. +Pass once for each URL you want to support, +e.g.: --slapd-url ldaps://my.fqdn/ --slapd-url ldap://my.fqdn/. +The first instance that is passed will be used as the main URL to +connect to this LDAP server +See the -h flag in slapd(8C).

+
+
+
+
+

16.94.5. OPTIONAL PARAMETERS

+
+
syncrepl-credentials

Only has an effect if replicate is set; required in that case. +This secret is shared amongst the hosts that will replicate the directory. +Note that each replication server needs this secret and it is saved in +plain text in the directory.

+
+
syncrepl-searchbase

Only has an effect if replicate is set; required in that case. +The searchbase to use for replication. +E.g. dc=ungleich,dc=ch. See slapd.conf(5).

+
+
admin-email

Passed to cdist-type__letsencrypt_cert; has otherwise no use. +Required if using __letsencrypt_cert. +Where to send Let's Encrypt emails like "certificate needs renewal".

+
+
tls-cipher-suite

Setting for TLSCipherSuite. +Defaults to NORMAL in a Debian-like OS and HIGH:MEDIUM:+SSLv2 on FreeBSD. +See slapd.conf(5).

+
+
tls-cert

If defined, __letsencrypt_cert is not used and this must be the path in +the remote hosts to the PEM-encoded TLS certificate. +Requires: tls-privkey and tls-ca. +Permissions, existence and renewal of these files are left up to the +type's user.

+
+
tls-privkey

Required if tls-cert is defined. +Path in the remote hosts to the PEM-encoded private key file.

+
+
tls-ca

Required if tls-cert is defined. +Path in the remote hosts to the PEM-encoded CA certificate file.

+
+
extra-config

Custom settings to be added in slapd.conf(5).

+
+
+
+
+

16.94.6. OPTIONAL MULTIPLE PARAMETERS

+
+
syncrepl-host

Only has an effect if replicate is set; required in that case. +Set once per host that will replicate the directory.

+
+
module

LDAP module to load. See slapd.conf(5). Some dependencies might have to +be installed beforehand. Default value is OS-dependent, see manifest.

+
+
schema

Name of LDAP schema to load. Must be the name without extension of a +.schema file in slapd's schema directory (usually /etc/slapd/schema or +/usr/local/etc/openldap/schema). +Example value: inetorgperson +The type user must ensure that the schema file is deployed. +This defaults to a sensible subset, for details see the type definition.

+
+
description

The description of the base DN passed in the suffix parameter. +Defaults to Managed by cdist, do not edit manually.

+
+
+
+
+

16.94.7. BOOLEAN PARAMETERS

+
+
staging

Passed to cdist-type__letsencrypt_cert; has otherwise no use. +Obtain a test certificate from a staging server.

+
+
replicate

Whether to setup replication or not. +If present syncrepl-credentials and syncrepl-host are also required.

+
+
+
+
+

16.94.8. EXAMPLES

+
# Example of a simple server with manual certificate management.
+pki_prefix="/usr/local/etc/pki/realms/ldap.camilion.cloud"
+__openldap_server \
+    --manager-dn 'cn=manager,dc=camilion,dc=cloud' \
+    --manager-password "foo" \
+    --manager-password-hash '{SSHA}foo' \
+    --serverid 0 \
+    --suffix 'dc=camilion,dc=cloud' \
+    --slapd-url 'ldaps://ldap.camilion.cloud' \
+    --tls-cert "${pki_prefix}/default.crt" \
+    --tls-privkey "${pki_prefix}/default.key" \
+    --tls-ca "${pki_prefix}/CA.crt"
+
+# The created basedn looks as follows:
+#
+# dn: dc=camilion,dc=cloud
+# objectClass: top
+# objectClass: dcObject
+# objectClass: organization
+# o: Managed by cdist, do not edit manually.
+# dc: camilion
+#
+# Do not change it manually, the type will overwrite your changes.
+
+
+#
+# Changing to a replicated setup is a simple change to something like:
+#
+# Example for multiple servers with replication and automatic
+# Let's Encrypt certificate management through certbot.
+id=1
+for host in ldap-test1.ungleich.ch ldap-test2.ungleich.ch; do
+    echo "__ungleich_ldap \
+        --manager-dn 'cn=manager,dc=ungleich,dc=ch' \
+        --manager-psasword 'foo' \
+        --manager-password-hash '{SSHA}fooo' \
+        --serverid '${id}' \
+        --suffix 'dc=ungleich,dc=ch' \
+        --slapd-url ldap://${host} \
+        --searchbase 'dc=ungleich,dc=ch' \
+        --syncrepl-credentials 'fooo' \
+        --syncrepl-host 'ldap-test1.ungleich.ch' \
+        --syncrepl-host 'ldap-test2.ungleich.ch' \
+        --description 'Ungleich LDAP server'" \
+        --staging \
+        | cdist config -i - -v ${host}
+    id=$((id + 1))
+done
+
+# The created basedn looks as follows:
+#
+# dn: dc=ungleich,dc=ch
+# objectClass: top
+# objectClass: dcObject
+# objectClass: organization
+# o: Ungleich LDAP server
+# dc: ungleich
+#
+# Do not change it manually, the type will overwrite your changes.
+
+
+
+
+

16.94.9. SEE ALSO

+

cdist-type__letsencrypt_cert(7)

+
+
+

16.94.10. AUTHORS

+

ungleich <foss--@--ungleich.ch> +Evilham <contact--@--evilham.com>

+
+
+

16.94.11. COPYING

+

Copyright (C) 2020 ungleich glarus ag. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package.html b/src/extra/manual/6.7.0/man7/cdist-type__package.html new file mode 100644 index 00000000..2ae82f7c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package.html @@ -0,0 +1,468 @@ + + + + + + + + + + + 16.95. cdist-type__package(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.95. cdist-type__package(7)

+
+

16.95.1. NAME

+

cdist-type__package - Manage packages

+
+
+

16.95.2. DESCRIPTION

+

This cdist type allows you to install or uninstall packages on the target. +It dispatches the actual work to the package system dependent types.

+
+
+

16.95.3. REQUIRED PARAMETERS

+

None

+
+
+

16.95.4. OPTIONAL PARAMETERS

+
+
name

The name of the package to install. Default is to use the object_id as the +package name.

+
+
version

The version of the package to install. Default is to install the version +chosen by the local package manager.

+
+
type

The package type to use. Default is determined based on the $os explorer +variable. +e.g. +* __package_apt for Debian +* __package_emerge for Gentoo

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.95.5. EXAMPLES

+
# Install the package vim on the target
+__package vim --state present
+
+# Same but install specific version
+__package vim --state present --version 7.3.50
+
+# Force use of a specific package type
+__package vim --state present --type __package_apt
+
+
+
+
+

16.95.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.95.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_apk.html b/src/extra/manual/6.7.0/man7/cdist-type__package_apk.html new file mode 100644 index 00000000..a9e9a6e2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_apk.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.96. cdist-type__package_akp(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.96. cdist-type__package_akp(7)

+
+

16.96.1. NAME

+

cdist-type__package_akp - Manage packages with akp

+
+
+

16.96.2. DESCRIPTION

+

apk is usually used on Alpine to manage packages.

+
+
+

16.96.3. REQUIRED PARAMETERS

+

None

+
+
+

16.96.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.96.5. EXAMPLES

+
# Ensure zsh in installed
+__package_apk zsh --state present
+
+# Remove package
+__package_apk apache2 --state absent
+
+
+
+
+

16.96.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.96.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.96.8. COPYING

+

Copyright (C) 2019 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_apt.html b/src/extra/manual/6.7.0/man7/cdist-type__package_apt.html new file mode 100644 index 00000000..37434393 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_apt.html @@ -0,0 +1,480 @@ + + + + + + + + + + + 16.97. cdist-type__package_apt(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.97. cdist-type__package_apt(7)

+
+

16.97.1. NAME

+

cdist-type__package_apt - Manage packages with apt-get

+
+
+

16.97.2. DESCRIPTION

+

apt-get is usually used on Debian and variants (like Ubuntu) to +manage packages.

+

This type will also update package index, if it is older +than one day, to avoid missing package error messages.

+
+
+

16.97.3. REQUIRED PARAMETERS

+

None

+
+
+

16.97.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
target-release

Passed on to apt-get install, see apt-get(8). +Essentially allows you to retrieve packages from a different release

+
+
version

The version of the package to install. Default is to install the version +chosen by the local package manager.

+
+
+
+
+

16.97.5. BOOLEAN PARAMETERS

+
+
purge-if-absent

If this parameter is given when state is absent, the package is +purged from the system (using --purge).

+
+
+
+
+

16.97.6. EXAMPLES

+
# Ensure zsh in installed
+__package_apt zsh --state present
+
+# In case you only want *a* webserver, but don't care which one
+__package_apt webserver --state present --name nginx
+
+# Remove obsolete package
+__package_apt puppet --state absent
+
+
+
+
+

16.97.7. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.97.8. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.97.9. COPYING

+

Copyright (C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_dpkg.html b/src/extra/manual/6.7.0/man7/cdist-type__package_dpkg.html new file mode 100644 index 00000000..337bfad2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_dpkg.html @@ -0,0 +1,506 @@ + + + + + + + + + + + 16.98. cdist-type__package_dpkg(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.98. cdist-type__package_dpkg(7)

+
+

16.98.1. NAME

+

cdist-type__package_dpkg - Manage packages with dpkg

+
+
+

16.98.2. DESCRIPTION

+

This type is used on Debian and variants (like Ubuntu) to +install packages that are provided locally as *.deb files.

+

The object given to this type must be the name of the deb package. +The filename of the deb package has to follow Debian naming conventions, i.e. +${binary:Package}_${Version}_${Architecture}.deb (see dpkg-query(1) for +details).

+
+
+

16.98.3. OPTIONAL PARAMETERS

+
+
state

present or absent, defaults to present.

+
+
+
+
+

16.98.4. REQUIRED PARAMETERS

+
+
source

path to the *.deb package

+
+
+
+
+

16.98.5. BOOLEAN PARAMETERS

+
+
purge-if-absent

If this parameter is given when state is absent, the package is +purged from the system (using --purge).

+
+
+
+
+

16.98.6. EXPLORER

+
+
pkg_state

Returns the full package name if package is installed, empty otherwise.

+
+
+
+
+

16.98.7. MESSAGES

+
+
installed

The deb-file was installed.

+
+
removed (--remove)

The package was removed, keeping config.

+
+
removed (--purge)

The package was removed including config (purged).

+
+
+
+
+

16.98.8. EXAMPLES

+
# Install foo and bar packages
+__package_dpkg foo_0.1_all.deb --source /tmp/foo_0.1_all.deb
+__package_dpkg bar_1.4.deb --source $__type/files/bar_1.4.deb
+
+# uninstall baz:
+__package_dpkg baz_1.4_amd64.deb \
+    --source $__type/files/baz_1.4_amd64.deb \
+    --state "absent"
+# uninstall baz and also purge config-files:
+__package_dpkg baz_1.4_amd64.deb \
+    --source $__type/files/baz_1.4_amd64.deb \
+    --purge-if-absent \
+    --state "absent"
+
+
+
+
+

16.98.9. SEE ALSO

+

cdist-type__package(7), dpkg-query(1)

+
+
+

16.98.10. AUTHORS

+
+
Tomas Pospisek <tpo_deb--@--sourcepole.ch>
+
Thomas Eckert <tom--@--it-eckert.de>
+
+
+
+

16.98.11. COPYING

+

Copyright (C) 2013 Tomas Pospisek. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. +This type is based on __package_apt.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_emerge.html b/src/extra/manual/6.7.0/man7/cdist-type__package_emerge.html new file mode 100644 index 00000000..2ff18f3f --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_emerge.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.99. cdist-type__package_emerge(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.99. cdist-type__package_emerge(7)

+
+

16.99.1. NAME

+

cdist-type__package_emerge - Manage packages with portage

+
+
+

16.99.2. DESCRIPTION

+

Portage is usually used on the gentoo distribution to manage packages. +This type requires app-portage/gentoolkit installed on the target host. +cdist-type__package_emerge_dependencies is supposed to install the needed +packages on the target host.

+
+
+

16.99.3. REQUIRED PARAMETERS

+

None

+
+
+

16.99.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present".

+
+
version

If supplied, use to install or uninstall a specific version of the package named.

+
+
+
+
+

16.99.5. EXAMPLES

+
# Ensure sys-devel/gcc is installed
+__package_emerge sys-devel/gcc --state present
+
+# If you want a specific version of a package
+__package_emerge app-portage/gentoolkit --state present --version 0.3.0.8-r2
+
+# Remove package
+__package_emerge sys-devel/gcc --state absent
+
+
+
+
+

16.99.6. SEE ALSO

+

cdist-type__package(7), cdist-type__package_emerge_dependencies(7)

+
+
+

16.99.7. AUTHORS

+

Thomas Oettli <otho--@--sfs.biz>

+
+
+

16.99.8. COPYING

+

Copyright (C) 2013 Thomas Oettli. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_emerge_dependencies.html b/src/extra/manual/6.7.0/man7/cdist-type__package_emerge_dependencies.html new file mode 100644 index 00000000..b693436e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_emerge_dependencies.html @@ -0,0 +1,456 @@ + + + + + + + + + + + 16.100. cdist-type__package_emerge_dependencies(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.100. cdist-type__package_emerge_dependencies(7)

+
+

16.100.1. NAME

+

cdist-type__package_emerge_dependencies - Install dependencies for __package_emerge

+
+
+

16.100.2. DESCRIPTION

+

Portage is usually used on the gentoo distribution to manage packages. +This type installs the following tools which are required by __package_emerge to work:

+
    +
  • app-portage/flaggie

  • +
  • app-portage/gentoolkit

  • +
+
+
+

16.100.3. REQUIRED PARAMETERS

+

None

+
+
+

16.100.4. OPTIONAL PARAMETERS

+

None

+
+
+

16.100.5. EXAMPLES

+
# Ensure app-portage/flaggie and app-portage/gentoolkit are installed
+__package_emerge_dependencies
+
+
+
+
+

16.100.6. SEE ALSO

+

cdist-type__package(7), cdist-type__package_emerge(7)

+
+
+

16.100.7. AUTHORS

+

Thomas Oettli <otho--@--sfs.biz>

+
+
+

16.100.8. COPYING

+

Copyright (C) 2013 Thomas Oettli. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_luarocks.html b/src/extra/manual/6.7.0/man7/cdist-type__package_luarocks.html new file mode 100644 index 00000000..7e8318ca --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_luarocks.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.101. cdist-type__package_luarocks(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.101. cdist-type__package_luarocks(7)

+
+

16.101.1. NAME

+

cdist-type__package_luarocks - Manage luarocks packages

+
+
+

16.101.2. DESCRIPTION

+

LuaRocks is a deployment and management system for Lua modules.

+
+
+

16.101.3. REQUIRED PARAMETERS

+

None

+
+
+

16.101.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.101.5. EXAMPLES

+
# Ensure luasocket is installed
+__package_luarocks luasocket --state present
+
+# Remove package
+__package_luarocks luasocket --state absent
+
+
+
+
+

16.101.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.101.7. AUTHORS

+

Christian G. Warden <cwarden@xerus.org>

+
+
+

16.101.8. COPYING

+

Copyright (C) 2012 SwellPath, Inc. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_opkg.html b/src/extra/manual/6.7.0/man7/cdist-type__package_opkg.html new file mode 100644 index 00000000..4e84070b --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_opkg.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.102. cdist-type__package_opkg(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.102. cdist-type__package_opkg(7)

+
+

16.102.1. NAME

+

cdist-type__package_opkg - Manage packages with opkg

+
+
+

16.102.2. DESCRIPTION

+

opkg is usually used on OpenWRT to manage packages.

+
+
+

16.102.3. REQUIRED PARAMETERS

+

None

+
+
+

16.102.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.102.5. EXAMPLES

+
# Ensure lsof is installed
+__package_opkg lsof --state present
+
+# Remove obsolete package
+__package_opkg dnsmasq --state absent
+
+
+
+
+

16.102.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.102.7. AUTHORS

+

Giel van Schijndel <giel+cdist--@--mortis.eu>

+
+
+

16.102.8. COPYING

+

Copyright (C) 2012 Giel van Schijndel. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_pacman.html b/src/extra/manual/6.7.0/man7/cdist-type__package_pacman.html new file mode 100644 index 00000000..b1d8b321 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_pacman.html @@ -0,0 +1,462 @@ + + + + + + + + + + + 16.103. cdist-type__package_pacman(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.103. cdist-type__package_pacman(7)

+
+

16.103.1. NAME

+

cdist-type__package_pacman - Manage packages with pacman

+
+
+

16.103.2. DESCRIPTION

+

Pacman is usually used on the Archlinux distribution to manage packages.

+
+
+

16.103.3. REQUIRED PARAMETERS

+

None

+
+
+

16.103.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.103.5. EXAMPLES

+
# Ensure zsh in installed
+__package_pacman zsh --state present
+
+# If you don't want to follow pythonX packages, but always use python
+__package_pacman python --state present --name python2
+
+# Remove obsolete package
+__package_pacman puppet --state absent
+
+
+
+
+

16.103.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.103.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.103.8. COPYING

+

Copyright (C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_pip.html b/src/extra/manual/6.7.0/man7/cdist-type__package_pip.html new file mode 100644 index 00000000..b736b64f --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_pip.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.104. cdist-type__package_pip(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.104. cdist-type__package_pip(7)

+
+

16.104.1. NAME

+

cdist-type__package_pip - Manage packages with pip

+
+
+

16.104.2. DESCRIPTION

+

Pip is used in Python environments to install packages. +It is also included in the python virtualenv environment.

+
+
+

16.104.3. REQUIRED PARAMETERS

+

None

+
+
+

16.104.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
pip

Instead of using pip from PATH, use the specific pip path.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
runas

Run pip as specified user. By default it runs as root.

+
+
+
+
+

16.104.5. EXAMPLES

+
# Install a package
+__package_pip pyro --state present
+
+# Use pip in a virtualenv located at /root/shinken_virtualenv
+__package_pip pyro --state present --pip /root/shinken_virtualenv/bin/pip
+
+# Use pip in a virtualenv located at /foo/shinken_virtualenv as user foo
+__package_pip pyro --state present --pip /foo/shinken_virtualenv/bin/pip --runas foo
+
+
+
+
+

16.104.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.104.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.104.8. COPYING

+

Copyright (C) 2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_pkg_freebsd.html b/src/extra/manual/6.7.0/man7/cdist-type__package_pkg_freebsd.html new file mode 100644 index 00000000..9cab5d44 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_pkg_freebsd.html @@ -0,0 +1,471 @@ + + + + + + + + + + + 16.105. cdist-type__package_pkg_freebsd(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.105. cdist-type__package_pkg_freebsd(7)

+
+

16.105.1. NAME

+

cdist-type__package_pkg_freebsd - Manage FreeBSD packages

+
+
+

16.105.2. DESCRIPTION

+

This type is usually used on FreeBSD to manage packages.

+
+
+

16.105.3. REQUIRED PARAMETERS

+

None

+
+
+

16.105.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
flavor

If supplied, use to avoid ambiguity.

+
+
version

If supplied, use to install a specific version of the package named.

+
+
pkgsite

If supplied, use to install from a specific package repository.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.105.5. EXAMPLES

+
# Ensure zsh is installed
+__package_pkg_freebsd zsh --state present
+
+# Ensure vim is installed, use flavor no_x11
+__package_pkg_freebsd vim --state present --flavor no_x11
+
+# If you don't want to follow pythonX packages, but always use python
+__package_pkg_freebsd python --state present --name python2
+
+# Remove obsolete package
+__package_pkg_freebsd puppet --state absent
+
+
+
+
+

16.105.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.105.7. AUTHORS

+

Jake Guffey <jake.guffey--@--eprotex.com>

+
+
+

16.105.8. COPYING

+

Copyright (C) 2012 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_pkg_openbsd.html b/src/extra/manual/6.7.0/man7/cdist-type__package_pkg_openbsd.html new file mode 100644 index 00000000..7db14be8 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_pkg_openbsd.html @@ -0,0 +1,473 @@ + + + + + + + + + + + 16.106. cdist-type__package_pkg(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.106. cdist-type__package_pkg(7)

+
+

16.106.1. NAME

+

cdist-type__package_pkg - Manage OpenBSD packages

+
+
+

16.106.2. DESCRIPTION

+

This type is usually used on OpenBSD to manage packages.

+
+
+

16.106.3. REQUIRED PARAMETERS

+

None

+
+
+

16.106.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
flavor

If supplied, use to avoid ambiguity.

+
+
version

If supplied, use to avoid ambiguity.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
pkg_path

Manually specify a PKG_PATH to add packages from.

+
+
+
+
+

16.106.5. EXAMPLES

+
# Ensure zsh is installed
+__package_pkg_openbsd zsh --state present
+
+# Ensure vim is installed, use flavor no_x11
+__package_pkg_openbsd vim --state present --flavor no_x11
+
+# If you don't want to follow pythonX packages, but always use python
+__package_pkg_openbsd python --state present --name python2
+
+# Remove obsolete package
+__package_pkg_openbsd puppet --state absent
+
+# Add a package using a particular mirror
+__package_pkg_openbsd bash \
+  --pkg_path http://openbsd.mirrorcatalogs.com/snapshots/packages/amd64
+
+
+
+
+

16.106.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.106.7. AUTHORS

+

Andi Brönnimann <andi-cdist--@--v-net.ch>

+
+
+

16.106.8. COPYING

+

Copyright (C) 2011 Andi Brönnimann. Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_pkgng_freebsd.html b/src/extra/manual/6.7.0/man7/cdist-type__package_pkgng_freebsd.html new file mode 100644 index 00000000..200479e9 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_pkgng_freebsd.html @@ -0,0 +1,505 @@ + + + + + + + + + + + 16.107. cdist-type__package_pkgng_freebsd(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.107. cdist-type__package_pkgng_freebsd(7)

+
+

16.107.1. NAME

+

cdist-type__package_pkgng_freebsd - Manage FreeBSD packages with pkg-ng

+
+
+

16.107.2. DESCRIPTION

+

This type is usually used on FreeBSD to manage packages.

+
+
+

16.107.3. REQUIRED PARAMETERS

+

None

+
+
+

16.107.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
flavor

If supplied, use to avoid ambiguity.

+
+
version

If supplied, use to install a specific version of the package named.

+
+
repo

If supplied, use to install the package named from a particular repo.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.107.5. BOOLEAN PARAMETERS

+
+
upgrade

If supplied, allow upgrading to the latest version of a package.

+
+
+
+
+

16.107.6. CAVEATS

+

This type requires that repository definitions already exist in /etc/pkg/*.conf. +Ensure that they exist prior to use of this type with __file.

+

pkg-ng can't upgrade a package to a specific version. If this type needs to +upgrade a package, it can only ugprade to the latest available version. If the +"upgrade" parameter is not given and an upgrade needs to occur, an error will result.

+
+
+

16.107.7. MESSAGES

+
+
install

The package was installed

+
+
remove

The package was removed

+
+
upgrade

The package was upgraded

+
+
exist

The package was already present and thus not installed

+
+
+
+
+

16.107.8. EXAMPLES

+
# Ensure zsh is installed
+__package_pkgng_freebsd zsh --state present
+
+# Ensure vim is installed, use flavor no_x11
+__package_pkgng_freebsd vim --state present --flavor no_x11
+
+# If you don't want to follow pythonX packages, but always use python
+__package_pkgng_freebsd python --state present --name python2
+
+# Install a package from a particular repository when multiples exist
+__package_pkgng_freebsd bash --state present --repo myrepo
+
+# Remove obsolete package
+__package_pkgng_freebsd puppet --state absent
+
+
+
+
+

16.107.9. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.107.10. AUTHORS

+

Jake Guffey <jake.guffey--@--eprotex.com>

+
+
+

16.107.11. COPYING

+

Copyright (C) 2014 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_rubygem.html b/src/extra/manual/6.7.0/man7/cdist-type__package_rubygem.html new file mode 100644 index 00000000..9d93341c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_rubygem.html @@ -0,0 +1,459 @@ + + + + + + + + + + + 16.108. cdist-type__package_rubygem(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.108. cdist-type__package_rubygem(7)

+
+

16.108.1. NAME

+

cdist-type__package_rubygem - Manage rubygem packages

+
+
+

16.108.2. DESCRIPTION

+

Rubygems is the default package management system for the Ruby programming language.

+
+
+

16.108.3. REQUIRED PARAMETERS

+

None

+
+
+

16.108.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+
+
+

16.108.5. EXAMPLES

+
# Ensure sinatra is installed
+__package_rubygem sinatra --state present
+
+# Remove package
+__package_rubygem rails --state absent
+
+
+
+
+

16.108.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.108.7. AUTHORS

+

Chase Allen James <nx-cdist@nu-ex.com>

+
+
+

16.108.8. COPYING

+

Copyright (C) 2011 Chase Allen James. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_update_index.html b/src/extra/manual/6.7.0/man7/cdist-type__package_update_index.html new file mode 100644 index 00000000..d2bdff63 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_update_index.html @@ -0,0 +1,480 @@ + + + + + + + + + + + 16.109. cdist-type__package_update_index(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.109. cdist-type__package_update_index(7)

+
+

16.109.1. NAME

+

cdist-type__update_index - Update the package index

+
+
+

16.109.2. DESCRIPTION

+

This cdist type allows you to update the package index on the target. +It will automatically use the appropriate package manager.

+
+
+

16.109.3. REQUIRED PARAMETERS

+

None

+
+
+

16.109.4. OPTIONAL PARAMETERS

+
+
type

The package manager to use. Default is determined based on the $os +explorer variable. +e.g. +* apt for Debian +* yum for Red Hat +* pacman for Arch Linux

+
+
maxage

Available for package manager apt and pacman, max time in seconds since +last update. Repo update is skipped if maxage is not reached yet.

+
+
+
+
+

16.109.5. MESSAGES

+
+
apt-cache updated (age was: currage)

apt-cache was updated (run of apt-get update). currage is the time +in seconds since the previous run.

+
+
+
+
+

16.109.6. EXAMPLES

+
# Update the package index on the target
+__package_update_index
+
+# Force use of a specific package manager
+__package_update_index --type apt
+
+# Only update every hour:
+__package_update_index --maxage 3600 --type apt
+
+# same as above (on apt-type systems):
+__package_update_index --maxage 3600
+
+
+
+
+

16.109.7. AUTHORS

+
+
Ricardo Catalinas Jiménez <jimenezrick--@--gmail.com>
+
Thomas Eckert <tom--@--it-eckert.de>
+ +
+
+
+

16.109.8. COPYING

+

Copyright (C) 2014 Ricardo Catalinas Jiménez. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_upgrade_all.html b/src/extra/manual/6.7.0/man7/cdist-type__package_upgrade_all.html new file mode 100644 index 00000000..f544884f --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_upgrade_all.html @@ -0,0 +1,468 @@ + + + + + + + + + + + 16.110. cdist-type__package_upgrade_all(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.110. cdist-type__package_upgrade_all(7)

+
+

16.110.1. NAME

+

cdist-type__package_upgrade_all - Upgrade all the installed packages

+
+
+

16.110.2. DESCRIPTION

+

This cdist type allows you to upgrade all the installed packages on the +target. It will automatically use the appropriate package manager.

+
+
+

16.110.3. REQUIRED PARAMETERS

+

None

+
+
+

16.110.4. OPTIONAL PARAMETERS

+
+
type

The package manager to use. Default is determined based on the $os +explorer variable. +e.g. +* apt for Debian +* yum for Red Hat +* pacman for Arch Linux

+
+
+
+
+

16.110.5. BOOLEAN PARAMETERS

+
+
apt-dist-upgrade

Do dist-upgrade instead of upgrade.

+
+
apt-clean

Clean out the local repository of retrieved package files.

+
+
+
+
+

16.110.6. EXAMPLES

+
# Upgrade all the installed packages on the target
+__package_upgrade_all
+
+# Force use of a specific package manager
+__package_upgrade_all --type apt
+
+
+
+
+

16.110.7. AUTHORS

+

Ricardo Catalinas Jiménez <jimenezrick--@--gmail.com>

+
+
+

16.110.8. COPYING

+

Copyright (C) 2014 Ricardo Catalinas Jiménez. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_yum.html b/src/extra/manual/6.7.0/man7/cdist-type__package_yum.html new file mode 100644 index 00000000..5547ce18 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_yum.html @@ -0,0 +1,469 @@ + + + + + + + + + + + 16.111. cdist-type__package_yum(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.111. cdist-type__package_yum(7)

+
+

16.111.1. NAME

+

cdist-type__package_yum - Manage packages with yum

+
+
+

16.111.2. DESCRIPTION

+

Yum is usually used on the Fedora distribution to manage packages. +If you specify an unknown package, yum will display the +slightly confusing error message "Error: Nothing to do".

+
+
+

16.111.3. REQUIRED PARAMETERS

+

None

+
+
+

16.111.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
url

URL to use for the package

+
+
+
+
+

16.111.5. EXAMPLES

+
# Ensure zsh in installed
+__package_yum zsh --state present
+
+# If you don't want to follow pythonX packages, but always use python
+__package_yum python --state present --name python2
+
+# Remove obsolete package
+__package_yum puppet --state absent
+
+__package epel-release-6-8 \
+    --url http://mirror.switch.ch/ftp/mirror/epel/6/i386/epel-release-6-8.noarch.rpm
+
+
+
+
+

16.111.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.111.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.111.8. COPYING

+

Copyright (C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__package_zypper.html b/src/extra/manual/6.7.0/man7/cdist-type__package_zypper.html new file mode 100644 index 00000000..6ad894b2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__package_zypper.html @@ -0,0 +1,475 @@ + + + + + + + + + + + 16.112. cdist-type__package_zypper(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.112. cdist-type__package_zypper(7)

+
+

16.112.1. NAME

+

cdist-type__package_zypper - Manage packages with zypper

+
+
+

16.112.2. DESCRIPTION

+

Zypper is usually used on the SuSE distribution to manage packages.

+
+
+

16.112.3. REQUIRED PARAMETERS

+

None

+
+
+

16.112.4. OPTIONAL PARAMETERS

+
+
name

If supplied, use the name and not the object id as the package name.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
version

The version of the package to install. Default is to install the version +chosen by the local package manager. For a list of available versions, +have a look at the output of "zypper se -s packagename"

+
+
ptype

Either "package", "patch", "pattern", "product" or "srcpackage", defaults to "package". For a description see man zypper.

+
+
+
+
+

16.112.5. EXAMPLES

+
# Ensure zsh is installed
+__package_zypper zsh --state present
+
+# If you don't want to follow pythonX packages, but always use python
+__package_zypper python --state present --name python2
+
+# Ensure binutils is installed and the version is forced to be 2.23.1-0.19.2
+__package_zypper binutils --state present --version 2.23.1-0.19.2
+
+# Remove package
+__package_zypper cfengine --state absent
+
+# install all packages which belongs to pattern x11
+__package_zypper x11 --ptype pattern --state present
+
+
+
+
+

16.112.6. SEE ALSO

+

cdist-type__package(7)

+
+
+

16.112.7. AUTHORS

+

Daniel Heule <hda--@--sfs.biz>

+
+
+

16.112.8. COPYING

+

Copyright (C) 2012 Nico Schottelius. +Copyright (C) 2013 Daniel Heule. +You can redistribute it and/or modify it under the terms of the +GNU General Public License as published by the Free Software Foundation, +either version 3 of the License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__pacman_conf.html b/src/extra/manual/6.7.0/man7/cdist-type__pacman_conf.html new file mode 100644 index 00000000..1b01e960 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__pacman_conf.html @@ -0,0 +1,475 @@ + + + + + + + + + + + 16.113. cdist-type__pacman_conf(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.113. cdist-type__pacman_conf(7)

+
+

16.113.1. NAME

+

cdist-type__pacman_conf - Manage pacman configuration

+
+
+

16.113.2. DESCRIPTION

+

The type allows you to configure options section, add or delete repositories and manage mirrorlists

+
+
+

16.113.3. REQUIRED PARAMETERS

+
+
section

'options' for configure options section

+

Otherwise it specifies a repository or a plain file

+
+
key

Specifies the key which will be set

+

If section = 'options' or file is not set the key will +be checked against available keys from pacman.conf

+
+
value

Specifies the value which will be set against the key

+
+
+
+
+

16.113.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
file

Specifies the filename.

+

The managed file will be named like 'plain_file_filename'

+

If supplied the key will not be checked.

+
+
+
+
+

16.113.5. EXAMPLES

+
# Manage options section in pacman.conf
+__pacman_conf options_Architecture --section options --key Architecture --value auto
+
+# Add new repository
+__pacman_conf localrepo_Server --section localrepo --key Server --value "file:///var/cache/pacman/pkg"
+
+# Add mirror to a mirrorlist
+__pacman_conf customlist_Server --file customlist --section customlist --key Server\
+    --value "file:///var/cache/pacman/pkg"
+
+
+
+
+

16.113.6. SEE ALSO

+

grep(1)

+
+
+

16.113.7. AUTHORS

+

Dominique Roux <dominique.roux4@gmail.com>

+
+
+

16.113.8. COPYING

+

Copyright (C) 2015 Dominique Roux. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__pacman_conf_integrate.html b/src/extra/manual/6.7.0/man7/cdist-type__pacman_conf_integrate.html new file mode 100644 index 00000000..9839da6c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__pacman_conf_integrate.html @@ -0,0 +1,457 @@ + + + + + + + + + + + 16.114. cdist-type__pacman_conf_integrate(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.114. cdist-type__pacman_conf_integrate(7)

+
+

16.114.1. NAME

+

cdist-type__pacman_conf_integrate - Integrate default pacman.conf to cdist conform and vice versa

+
+
+

16.114.2. DESCRIPTION

+

The type allows you to convert the default pacman.conf to a cdist conform one and vice versa

+
+
+

16.114.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.114.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent', defaults to 'present'

+
+
+
+
+

16.114.5. EXAMPLES

+
# Convert normal to cdist conform
+__pacman_conf_integrate convert
+
+# Convert cdist conform to normal
+__pacman_conf_integrate convert --state absent
+
+
+
+
+

16.114.6. SEE ALSO

+

grep(1)

+
+
+

16.114.7. AUTHORS

+

Dominique Roux <dominique.roux4@gmail.com>

+
+
+

16.114.8. COPYING

+

Copyright (C) 2015 Dominique Roux. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__pf_apply_anchor.html b/src/extra/manual/6.7.0/man7/cdist-type__pf_apply_anchor.html new file mode 100644 index 00000000..0ebc873e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__pf_apply_anchor.html @@ -0,0 +1,466 @@ + + + + + + + + + + + 16.115. cdist-type__pf_apply_anchor(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.115. cdist-type__pf_apply_anchor(7)

+
+

16.115.1. NAME

+

cdist-type__pf_apply_anchor - Apply a pf(4) anchor on $__target_host

+
+
+

16.115.2. DESCRIPTION

+

This type is used on *BSD systems to manage anchors for the pf firewall.

+

Notice this type does not take care of copying the ruleset, that must be +done by the user with, e.g. __file.

+
+
+

16.115.3. OPTIONAL PARAMETERS

+
+
anchor_name

The name of the anchor to apply. If not set, ${__object_id} is used. +This type requires /etc/pf.d/${anchor_name} to exist on +$__target_host.

+
+
+
+
+

16.115.4. EXAMPLES

+
# Copy anchor file to ${__target_host}
+__file "/etc/pf.d/80_dns" --source - <<EOF
+# Managed remotely, changes will be lost
+
+pass quick proto {tcp,udp} from any to any port domain
+EOF
+
+# Apply the anchor
+require="__file/etc/pf.d/80_dns" __pf_apply_anchor 80_dns
+# This is roughly equivalent to:
+#   pfctl -a "${anchor_name}" -f "/etc/pf.d/${anchor_name}"
+
+
+
+
+

16.115.5. SEE ALSO

+

pf(4)

+
+
+

16.115.6. AUTHORS

+

Evilham <contact--@--evilham.com> +Kamila Součková <coding--@--kamila.is> +Jake Guffey <jake.guffey--@--eprotex.com>

+
+
+

16.115.7. COPYING

+

Copyright (C) 2020 Evilham. +Copyright (C) 2016 Kamila Součková. +Copyright (C) 2012 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__pf_ruleset.html b/src/extra/manual/6.7.0/man7/cdist-type__pf_ruleset.html new file mode 100644 index 00000000..8e6d6918 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__pf_ruleset.html @@ -0,0 +1,465 @@ + + + + + + + + + + + 16.116. cdist-type__pf_ruleset(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.116. cdist-type__pf_ruleset(7)

+
+

16.116.1. NAME

+

cdist-type__pf_ruleset - Copy a pf(4) ruleset to $__target_host

+
+
+

16.116.2. DESCRIPTION

+

This type is used on *BSD systems to manage the pf firewall's ruleset.

+

It will also enable and disable the pf firewall as requested in the state +parameter.

+
+
+

16.116.3. REQUIRED PARAMETERS

+
+
state

Either "absent" (no ruleset at all) or "present", defaults to "present".

+
+
+
+
+

16.116.4. OPTIONAL PARAMETERS

+
+
source

Required when state is "present". +Defines the ruleset to load onto the $__target_host for pf(4).

+
+
+
+
+

16.116.5. EXAMPLES

+
# Remove the current ruleset in place and disable pf
+__pf_ruleset --state absent
+
+# Enable pf with the ruleset defined in $__manifest/files/pf.conf
+__pf_ruleset --state present --source $__manifest/files/pf.conf
+
+
+
+
+

16.116.6. SEE ALSO

+

pf(4)

+
+
+

16.116.7. AUTHORS

+

Kamila Součková <coding--@--kamila.is> +Jake Guffey <jake.guffey--@--eprotex.com>

+
+
+

16.116.8. COPYING

+

Copyright (C) 2016 Kamila Součková. +Copyright (C) 2012 Jake Guffey. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ping.html b/src/extra/manual/6.7.0/man7/cdist-type__ping.html new file mode 100644 index 00000000..8b990c88 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ping.html @@ -0,0 +1,446 @@ + + + + + + + + + + + 16.117. cdist-type__ping(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.117. cdist-type__ping(7)

+
+

16.117.1. NAME

+

cdist-type__ping - Try to connect to host and return 'pong' on success

+
+
+

16.117.2. DESCRIPTION

+

A simple type which tries to connect to a remote host and runs a simple command +to ensure everything is working.

+
+
+

16.117.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.117.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.117.5. EXAMPLES

+
__ping
+
+
+
+
+

16.117.6. AUTHORS

+

Olliver Schinagl <oliver--@--schinagl.nl>

+
+
+

16.117.7. COPYING

+

Copyright (C) 2018 Schinagl. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postfix.html b/src/extra/manual/6.7.0/man7/cdist-type__postfix.html new file mode 100644 index 00000000..d8e2246b --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postfix.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.118. cdist-type__postfix(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.118. cdist-type__postfix(7)

+
+

16.118.1. NAME

+

cdist-type__postfix - Install postfix

+
+
+

16.118.2. DESCRIPTION

+

This space intentionally left blank.

+
+
+

16.118.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.118.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.118.5. EXAMPLES

+
__postfix
+
+
+
+
+

16.118.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.118.7. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postfix_master.html b/src/extra/manual/6.7.0/man7/cdist-type__postfix_master.html new file mode 100644 index 00000000..beec0267 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postfix_master.html @@ -0,0 +1,487 @@ + + + + + + + + + + + 16.119. cdist-type__postfix_master(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.119. cdist-type__postfix_master(7)

+
+

16.119.1. NAME

+

cdist-type__postfix_master - Configure postfix master.cf

+
+
+

16.119.2. DESCRIPTION

+

See master(5) for more information.

+
+
+

16.119.3. REQUIRED PARAMETERS

+
+
type

See master(5)

+
+
command

See master(5)

+
+
+
+
+

16.119.4. BOOLEAN PARAMETERS

+
+
noreload

don't reload postfix after changes

+
+
+
+
+

16.119.5. OPTIONAL PARAMETERS

+
+
state

present or absent, defaults to present

+
+
+

service

+

private

+

unpriv

+

chroot

+

wakeup

+

maxproc

+
+
option

Pass an option to a service. Same as using -o in master.cf. +Can be specified multiple times.

+
+
comment

a textual comment to add with the master.cf entry

+
+
+
+
+

16.119.6. EXAMPLES

+
__postfix_master smtp --type inet --command smtpd
+
+__postfix_master smtp --type inet --chroot y --command smtpd \
+   --option smtpd_enforce_tls=yes \
+   --option smtpd_sasl_auth_enable=yes \
+   --option smtpd_client_restrictions=permit_sasl_authenticated,reject
+
+__postfix_master submission --type inet --command smtpd \
+   --comment "Run alternative smtp on submission port"
+
+
+
+
+

16.119.7. SEE ALSO

+

master(5)

+
+
+

16.119.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.119.9. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postfix_postconf.html b/src/extra/manual/6.7.0/man7/cdist-type__postfix_postconf.html new file mode 100644 index 00000000..58ceff37 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postfix_postconf.html @@ -0,0 +1,460 @@ + + + + + + + + + + + 16.120. cdist-type__postfix_postconf(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.120. cdist-type__postfix_postconf(7)

+
+

16.120.1. NAME

+

cdist-type__postfix_postconf - Configure postfix main.cf

+
+
+

16.120.2. DESCRIPTION

+

See postconf(5) for possible keys and values.

+

Note that this type directly runs the postconf executable. +It does not make changes to /etc/postfix/main.cf itself.

+
+
+

16.120.3. REQUIRED PARAMETERS

+
+
value

the value for the postfix parameter

+
+
+
+
+

16.120.4. OPTIONAL PARAMETERS

+
+
key

the name of the parameter. Defaults to __object_id

+
+
+
+
+

16.120.5. EXAMPLES

+
__postfix_postconf mydomain --value somedomain.com
+
+__postfix_postconf bind-to-special-ip --key smtp_bind_address --value 127.0.0.5
+
+
+
+
+

16.120.6. SEE ALSO

+

postconf(5)

+
+
+

16.120.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.120.8. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postfix_postmap.html b/src/extra/manual/6.7.0/man7/cdist-type__postfix_postmap.html new file mode 100644 index 00000000..e6574fc7 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postfix_postmap.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.121. cdist-type__postfix_postmap(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.121. cdist-type__postfix_postmap(7)

+
+

16.121.1. NAME

+

cdist-type__postfix_postmap - Run postmap on the given file

+
+
+

16.121.2. DESCRIPTION

+

This space intentionally left blank.

+
+
+

16.121.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.121.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.121.5. EXAMPLES

+
__postfix_postmap /etc/postfix/generic
+
+
+
+
+

16.121.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.121.7. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postfix_reload.html b/src/extra/manual/6.7.0/man7/cdist-type__postfix_reload.html new file mode 100644 index 00000000..54219e7d --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postfix_reload.html @@ -0,0 +1,445 @@ + + + + + + + + + + + 16.122. cdist-type__postfix_reload(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.122. cdist-type__postfix_reload(7)

+
+

16.122.1. NAME

+

cdist-type__postfix_reload - Tell postfix to reload its configuration

+
+
+

16.122.2. DESCRIPTION

+

This space intentionally left blank.

+
+
+

16.122.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.122.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.122.5. EXAMPLES

+
__postfix_reload
+
+
+
+
+

16.122.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.122.7. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postgres_database.html b/src/extra/manual/6.7.0/man7/cdist-type__postgres_database.html new file mode 100644 index 00000000..70d72769 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postgres_database.html @@ -0,0 +1,458 @@ + + + + + + + + + + + 16.123. cdist-type__postgres_database(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.123. cdist-type__postgres_database(7)

+
+

16.123.1. NAME

+

cdist-type__postgres_database - Create/drop postgres databases

+
+
+

16.123.2. DESCRIPTION

+

This cdist type allows you to create or drop postgres databases.

+
+
+

16.123.3. OPTIONAL PARAMETERS

+
+
state

Either 'present' or 'absent', defaults to 'present'.

+
+
owner

Specifies the database user who will own the new database.

+
+
encoding

Specifies the character encoding scheme to be used in this database.

+
+
lc-collate

Specifies the LC_COLLATE setting to be used in this database.

+
+
lc-ctype

Specifies the LC_CTYPE setting to be used in this database.

+
+
template

Specifies the template database from which to build this database.

+
+
+
+
+

16.123.4. EXAMPLES

+
__postgres_database mydbname --owner mydbusername
+
+
+
+
+

16.123.5. SEE ALSO

+

cdist-type__postgres_role(7)

+
+
+

16.123.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.123.7. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postgres_extension.html b/src/extra/manual/6.7.0/man7/cdist-type__postgres_extension.html new file mode 100644 index 00000000..ad044517 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postgres_extension.html @@ -0,0 +1,461 @@ + + + + + + + + + + + 16.124. cdist-type__postgres_extension(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.124. cdist-type__postgres_extension(7)

+
+

16.124.1. NAME

+

cdist-type__postgres_extension - manage postgres extensions

+
+
+

16.124.2. DESCRIPTION

+

This cdist type allows you to create or drop postgres extensions.

+

The object you need to pass to __postgres_extension consists of +the database name and the extension name joined by a colon in the +following form:

+
dbname:extension
+
+
+

f.ex.

+
rails_test:unaccent
+
+
+
+
+

16.124.3. OPTIONAL PARAMETERS

+
+
state

either "present" or "absent", defaults to "present"

+
+
+
+
+

16.124.4. EXAMPLES

+
__postgres_extension           rails_test:unaccent
+__postgres_extension --present rails_test:unaccent
+__postgres_extension --absent  rails_test:unaccent
+
+
+
+
+

16.124.5. SEE ALSO

+

cdist-type__postgre_database(7)

+

Postgres "Create Extension" documentation at: <http://www.postgresql.org/docs/current/static/sql-createextension.html>.

+
+
+

16.124.6. AUTHOR

+

Tomas Pospisek <tpo_deb--@--sourcepole.ch>

+
+
+

16.124.7. COPYING

+

Copyright (C) 2014 Tomas Pospisek. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__postgres_role.html b/src/extra/manual/6.7.0/man7/cdist-type__postgres_role.html new file mode 100644 index 00000000..c99afdb6 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__postgres_role.html @@ -0,0 +1,470 @@ + + + + + + + + + + + 16.125. cdist-type__postgres_role(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.125. cdist-type__postgres_role(7)

+
+

16.125.1. NAME

+

cdist-type__postgres_role - Manage postgres roles

+
+
+

16.125.2. DESCRIPTION

+

This cdist type allows you to create or drop postgres roles.

+
+
+

16.125.3. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
+

All other parameters map directly to the corresponding postgres createrole +parameters.

+

password

+
+
+

16.125.4. BOOLEAN PARAMETERS

+

All parameter map directly to the corresponding postgres createrole +parameters.

+

login +createdb +createrole +superuser +inherit

+
+
+

16.125.5. EXAMPLES

+
__postgres_role myrole
+
+__postgres_role myrole --password 'secret'
+
+__postgres_role admin --password 'very-secret' --superuser
+
+__postgres_role dbcustomer --password 'bla' --createdb
+
+
+
+
+

16.125.6. SEE ALSO

+

cdist-type__postgres_database(7)

+

postgresql documentation at: +<http://www.postgresql.org/docs/current/static/sql-createrole.html>.

+
+
+

16.125.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.125.8. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__process.html b/src/extra/manual/6.7.0/man7/cdist-type__process.html new file mode 100644 index 00000000..66afe61e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__process.html @@ -0,0 +1,488 @@ + + + + + + + + + + + 16.126. cdist-type__process(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.126. cdist-type__process(7)

+
+

16.126.1. NAME

+

cdist-type__process - Start or stop process

+
+
+

16.126.2. DESCRIPTION

+

This cdist type allows you to define the state of a process.

+
+
+

16.126.3. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
name

Process name to match on when using pgrep -f -x.

+

This is useful, if the name starts with a "/", +because the leading slash is stripped away from +the object id by cdist.

+
+
stop

Executable to use for stopping the process.

+
+
start

Executable to use for starting the process.

+
+
+
+
+

16.126.4. MESSAGES

+
+
started

The process was started.

+
+
stopped

The process was stopped.

+
+
+
+
+

16.126.5. EXAMPLES

+
# Start if not running
+__process /usr/sbin/syslog-ng --state present
+
+# Start if not running with a different binary
+__process /usr/sbin/nginx --state present --start "/etc/rc.d/nginx start"
+
+# Stop the process using kill (the type default) - DO NOT USE THIS
+__process /usr/sbin/sshd --state absent
+
+# Stop the process using /etc/rc.d/sshd stop - THIS ONE NOT AS WELL
+__process /usr/sbin/sshd --state absent --stop "/etc/rc.d/sshd stop"
+
+# Ensure cups is running, which runs with -C ...:
+__process cups --start "/etc/rc.d/cups start" --state present \
+   --name "/usr/sbin/cupsd -C /etc/cups/cupsd.conf"
+
+# Ensure rpc.statd is running (which usually runs with -L) using a regexp
+__process rpcstatd --state present --start "/etc/init.d/statd start" \
+    --name "rpc.statd.*"
+
+
+
+
+

16.126.6. SEE ALSO

+

cdist-type__start_on_boot(7)

+
+
+

16.126.7. AUTHORS

+
+ +
Thomas Eckert <tom--@--it-eckert.de>
+
+
+
+

16.126.8. COPYING

+

Copyright (C) 2011-2012 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__prometheus_alertmanager.html b/src/extra/manual/6.7.0/man7/cdist-type__prometheus_alertmanager.html new file mode 100644 index 00000000..e4f7c770 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__prometheus_alertmanager.html @@ -0,0 +1,471 @@ + + + + + + + + + + + 16.127. cdist-type__prometheus_alertmanager(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.127. cdist-type__prometheus_alertmanager(7)

+
+

16.127.1. NAME

+

cdist-type__prometheus_alertmanager - install Alertmanager

+
+
+

16.127.2. DESCRIPTION

+

Install and configure Prometheus Alertmanager (https://prometheus.io/docs/alerting/alertmanager/).

+

Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter --install-from-backports helps.)

+
+
+

16.127.3. REQUIRED PARAMETERS

+
+
config

Alertmanager configuration file. It will be saved as /etc/alertmanager/alertmanager.yml on the target.

+
+
+
+
+

16.127.4. OPTIONAL PARAMETERS

+
+
storage-path

Where to put data. Default: /data/alertmanager. (Directory will be created if needed.)

+
+
retention-days

How long to retain data. Default: 90 days.

+
+
+
+
+

16.127.5. BOOLEAN PARAMETERS

+
+
install-from-backports

Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version.

+
+
+
+
+

16.127.6. EXAMPLES

+
__prometheus_alertmanager \
+    --install-from-backports \
+    --config "$__manifest/files/alertmanager.yml" \
+    --storage-path /data/alertmanager
+
+
+
+
+

16.127.7. SEE ALSO

+

cdist-type__prometheus_server(7), cdist-type__grafana_dashboard(7), +Prometheus alerting documentation: https://prometheus.io/docs/alerting/overview/

+
+
+

16.127.8. AUTHORS

+

Kamila Součková <kamila--@--ksp.sk>

+
+
+

16.127.9. COPYING

+

Copyright (C) 2018 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__prometheus_exporter.html b/src/extra/manual/6.7.0/man7/cdist-type__prometheus_exporter.html new file mode 100644 index 00000000..465fe0eb --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__prometheus_exporter.html @@ -0,0 +1,477 @@ + + + + + + + + + + + 16.128. cdist-type__prometheus_exporter(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.128. cdist-type__prometheus_exporter(7)

+
+

16.128.1. NAME

+

cdist-type__prometheus_exporter - install some Prometheus exporters

+
+
+

16.128.2. DESCRIPTION

+

Install and configure some exporters to be used by the Prometheus monitoring system (https://prometheus.io/).

+

This type creates a daemontools-compatible service directory under /service/$__object_id. +Daemontools (or something compatible) must be installed (in particular, the command svc must be executable).

+

This type installs and builds the latest version from git, using go get. A recent version of golang as well +as build tools (make, g++, etc.) must be available.

+

Currently supported exporters:

+
    +
  • node

  • +
  • blackbox

  • +
  • ceph

  • +
+
+
+

16.128.3. REQUIRED PARAMETERS

+

None

+
+
+

16.128.4. OPTIONAL PARAMETERS

+
+
exporter

Which exporter to install and configure. Default: $__object_id. +Currently supported: node, blackbox, ceph.

+
+
+
+
+

16.128.5. BOOLEAN PARAMETERS

+
+
add-consul-service

Add this exporter as a Consul service for automatic service discovery.

+
+
+
+
+

16.128.6. EXAMPLES

+
__daemontools
+__golang_from_vendor --version 1.9  # required for prometheus and many exporters
+
+require="__daemontools __golang_from_vendor" __prometheus_exporter node
+
+
+
+
+

16.128.7. SEE ALSO

+

cdist-type__daemontools(7), cdist-type__golang_from_vendor(7), +cdist-type__prometheus_server(7), +Prometheus documentation: https://prometheus.io/docs/introduction/overview/

+
+
+

16.128.8. AUTHORS

+

Kamila Součková <kamila--@--ksp.sk>

+
+
+

16.128.9. COPYING

+

Copyright (C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__prometheus_server.html b/src/extra/manual/6.7.0/man7/cdist-type__prometheus_server.html new file mode 100644 index 00000000..16379c9e --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__prometheus_server.html @@ -0,0 +1,478 @@ + + + + + + + + + + + 16.129. cdist-type__prometheus_server(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.129. cdist-type__prometheus_server(7)

+
+

16.129.1. NAME

+

cdist-type__prometheus_server - install Prometheus

+
+
+

16.129.2. DESCRIPTION

+

Install and configure Prometheus (https://prometheus.io/).

+

Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter --install-from-backports helps.)

+
+
+

16.129.3. REQUIRED PARAMETERS

+
+
config

Prometheus configuration file. It will be saved as /etc/prometheus/prometheus.yml on the target.

+
+
+
+
+

16.129.4. OPTIONAL PARAMETERS

+
+
retention-days

How long to keep data. Default: 30

+
+
rule-files

Path to rule files. They will be installed under /etc/prometheus/<filename>. You need to include rule_files: [/etc/prometheus/<your-pattern>] in the config file if you use this.

+
+
storage-path

Where to put data. Default: /data/prometheus. (Directory will be created if needed.)

+
+
+
+
+

16.129.5. BOOLEAN PARAMETERS

+
+
install-from-backports

Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version.

+
+
+
+
+

16.129.6. EXAMPLES

+
PROMPORT=9090
+ALERTPORT=9093
+
+__prometheus_server \
+    --install-from-backports \
+    --config "$__manifest/files/prometheus.yml" \
+    --retention-days 14 \
+    --storage-path /data/prometheus \
+    --rule-files "$__manifest/files/*.rules"
+
+
+
+
+

16.129.7. SEE ALSO

+

cdist-type__prometheus_alertmanager(7), cdist-type__grafana_dashboard(7), +Prometheus documentation: https://prometheus.io/docs/introduction/overview/

+
+
+

16.129.8. AUTHORS

+

Kamila Součková <kamila--@--ksp.sk>

+
+
+

16.129.9. COPYING

+

Copyright (C) 2018 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__pyvenv.html b/src/extra/manual/6.7.0/man7/cdist-type__pyvenv.html new file mode 100644 index 00000000..ca08fe32 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__pyvenv.html @@ -0,0 +1,469 @@ + + + + + + + + + + + 16.130. cdist-type__pyvenv(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.130. cdist-type__pyvenv(7)

+
+

16.130.1. NAME

+

cdist-type__pyvenv - Create or remove python virtual environment

+
+
+

16.130.2. DESCRIPTION

+

This cdist type allows you to create or remove python virtual +environment using pyvenv on python3 -m venv. +It assumes pyvenv is already installed. Concrete package depends +on concrete OS and/or OS version/distribution. +Ensure this for e.g. in your init manifest as in the following example:

+
+
+

16.130.3. REQUIRED PARAMETERS

+

None

+
+
+

16.130.4. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
group

Group to chgrp to

+
+
mode

Unix permissions, suitable for chmod

+
+
owner

User to chown to

+
+
pyvenv

Use this specific pyvenv

+
+
venvparams

Specific parameters to pass to pyvenv invocation

+
+
+
+
+

16.130.5. EXAMPLES

+
__pyvenv /home/services/djangoenv
+
+# Use specific pyvenv
+__pyvenv /home/foo/fooenv --pyvenv /usr/local/bin/pyvenv-3.4
+
+# Create python virtualenv for user foo.
+__pyvenv /home/foo/fooenv --group foo --user foo
+
+# Create python virtualenv with specific parameters.
+__pyvenv /home/services/djangoenv --venvparams "--copies --system-site-packages"
+
+
+
+
+

16.130.6. AUTHORS

+

Darko Poljak <darko.poljak--@--gmail.com>

+
+
+

16.130.7. COPYING

+

Copyright (C) 2016 Darko Poljak. Free use of this software is +granted under the terms of the GNU General Public License v3 or later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__qemu_img.html b/src/extra/manual/6.7.0/man7/cdist-type__qemu_img.html new file mode 100644 index 00000000..3ff1b7db --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__qemu_img.html @@ -0,0 +1,456 @@ + + + + + + + + + + + 16.131. cdist-type__qemu_img(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.131. cdist-type__qemu_img(7)

+
+

16.131.1. NAME

+

cdist-type__qemu_img - Manage VM disk images

+
+
+

16.131.2. DESCRIPTION

+

The qemu-img program is used to create qemu images for +qemu and (qemu-)kvm.

+
+
+

16.131.3. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
size

Size of the image in qemu-img compatible units.

+

Required if state is "present".

+
+
+
+
+

16.131.4. EXAMPLES

+
# Create a 50G size image
+__qemu_img /home/services/kvm/vm/myvmname/system-disk --size 50G
+
+# Remove image
+__qemu_img /home/services/kvm/vm/myoldvm/system-disk --state absent
+
+
+
+
+

16.131.5. SEE ALSO

+

qemu-img(1)

+
+
+

16.131.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.131.7. COPYING

+

Copyright (C) 2012-2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__rbenv.html b/src/extra/manual/6.7.0/man7/cdist-type__rbenv.html new file mode 100644 index 00000000..1611367d --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__rbenv.html @@ -0,0 +1,453 @@ + + + + + + + + + + + 16.132. cdist-type__rbenv(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.132. cdist-type__rbenv(7)

+
+

16.132.1. NAME

+

cdist-type__rbenv - Manage rbenv installation

+
+
+

16.132.2. DESCRIPTION

+

This cdist type allows you to manage rbenv installations. +It also installs ruby-build.

+
+
+

16.132.3. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
owner

Which user should own the rbenv installation, defaults to root

+
+
+
+
+

16.132.4. EXAMPLES

+
# Install rbenv including ruby-build for nico
+__rbenv /home/nico
+
+# Install rbenv including ruby-build for nico
+__rbenv /home/nico --owner nico
+
+# Bastian does not need rbenv anymore, he began to code C99
+__rbenv /home/bastian --state absent
+
+
+
+
+

16.132.5. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.132.6. COPYING

+

Copyright (C) 2012-2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__rsync.html b/src/extra/manual/6.7.0/man7/cdist-type__rsync.html new file mode 100644 index 00000000..c766580a --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__rsync.html @@ -0,0 +1,517 @@ + + + + + + + + + + + 16.133. cdist-type__rsync(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.133. cdist-type__rsync(7)

+
+

16.133.1. NAME

+

cdist-type__rsync - Mirror directories using rsync

+
+
+

16.133.2. DESCRIPTION

+

WARNING: This type is of BETA quality:

+
    +
  • it has not been tested widely

  • +
  • interfaces may change

  • +
  • if there is a better approach to solve the problem -> the type may even vanish

  • +
+

If you are fine with these constraints, please read on.

+

This cdist type allows you to mirror local directories to the +target host using rsync. Rsync will be installed in the manifest of the type. +If group or owner are giveng, a recursive chown will be executed on the +target host.

+

A slash will be appended to the source directory so that only the contents +of the directory are taken and not the directory name itself.

+
+
+

16.133.3. REQUIRED PARAMETERS

+
+
source

Where to take files from

+
+
+
+
+

16.133.4. OPTIONAL PARAMETERS

+
+
group

Group to chgrp to.

+
+
owner

User to chown to.

+
+
destination

Use this as the base destination instead of the object id

+
+
remote-user

Use this user instead of the default "root" for rsync operations.

+
+
+
+
+

16.133.5. OPTIONAL MULTIPLE PARAMETERS

+
+
rsync-opts

Use this option to give rsync options with. +See rsync(1) for available options. +Only "--" options are supported. +Write the options without the beginning "--" +Can be specified multiple times.

+
+
+
+
+

16.133.6. MESSAGES

+

NONE

+
+
+

16.133.7. EXAMPLES

+
# You can use any source directory
+__rsync /tmp/testdir \
+    --source /etc
+
+# Use source from type
+__rsync /etc \
+    --source "$__type/files/package"
+
+# Allow multiple __rsync objects to write to the same dir
+__rsync mystuff \
+    --destination /usr/local/bin \
+    --source "$__type/files/package"
+
+__rsync otherstuff \
+    --destination /usr/local/bin \
+    --source "$__type/files/package2"
+
+# Use rsync option --exclude
+__rsync /tmp/testdir \
+    --source /etc \
+    --rsync-opts exclude=sshd_conf
+
+# Use rsync with multiple options --exclude --dry-run
+__rsync /tmp/testing \
+    --source /home/tester \
+    --rsync-opts exclude=id_rsa \
+    --rsync-opts dry-run
+
+
+
+
+

16.133.8. SEE ALSO

+

rsync(1)

+
+
+

16.133.9. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.133.10. COPYING

+

Copyright (C) 2015 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__rvm.html b/src/extra/manual/6.7.0/man7/cdist-type__rvm.html new file mode 100644 index 00000000..7ca70926 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__rvm.html @@ -0,0 +1,451 @@ + + + + + + + + + + + 16.134. cdist-type__rvm(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.134. cdist-type__rvm(7)

+
+

16.134.1. NAME

+

cdist-type__rvm - Install rvm for a given user

+
+
+

16.134.2. DESCRIPTION

+

RVM is the Ruby enVironment Manager for the Ruby programming language.

+
+
+

16.134.3. REQUIRED PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present".

+
+
+
+
+

16.134.4. EXAMPLES

+
# Install rvm for user billie
+__rvm billie --state present
+
+# Remove rvm
+__rvm billie --state absent
+
+
+
+
+

16.134.5. SEE ALSO

+

cdist-type__rvm_gem(7), cdist-type__rvm_gemset(7), +cdist-type__rvm_ruby(7)

+
+
+

16.134.6. AUTHORS

+

Evax Software <contact@evax.fr>

+
+
+

16.134.7. COPYING

+

Copyright (C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__rvm_gem.html b/src/extra/manual/6.7.0/man7/cdist-type__rvm_gem.html new file mode 100644 index 00000000..c8b6c8fb --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__rvm_gem.html @@ -0,0 +1,467 @@ + + + + + + + + + + + 16.135. cdist-type__rvm_gemset(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.135. cdist-type__rvm_gemset(7)

+
+

16.135.1. NAME

+

cdist-type__rvm_gemset - Manage Ruby gems through rvm

+
+
+

16.135.2. DESCRIPTION

+

RVM is the Ruby enVironment Manager for the Ruby programming language.

+
+
+

16.135.3. REQUIRED PARAMETERS

+
+
user

The remote user account to use

+
+
gemset

The gemset to use

+
+
state

Either "present" or "absent", defaults to "present".

+
+
+
+
+

16.135.4. OPTIONAL PARAMETERS

+
+
default

Make the selected gemset the default

+
+
+
+
+

16.135.5. EXAMPLES

+
# Install the rails gem in gemset ruby-1.9.3-p0@myset for user bill
+__rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill --state present
+
+# Do the same and also make ruby-1.9.3-p0@myset the default gemset
+__rvm_gemset rails --gemset ruby-1.9.3-p0@myset --user bill \
+                   --state present --default
+
+# Remove it
+__rvm_ruby rails --gemset ruby-1.9.3-p0@myset --user bill --state absent
+
+
+
+
+

16.135.6. SEE ALSO

+

cdist-type__rvm(7), cdist-type__rvm_gemset(7), +cdist-type__rvm_ruby(7)

+
+
+

16.135.7. AUTHORS

+

Evax Software <contact@evax.fr>

+
+
+

16.135.8. COPYING

+

Copyright (C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__rvm_gemset.html b/src/extra/manual/6.7.0/man7/cdist-type__rvm_gemset.html new file mode 100644 index 00000000..57b1c3a2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__rvm_gemset.html @@ -0,0 +1,464 @@ + + + + + + + + + + + 16.136. cdist-type__rvm_gemset(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.136. cdist-type__rvm_gemset(7)

+
+

16.136.1. NAME

+

cdist-type__rvm_gemset - Manage gemsets through rvm

+
+
+

16.136.2. DESCRIPTION

+

RVM is the Ruby enVironment Manager for the Ruby programming language.

+
+
+

16.136.3. REQUIRED PARAMETERS

+
+
user

The remote user account to use

+
+
state

Either "present" or "absent", defaults to "present".

+
+
+
+
+

16.136.4. BOOLEAN PARAMETERS

+
+
default

If present, set the given gemset as default.

+
+
+
+
+

16.136.5. EXAMPLES

+
# Install the gemset @myset for user charles on based on ruby-1.9.3-0
+__rvm_gemset ruby-1.9.3-p0@myset --user charles --state present
+
+# Do the same and make ruby-1.9.3-p0@myset the default gemset
+__rvm_gemset ruby-1.9.3-p0@myset --user charles --state present --default
+
+# Remove the gemset @myset for user john
+__rvm_ruby ruby-1.9.3-p0@myset --user john --state absent
+
+
+
+
+

16.136.6. SEE ALSO

+

cdist-type__rvm(7), cdist-type__rvm_gem(7), +cdist-type__rvm_ruby(7)

+
+
+

16.136.7. AUTHORS

+

Evax Software <contact@evax.fr>

+
+
+

16.136.8. COPYING

+

Copyright (C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__rvm_ruby.html b/src/extra/manual/6.7.0/man7/cdist-type__rvm_ruby.html new file mode 100644 index 00000000..7aa0a3be --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__rvm_ruby.html @@ -0,0 +1,464 @@ + + + + + + + + + + + 16.137. cdist-type__rvm_ruby(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.137. cdist-type__rvm_ruby(7)

+
+

16.137.1. NAME

+

cdist-type__rvm_ruby - Manage ruby installations through rvm

+
+
+

16.137.2. DESCRIPTION

+

RVM is the Ruby enVironment Manager for the Ruby programming language.

+
+
+

16.137.3. REQUIRED PARAMETERS

+
+
user

The remote user account to use

+
+
state

Either "present" or "absent", defaults to "present".

+
+
+
+
+

16.137.4. BOOLEAN PARAMETERS

+
+
default

Set the given version as default

+
+
+
+
+

16.137.5. EXAMPLES

+
# Install ruby 1.9.3 through rvm for user thelonious
+__rvm_ruby ruby-1.9.3-p0 --user thelonious --state present
+
+# Install ruby 1.9.3 through rvm for user ornette and make it the default
+__rvm_ruby ruby-1.9.3-p0 --user ornette --state present --default
+
+# Remove ruby 1.9.3 for user john
+__rvm_ruby ruby-1.9.3-p0 --user john --state absent
+
+
+
+
+

16.137.6. SEE ALSO

+

cdist-type__rvm(7), cdist-type__rvm_gem(7), +cdist-type__rvm_gemset(7)

+
+
+

16.137.7. AUTHORS

+

Evax Software <contact@evax.fr>

+
+
+

16.137.8. COPYING

+

Copyright (C) 2012 Evax Software. Free use of this software is granted under +the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__sensible_editor.html b/src/extra/manual/6.7.0/man7/cdist-type__sensible_editor.html new file mode 100644 index 00000000..03cae8b1 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__sensible_editor.html @@ -0,0 +1,489 @@ + + + + + + + + + + + 16.138. cdist-type__sensible_editor(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.138. cdist-type__sensible_editor(7)

+
+

16.138.1. NAME

+

cdist-type__sensible_editor - Select the sensible-editor

+
+
+

16.138.2. DESCRIPTION

+

This cdist type allows you to select the sensible-editor for +a given user.

+
+
+

16.138.3. REQUIRED PARAMETERS

+
+
editor

Name or path of the editor to be selected. +On systems other than Debian derivatives an absolute path is required.

+
+

It is permissible to omit this parameter if --state is absent.

+
+
+
+
+
+

16.138.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', or 'exists'. Defaults to 'present', where:

+
+
present

the sensible-editor is exactly what is specified in --editor.

+
+
absent

no sensible-editor configuration is present.

+
+
exists

the sensible-editor will be set to what is specified in --editor, +unless there already is a configuration on the target system.

+
+
+
+
+
+
+

16.138.5. EXAMPLES

+
__sensible_editor root --editor /bin/ed  # ed(1) is the standard
+__sensible_editor noob --editor nano
+
+
+
+
+

16.138.6. LIMITATIONS

+

This type depends upon the sensible-editor(1) script which +is part of the sensible-utils package.

+
+
Therefore, the following operating systems are supported:
    +
  • Debian 8 (jessie) or later

  • +
  • Devuan

  • +
  • Ubuntu 8.10 (intrepid) or later

  • +
  • RHEL/CentOS 7 or later (EPEL repo required)

  • +
  • Fedora 21 or later

  • +
+
+
+

Note: on old versions of Ubuntu the sensible-* utils are part of the +debianutils package.

+
+
+

16.138.7. SEE ALSO

+

select-editor(1), sensible-editor(1).

+
+
+

16.138.8. AUTHOR

+

Dennis Camera <dennis.camera--@--ssrq-sds-fds.ch>

+
+
+

16.138.9. COPYING

+

Copyright (C) 2019 Dennis Camera. +You can redistribute it and/or modify it under the terms of the GNU General +Public License as published by the Free Software Foundation, either version 3 of +the License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__service.html b/src/extra/manual/6.7.0/man7/cdist-type__service.html new file mode 100644 index 00000000..9b10020c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__service.html @@ -0,0 +1,457 @@ + + + + + + + + + + + 16.139. cdist-type__service(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.139. cdist-type__service(7)

+
+

16.139.1. NAME

+

cdist-type__service - Run action on a system service

+
+
+

16.139.2. DESCRIPTION

+

This type allows you to run an action against a system service.

+
+
+

16.139.3. REQUIRED PARAMETERS

+
+
action

Arbitrary parameter passed as action. Usually 'start', 'stop', 'reload' or 'restart'.

+
+
+
+
+

16.139.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.139.5. BOOLEAN PARAMETERS

+

None.

+
+
+

16.139.6. EXAMPLES

+
# Restart nginx service.
+__service nginx --action restart
+
+# Stop postfix service.
+__service postfix --action stop
+
+
+
+
+

16.139.7. AUTHORS

+

Timothée Floure <timothee.floure@ungleich.ch>

+
+
+

16.139.8. COPYING

+

Copyright (C) 2019 Timothée Floure. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ssh_authorized_key.html b/src/extra/manual/6.7.0/man7/cdist-type__ssh_authorized_key.html new file mode 100644 index 00000000..c4654861 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ssh_authorized_key.html @@ -0,0 +1,487 @@ + + + + + + + + + + + 16.140. cdist-type__ssh_authorized_key(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.140. cdist-type__ssh_authorized_key(7)

+
+

16.140.1. NAME

+

cdist-type__ssh_authorized_key - Manage a single ssh authorized key entry

+
+
+

16.140.2. DESCRIPTION

+

Manage a single authorized key entry in an authorized_key file. +This type was created to be used by the __ssh_authorized_keys type.

+
+
+

16.140.3. REQUIRED PARAMETERS

+
+
file

The authorized_keys file where the given key should be managed.

+
+
key

The ssh key which shall be managed in this authorized_keys file. +Must be a string containing the ssh keytype, base 64 encoded key and +optional trailing comment which shall be added to the given +authorized_keys file.

+
+
+
+
+

16.140.4. OPTIONAL PARAMETERS

+
+
comment

Use this comment instead of the one which may be trailing in the key.

+
+
option

An option to set for this authorized_key entry. +Can be specified multiple times. +See sshd(8) for available options.

+
+
state

If the managed key should be 'present' or 'absent', defaults to 'present'.

+
+
+
+
+

16.140.5. MESSAGES

+
+
added to file (entry)

The key entry (with optional comment) was added to file.

+
+
removed from file (entry)

The key entry (with optional comment) was removed from file.

+
+
+
+
+

16.140.6. EXAMPLES

+
__ssh_authorized_key some-id \
+   --file "/home/user/.ssh/autorized_keys" \
+   --key "$(cat ~/.ssh/id_rsa.pub)"
+
+__ssh_authorized_key some-id \
+   --file "/home/user/.ssh/autorized_keys" \
+   --key "$(cat ~/.ssh/id_rsa.pub)" \
+   --option 'command="/path/to/script"' \
+   --option 'environment="FOO=bar"' \
+   --comment 'one to rule them all'
+
+
+
+
+

16.140.7. SEE ALSO

+

cdist-type__ssh_authorized_keys(7), sshd(8)

+
+
+

16.140.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.140.9. COPYING

+

Copyright (C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ssh_authorized_keys.html b/src/extra/manual/6.7.0/man7/cdist-type__ssh_authorized_keys.html new file mode 100644 index 00000000..275f243a --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ssh_authorized_keys.html @@ -0,0 +1,534 @@ + + + + + + + + + + + 16.141. cdist-type__ssh_authorized_keys(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.141. cdist-type__ssh_authorized_keys(7)

+
+

16.141.1. NAME

+

cdist-type__ssh_authorized_keys - Manage ssh authorized_keys files

+
+
+

16.141.2. DESCRIPTION

+

Adds or removes ssh keys from a authorized_keys file.

+

This type uses the __ssh_dot_ssh type to manage the directory containing +the authorized_keys file. You can disable this feature with the --noparent +boolean parameter.

+

The existence, ownership and permissions of the authorized_keys file itself are +also managed. This can be disabled with the --nofile boolean parameter. It is +then left to the user to ensure that the file exists and that ownership and +permissions work with ssh.

+
+
+

16.141.3. REQUIRED MULTIPLE PARAMETERS

+
+
key

An ssh key which shall be managed in this authorized_keys file. +Must be a string containing the ssh keytype, base 64 encoded key and +optional trailing comment which shall be added to the given +authorized_keys file. +Can be specified multiple times.

+
+
+
+
+

16.141.4. OPTIONAL PARAMETERS

+
+
comment

Use this comment instead of the one which may be trailing in each key.

+
+
file

An alternative destination file, defaults to ~$owner/.ssh/authorized_keys.

+
+
option

An option to set for all authorized_key entries in the key parameter. +Can be specified multiple times. +See sshd(8) for available options.

+
+
owner

The user owning the authorized_keys file, defaults to object_id.

+
+
state

If the given keys should be 'present' or 'absent', defaults to 'present'.

+
+
+
+
+

16.141.5. BOOLEAN PARAMETERS

+
+
noparent

Don't create or change ownership and permissions of the directory containing +the authorized_keys file.

+
+
nofile

Don't manage existence, ownership and permissions of the the authorized_keys +file.

+
+
remove-unknown

Remove undefined keys.

+
+
+
+
+

16.141.6. EXAMPLES

+
# add your ssh key to remote root's authorized_keys file
+__ssh_authorized_keys root \
+   --key "$(cat ~/.ssh/id_rsa.pub)"
+
+# same as above, but make sure your key is only key in
+# root's authorized_keys file
+__ssh_authorized_keys root \
+   --key "$(cat ~/.ssh/id_rsa.pub)" \
+   --remove-unknown
+
+# allow key to login as user-name
+__ssh_authorized_keys user-name \
+   --key "ssh-rsa AXYZAAB3NzaC1yc2..."
+
+# allow key to login as user-name with options and expicit comment
+__ssh_authorized_keys user-name \
+   --key "ssh-rsa AXYZAAB3NzaC1yc2..." \
+   --option no-agent-forwarding \
+   --option 'from="*.example.com"' \
+   --comment 'backup server'
+
+# same as above, but with explicit owner and two keys
+# note that the options are set for all given keys
+__ssh_authorized_keys some-fancy-id \
+   --owner user-name \
+   --key "ssh-rsa AXYZAAB3NzaC1yc2..." \
+   --key "ssh-rsa AZXYAAB3NzaC1yc2..." \
+   --option no-agent-forwarding \
+   --option 'from="*.example.com"' \
+   --comment 'backup server'
+
+# authorized_keys file in non standard location
+__ssh_authorized_keys some-fancy-id \
+   --file /etc/ssh/keys/user-name/authorized_keys \
+   --owner user-name \
+   --key "ssh-rsa AXYZAAB3NzaC1yc2..."
+
+# same as above, but directory and authorized_keys file is created elswhere
+__ssh_authorized_keys some-fancy-id \
+   --file /etc/ssh/keys/user-name/authorized_keys \
+   --owner user-name \
+   --noparent \
+   --nofile \
+   --key "ssh-rsa AXYZAAB3NzaC1yc2..."
+
+
+
+
+

16.141.7. SEE ALSO

+

sshd(8)

+
+
+

16.141.8. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.141.9. COPYING

+

Copyright (C) 2012-2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ssh_dot_ssh.html b/src/extra/manual/6.7.0/man7/cdist-type__ssh_dot_ssh.html new file mode 100644 index 00000000..2a8405d8 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ssh_dot_ssh.html @@ -0,0 +1,453 @@ + + + + + + + + + + + 16.142. cdist-type__ssh_dot_ssh(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.142. cdist-type__ssh_dot_ssh(7)

+
+

16.142.1. NAME

+

cdist-type__ssh_dot_ssh - Manage .ssh directory

+
+
+

16.142.2. DESCRIPTION

+

Adds or removes .ssh directory to a user home.

+

This type is being used by __ssh_authorized_keys.

+
+
+

16.142.3. OPTIONAL PARAMETERS

+
+
state

if the directory should be 'present' or 'absent', defaults to 'present'.

+
+
+
+
+

16.142.4. EXAMPLES

+
# Ensure root has ~/.ssh with the right permissions
+__ssh_dot_ssh root
+
+# Nico does not need ~/.ssh anymore
+__ssh_dot_ssh nico --state absent
+
+
+
+
+

16.142.5. SEE ALSO

+

cdist-type__ssh_authorized_keys(7)

+
+
+

16.142.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.142.7. COPYING

+

Copyright (C) 2014 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__staged_file.html b/src/extra/manual/6.7.0/man7/cdist-type__staged_file.html new file mode 100644 index 00000000..d7372005 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__staged_file.html @@ -0,0 +1,516 @@ + + + + + + + + + + + 16.143. cdist-type__staged_file(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.143. cdist-type__staged_file(7)

+
+

16.143.1. NAME

+

cdist-type__staged_file - Manage staged files

+
+
+

16.143.2. DESCRIPTION

+

Manages a staged file that is downloaded on the server (the machine running +cdist) and then deployed to the target host using the __file type.

+
+
+

16.143.3. REQUIRED PARAMETERS

+
+
source

the URL from which to retrieve the source file. +e.g.

+ +
+
cksum

the output of running the command: cksum $source-file +e.g.:

+
$ echo foobar > /tmp/foobar
+$ cksum /tmp/foobar
+857691210 7 /tmp/foobar
+
+
+

If either checksum or file size has changed the file will be +(re)fetched from the --source. The file name can be omitted and is +ignored if given.

+
+
+
+
+

16.143.4. OPTIONAL PARAMETERS

+
+
fetch-command

the command used to fetch the staged file using printf formatting. +Where a single %s will be replaced with the value of the given --source +parameter. The --fetch-command is expected to output the fetched file to +stdout. +Defaults to 'curl -s -L "%s"'.

+
+
group

see cdist-type__file

+
+
owner

see cdist-type__file

+
+
mode

see cdist-type__file

+
+
prepare-command

the optional command used to prepare or preprocess the staged file for later +use by the file type. +If given, it must be a string in printf formatting where a single %s will +be replaced with the last segment (filename) of the value of the given +--source parameter. +It is executed in the same directory into which the fetched file has been +saved. The --prepare-command is expected to output the final file to stdout.

+

So for example given a --source of https://example.com/my-zip.zip, and a +--prepare-command of 'unzip -p "%s"', the code unzip -p "my-zip.zip" will +be executed in the folder containing the downloaded file my-zip.zip. +A more complex example might be --prepare-command 'tar -xz "%s"; cat path/from/archive'

+
+
stage-dir

the directory in which to store downloaded and prepared files. +Defaults to '/var/tmp/cdist/__staged_file'

+
+
state

see cdist-type__file

+
+
+
+
+

16.143.5. EXAMPLES

+
__staged_file /usr/local/bin/consul \
+   --source file:///path/to/local/copy/consul \
+   --cksum '428915666 15738724' \
+   --state present \
+   --group root \
+   --owner root \
+   --mode 755
+
+__staged_file /usr/local/bin/consul \
+   --source https://dl.bintray.com/mitchellh/consul/0.4.1_linux_amd64.zip \
+   --cksum '428915666 15738724' \
+   --fetch-command 'curl -s -L "%s"' \
+   --prepare-command 'unzip -p "%s"' \
+   --state present \
+   --group root \
+   --owner root \
+   --mode 755
+
+
+
+
+

16.143.6. SEE ALSO

+

cdist-type__file(7)

+
+
+

16.143.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.143.8. COPYING

+

Copyright (C) 2015 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__start_on_boot.html b/src/extra/manual/6.7.0/man7/cdist-type__start_on_boot.html new file mode 100644 index 00000000..f6c38b49 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__start_on_boot.html @@ -0,0 +1,465 @@ + + + + + + + + + + + 16.144. cdist-type__start_on_boot(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.144. cdist-type__start_on_boot(7)

+
+

16.144.1. NAME

+

cdist-type__start_on_boot - Manage stuff to be started at boot

+
+
+

16.144.2. DESCRIPTION

+

This cdist type allows you to enable or disable stuff to be started +at boot of your operating system.

+

Warning: This type has not been tested intensively and is not fully +supported.

+
+
+

16.144.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.144.4. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent", defaults to "present"

+
+
target_runlevel

Runlevel which should be modified, defaults to "default" (only used on gentoo systems).

+
+
+
+
+

16.144.5. EXAMPLES

+
# Ensure snmpd is started at boot
+__start_on_boot snmpd
+
+# Same, but more explicit
+__start_on_boot snmpd --state present
+
+# Ensure legacy configuration management will not be started
+__start_on_boot puppet --state absent
+
+
+
+
+

16.144.6. SEE ALSO

+

cdist-type__process(7)

+
+
+

16.144.7. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.144.8. COPYING

+

Copyright (C) 2012-2019 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__sysctl.html b/src/extra/manual/6.7.0/man7/cdist-type__sysctl.html new file mode 100644 index 00000000..2b0bfb42 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__sysctl.html @@ -0,0 +1,451 @@ + + + + + + + + + + + 16.145. cdist-type__sysctl(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.145. cdist-type__sysctl(7)

+
+

16.145.1. NAME

+

cdist-type__sysctl - manage sysctl settings

+
+
+

16.145.2. DESCRIPTION

+

Manages permanent as well as runtime sysctl settings. +Permament settings are set by managing entries in /etc/sysctl.conf. +Runtime settings are set by directly calling the sysctl executable.

+
+
+

16.145.3. REQUIRED PARAMETERS

+
+
value

The value to set for the given key (object_id)

+
+
+
+
+

16.145.4. EXAMPLES

+
__sysctl net.ipv4.ip_forward --value 1
+
+# On some operating systems, e.g. NetBSD, to prevent an error if the
+# MIB style name does not exist (e.g. optional kernel components),
+# name and value can be separated by `?=`. The same effect can be achieved
+# in cdist by appending a `?` to the key:
+
+__sysctl ddb.onpanic? --value -1
+
+
+
+
+

16.145.5. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.145.6. COPYING

+

Copyright (C) 2014 Steven Armstrong. Free use of this software is +granted under the terms of the GNU General Public License version 3 or +later (GPLv3+).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__systemd_service.html b/src/extra/manual/6.7.0/man7/cdist-type__systemd_service.html new file mode 100644 index 00000000..5b068846 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__systemd_service.html @@ -0,0 +1,518 @@ + + + + + + + + + + + 16.146. cdist-type__systemd-service(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.146. cdist-type__systemd-service(7)

+
+

16.146.1. NAME

+

cdist-type__systemd-service - Controls a systemd service state

+
+
+

16.146.2. DESCRIPTION

+

This type controls systemd services to define a state of the service, +or an action like reloading or restarting. It is useful to reload a +service after configuration applied or shutdown one service.

+

The activation or deactivation is out of scope. Look for the +cdist-type__systemd_util(7) type instead.

+
+
+

16.146.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.146.4. OPTIONAL PARAMETERS

+
+
name

String which will used as name instead of the object id.

+
+
state

The state which the service should be in:

+
+
running

Service should run (default)

+
+
stoppend

Service should stopped

+
+
+
+
action

Executes an action on on the service. It will only execute it if the +service keeps the state running. There are following actions, where:

+
+
reload

Reloads the service

+
+
restart

Restarts the service

+
+
+
+
+
+
+

16.146.5. BOOLEAN PARAMETERS

+
+
if-required

Only execute the action if minimum one required type outputs a message to +$__messages_out. Through this, the action should only executed if a +dependency did something. The action will not executed if no dependencies +given.

+
+
+
+
+

16.146.6. MESSAGES

+
+
start

Started the service

+
+
stop

Stopped the service

+
+
restart

Restarted the service

+
+
reload

Reloaded the service

+
+
+
+
+

16.146.7. ABORTS

+

Aborts in following cases:

+

systemd or the service does not exist

+
+
+

16.146.8. EXAMPLES

+
# service must run
+__systemd_service nginx
+
+# service must stopped
+__systemd_service sshd \
+    --state stopped
+
+# restart the service
+__systemd_service apache2 \
+    --action restart
+
+# makes sure the service exist with an alternative name
+__systemd_service foo \
+    --name sshd
+
+# reload the service for a modified configuration file
+# only reloads the service if the file really changed
+require="__config_file/etc/foo.conf" __systemd_service foo \
+    --action reload --if-required
+
+
+
+
+

16.146.9. AUTHORS

+

Matthias Stecher <matthiasstecher at gmx.de>

+
+ +
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__systemd_unit.html b/src/extra/manual/6.7.0/man7/cdist-type__systemd_unit.html new file mode 100644 index 00000000..c6c66af7 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__systemd_unit.html @@ -0,0 +1,495 @@ + + + + + + + + + + + 16.147. cdist-type__systemd_unit(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.147. cdist-type__systemd_unit(7)

+
+

16.147.1. NAME

+

cdist-type__systemd_unit - Install a systemd unit

+
+
+

16.147.2. DESCRIPTION

+

This type manages systemd units in /etc/systemd/system/. It can install, +enable and start a systemd unit. This is particularly useful on systems which +take advantage of systemd heavily (e.g., CoreOS). For more information about +systemd units, see SYSTEMD.UNIT(5).

+
+
+

16.147.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.147.4. OPTIONAL PARAMETERS

+
+
enablement-state

'enabled', 'disabled' or 'masked', where:

+
+
enabled

enables the unit

+
+
disabled

disables the unit

+
+
masked

masks the unit

+
+
+
+
source

Path to the config file. If source is '-' (dash), take what was written to +stdin as the config file content.

+
+
state

'present' or 'absent', defaults to 'present' where:

+
+
present

the unit (or its mask) is installed

+
+
absent

The unit is stopped, disabled and uninstalled. If the unit was masked, +the mask is removed.

+
+
+
+
+
+
+

16.147.5. BOOLEAN PARAMETERS

+
+
restart

Start the unit if it was inactive. Restart the unit if the unit file +changed. Stop the unit if new enablement-state is masked.

+
+
+
+
+

16.147.6. MESSAGES

+

None.

+
+
+

16.147.7. EXAMPLES

+
# Installs, enables and starts foobar.service
+__systemd_unit foobar.service \
+    --source "${__manifest}/files/foobar.service" \
+    --enablement-state enabled \
+    --restart
+
+# Disables the unit
+__systemd_unit foobar.service --enablement-state disabled
+
+# Stops, disables and uninstalls foobar.service
+__systemd_unit foobar.service --state absent
+
+
+
+
+

16.147.8. AUTHORS

+

Ľubomír Kučera <lubomir.kucera.jr at gmail.com>

+
+
+

16.147.9. COPYING

+

Copyright (C) 2017 Ľubomír Kučera. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__timezone.html b/src/extra/manual/6.7.0/man7/cdist-type__timezone.html new file mode 100644 index 00000000..daed3b2b --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__timezone.html @@ -0,0 +1,448 @@ + + + + + + + + + + + 16.148. cdist-type__timezone(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.148. cdist-type__timezone(7)

+
+

16.148.1. NAME

+

cdist-type__timezone - Allows one to configure the desired localtime timezone.

+
+
+

16.148.2. DESCRIPTION

+

This type creates a symlink (/etc/localtime) to the selected timezone +(which should be available in /usr/share/zoneinfo).

+
+
+

16.148.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.148.4. OPTIONAL PARAMETERS

+

None.

+
+
+

16.148.5. EXAMPLES

+
#Set up Europe/Andorra as our timezone.
+__timezone Europe/Andorra
+
+#Set up US/Central as our timezone.
+__timezone US/Central
+
+
+
+
+

16.148.6. AUTHORS

+

Ramon Salvadó <rsalvado--@--gnuine--dot--com>

+
+
+

16.148.7. COPYING

+

Free use of this software is +granted under the terms of the GNU General Public License version 3 (GPLv3).

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ufw.html b/src/extra/manual/6.7.0/man7/cdist-type__ufw.html new file mode 100644 index 00000000..43fdb976 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ufw.html @@ -0,0 +1,460 @@ + + + + + + + + + + + 16.149. cdist-type__ufw(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.149. cdist-type__ufw(7)

+
+

16.149.1. NAME

+

cdist-type__ufw - Install the Uncomplicated FireWall

+
+
+

16.149.2. DESCRIPTION

+

Installs the Uncomplicated FireWall. Most modern distributions carry UFW in their main repositories, but on CentOS this type will automatically enable the EPEL repository.

+

Some global configuration can also be set with this type.

+
+
+

16.149.3. OPTIONAL PARAMETERS

+
+
state

Either "enabled", "running", "present", or "absent". Defaults to "enabled", which registers UFW to start on boot.

+
+
logging

Either "off", "low", "medium", "high", or "full". Will be passed to ufw logging. If not specified, logging level is not modified.

+
+
default_incoming

Either "allow", "deny", or "reject". The default policy for dealing with ingress packets.

+
+
default_outgoing

Either "allow", "deny", or "reject". The default policy for dealing with egress packets.

+
+
default_routed

Either "allow", "deny", or "reject". The default policy for dealing with routed packets (passing through this machine).

+
+
+
+
+

16.149.4. EXAMPLES

+
# Install UFW
+__ufw
+# Setup UFW with maximum logging and no restrictions on routed packets.
+__ufw --logging full --default_routed allow
+
+
+
+
+

16.149.5. SEE ALSO

+

ufw(8)

+
+
+

16.149.6. AUTHORS

+

Mark Polyakov <mark@markasoftware.com>

+
+
+

16.149.7. COPYING

+

Copyright (C) 2019 Mark Polyakov. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__ufw_rule.html b/src/extra/manual/6.7.0/man7/cdist-type__ufw_rule.html new file mode 100644 index 00000000..e24dfc12 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__ufw_rule.html @@ -0,0 +1,458 @@ + + + + + + + + + + + 16.150. cdist-type__ufw_rule(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.150. cdist-type__ufw_rule(7)

+
+

16.150.1. NAME

+

cdist-type__ufw_rule - A single UFW rule

+
+
+

16.150.2. DESCRIPTION

+

Adds or removes a single UFW rule. This type supports adding and deleting rules for port ranges or applications.

+

Understanding what is "to" and what is "from" can be confusing. If the rule is ingress (default), then "from" is the remote machine and "to" is the local one. The opposite is true for egress traffic (--out).

+
+
+

16.150.3. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent". Defaults to "present". If "absent", only removes rules that exactly match the rule expected.

+
+
rule

A firewall rule in UFW syntax. This is what you would usually write after ufw on the command line. Defaults to "allow" followed by the object ID. You can use either the short syntax (just allow|deny|reject|limit followed by a port or application name) or the full syntax. Do not include delete in your command. Set --state absent instead.

+
+
+
+
+

16.150.4. EXAMPLES

+
# open port 80 (ufw allow 80)
+__ufw_rule 80
+# Allow mosh application (if installed)
+__ufw_rule mosh
+# Allow all traffic from local network (ufw allow from 10.0.0.0/24)
+__ufw_rule local --rule 'allow from 10.0.0.0/24'
+# Block egress traffic from port 25 to 111.55.55.55 on interface eth0
+__ufw_rule block_smtp --rule 'deny out on eth0 from any port 25 to 111.55.55.55'
+
+
+
+
+

16.150.5. SEE ALSO

+

ufw(8)

+
+
+

16.150.6. AUTHORS

+

Mark Polyakov <mark@markasoftware.com>

+
+
+

16.150.7. COPYING

+

Copyright (C) 2019 Mark Polyakov. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__unpack.html b/src/extra/manual/6.7.0/man7/cdist-type__unpack.html new file mode 100644 index 00000000..b21afaed --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__unpack.html @@ -0,0 +1,485 @@ + + + + + + + + + + + 16.151. cdist-type__unpack(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.151. cdist-type__unpack(7)

+
+

16.151.1. NAME

+

cdist-type__unpack - Unpack archives

+
+
+

16.151.2. DESCRIPTION

+

Unpack .tar, .tgz, .tar.*, .7z, .bz2, .gz, +.lzma, .xz, .rar and .zip archives. Archive type is +detected by extension.

+

To achieve idempotency, checksum file will be created in target. See +--sum-file parameter for details.

+
+
+

16.151.3. REQUIRED PARAMETERS

+
+
destination

Depending on archive format file or directory to where archive +contents will be written.

+
+
+
+
+

16.151.4. OPTIONAL PARAMETERS

+
+
sum-file

Override archive's checksum file in target. By default +XXX.cdist__unpack_sum will be used, where XXX is source +archive path. This file must be kept in target's persistent storage.

+
+
tar-strip

Tarball specific. See man tar for --strip-components.

+
+
+
+
+

16.151.5. OPTIONAL BOOLEAN PARAMETERS

+
+
backup-destination

By default destination file will be overwritten. In case destination +is directory, files from archive will be added to or overwritten in +directory. This parameter moves existing destination to +XXX.cdist__unpack_backup_YYY, where XXX is destination and +YYY current UNIX timestamp.

+
+
preserve-archive

Don't delete archive after unpacking.

+
+
+
+
+

16.151.6. EXAMPLES

+
__directory /opt/cpma
+
+require='__directory/opt/cpma' \
+    __download /opt/cpma/cnq3.zip \
+        --url https://cdn.playmorepromode.com/files/cnq3/cnq3-1.51.zip \
+        --sum md5:46da3021ca9eace277115ec9106c5b46
+
+require='__download/opt/cpma/cnq3.zip' \
+    __unpack /opt/cpma/cnq3.zip \
+        --backup-destination \
+        --preserve-archive \
+        --destination /opt/cpma/server
+
+
+
+
+

16.151.7. AUTHORS

+

Ander Punnar <ander-at-kvlt-dot-ee>

+
+
+

16.151.8. COPYING

+

Copyright (C) 2020 Ander Punnar. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__update_alternatives.html b/src/extra/manual/6.7.0/man7/cdist-type__update_alternatives.html new file mode 100644 index 00000000..b4fee3e4 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__update_alternatives.html @@ -0,0 +1,451 @@ + + + + + + + + + + + 16.152. cdist-type__update_alternatives(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.152. cdist-type__update_alternatives(7)

+
+

16.152.1. NAME

+

cdist-type__update_alternatives - Configure alternatives

+
+
+

16.152.2. DESCRIPTION

+

On Debian and alike systems update-alternatives(1) can be used +to setup alternatives for various programs. +One of the most common used targets is the "editor".

+
+
+

16.152.3. REQUIRED PARAMETERS

+
+
path

Use this path for the given alternative

+
+
+
+
+

16.152.4. EXAMPLES

+
# Setup vim as the default editor
+__update_alternatives editor --path /usr/bin/vim.basic
+
+
+
+
+

16.152.5. SEE ALSO

+

cdist-type__debconf_set_selections(7), update-alternatives(8)

+
+
+

16.152.6. AUTHORS

+

Nico Schottelius <nico-cdist--@--schottelius.org>

+
+
+

16.152.7. COPYING

+

Copyright (C) 2013 Nico Schottelius. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__user.html b/src/extra/manual/6.7.0/man7/cdist-type__user.html new file mode 100644 index 00000000..ec0268eb --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__user.html @@ -0,0 +1,504 @@ + + + + + + + + + + + 16.153. cdist-type__user(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.153. cdist-type__user(7)

+
+

16.153.1. NAME

+

cdist-type__user - Manage users

+
+
+

16.153.2. DESCRIPTION

+

This cdist type allows you to create or modify users on the target.

+
+
+

16.153.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.153.4. OPTIONAL PARAMETERS

+
+
state

absent or present, defaults to present

+
+
comment

see usermod(8)

+
+
home

see above

+
+
gid

see above

+
+
password

see above

+
+
shell

see above

+
+
uid

see above

+
+
+
+
+

16.153.5. BOOLEAN PARAMETERS

+
+
system

see useradd(8), apply only on user create

+
+
create-home

see useradd(8), apply only on user create

+
+
remove-home

see userdel(8), apply only on user delete

+
+
+
+
+

16.153.6. MESSAGES

+
+
mod

User is modified

+
+
add

New user added

+
+
userdel -r

If user was deleted with homedir

+
+
userdel

If user was deleted (keeping homedir)

+
+
+
+
+

16.153.7. EXAMPLES

+
# Create user account for foobar with operating system default settings
+__user foobar
+
+# Same but with a different shell
+__user foobar --shell /bin/zsh
+
+# Same but for a system account
+__user foobar --system
+
+# Set explicit uid and home
+__user foobar --uid 1001 --shell /bin/zsh --home /home/foobar
+
+# Drop user if exists
+__user foobar --state absent
+
+
+
+
+

16.153.8. SEE ALSO

+

pw(8), usermod(8)

+
+
+

16.153.9. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.153.10. COPYING

+

Copyright (C) 2011 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__user_groups.html b/src/extra/manual/6.7.0/man7/cdist-type__user_groups.html new file mode 100644 index 00000000..8e72848a --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__user_groups.html @@ -0,0 +1,458 @@ + + + + + + + + + + + 16.154. cdist-type__user_groups(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.154. cdist-type__user_groups(7)

+
+

16.154.1. NAME

+

cdist-type__user_groups - Manage user groups

+
+
+

16.154.2. DESCRIPTION

+

Adds or removes a user from one or more groups.

+
+
+

16.154.3. REQUIRED PARAMETERS

+
+
group

the group to which this user should be added or removed. +Can be specified multiple times.

+
+
+
+
+

16.154.4. OPTIONAL PARAMETERS

+
+
user

the name of the user. Defaults to object_id

+
+
state

absent or present. Defaults to present.

+
+
+
+
+

16.154.5. EXAMPLES

+
__user_groups nginx --group webuser1 --group webuser2
+
+# remove user nginx from groups webuser2
+__user_groups nginx-webuser2 --user nginx \
+   --group webuser2 --state absent
+
+
+
+
+

16.154.6. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.154.7. COPYING

+

Copyright (C) 2012 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__xymon_apache.html b/src/extra/manual/6.7.0/man7/cdist-type__xymon_apache.html new file mode 100644 index 00000000..3e885a15 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__xymon_apache.html @@ -0,0 +1,486 @@ + + + + + + + + + + + 16.155. cdist-type__xymon_apache(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.155. cdist-type__xymon_apache(7)

+
+

16.155.1. NAME

+

cdist-type__xymon_apache - Configure apache2-webserver for Xymon

+
+
+

16.155.2. DESCRIPTION

+

This cdist type installs and configures apache2 to be used "exclusively" (in +the sense that no other use is taken care of) with Xymon (the systems and +network monitor).

+

It depends on __xymon_server.

+
+
+

16.155.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.155.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', defaults to 'present'.

+
+
ipacl

IP(-ranges) that have access to the Xymon webpages and CGIs. Apache2-style +syntax suitable for Require ip .... Example: 192.168.1.0/24 10.0.0.0/8

+
+
+
+
+

16.155.5. MESSAGES

+
+
mod:rewrite enabled

apache module enabled

+
+
conf:xymon enabled

apache config for xymon enabled

+
+
apache restarted

apache2.service was reloaded

+
+
apache reloaded

apache2.service was restarted

+
+
+
+
+

16.155.6. EXPLORERS

+
+
active-conf

lists apache2 conf-enabled

+
+
active-modules

lists active apache2-modules

+
+
+
+
+

16.155.7. EXAMPLES

+
# minmal, only localhost-access:
+__xymon_apache
+# allow more IPs to access the Xymon-webinterface:
+__xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8" --state "present"
+
+
+
+
+

16.155.8. SEE ALSO

+

cdist__xymon_server(7)

+
+
+

16.155.9. AUTHORS

+

Thomas Eckert <tom--@--it-eckert.de>

+
+
+

16.155.10. COPYING

+

Copyright (C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__xymon_client.html b/src/extra/manual/6.7.0/man7/cdist-type__xymon_client.html new file mode 100644 index 00000000..22431fe6 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__xymon_client.html @@ -0,0 +1,473 @@ + + + + + + + + + + + 16.156. cdist-type__xymon_client(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.156. cdist-type__xymon_client(7)

+
+

16.156.1. NAME

+

cdist-type__xymon_client - Install the Xymon client

+
+
+

16.156.2. DESCRIPTION

+

This cdist type installs the Xymon client and configures it to report with +FQDN.

+
+
+

16.156.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.156.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', defaults to 'present'.

+
+
servers

One or more IP addresses (space separated) of the Xymon server(s) to report +to. While DNS-names are ok it is discouraged, defaults to 127.0.0.1.

+
+
+
+
+

16.156.5. BOOLEAN PARAMETERS

+
+
msgcache

Enable xymon msgcache. Note: XYMONSERVER has to be 127.0.0.1 for using +msgcache (see msgcache (8) of the xymon documentation for details).

+
+
+
+
+

16.156.6. EXAMPLES

+
# minimal, report to 127.0.0.1
+__xymon_client
+
+# specify server:
+__xymon_client --servers "192.168.1.1"
+
+# activate `msgcache` for passive client:
+__xymon_client --msgcache
+
+
+
+
+

16.156.7. SEE ALSO

+

cdist__xymon_server(7), xymon(7), msgcache(8)

+
+
+

16.156.8. AUTHORS

+

Thomas Eckert <tom--@--it-eckert.de>

+
+
+

16.156.9. COPYING

+

Copyright (C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__xymon_config.html b/src/extra/manual/6.7.0/man7/cdist-type__xymon_config.html new file mode 100644 index 00000000..c9fd620c --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__xymon_config.html @@ -0,0 +1,486 @@ + + + + + + + + + + + 16.157. cdist-type__xymon_config(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.157. cdist-type__xymon_config(7)

+
+

16.157.1. NAME

+

cdist-type__xymon_config - Deploy a Xymon configuration-directory

+
+
+

16.157.2. DESCRIPTION

+

This cdist type deploys a full Xymon configuration directory from the files-dir +to the host. This type requires an installed Xymon server, e.g. deployed by +__xymon_server.

+

WARNING: This type _replaces_ the /etc/xymon/-directory! The previous +contents is replaced/deleted!

+
+
+

16.157.3. REQUIRED PARAMETERS

+
+
confdir

The directory in ./files/ that contains the /etc/xymon/-content to be +deployed.

+
+
+
+
+

16.157.4. OPTIONAL PARAMETERS

+
+
owner

passed as-is as --owner to __rsync

+
+
group

passed as-is as --group to __rsync

+
+
+
+
+

16.157.5. OPTIONAL MULTIPLE PARAMETERS

+
+
rsync-opts

identical to __rsync type, only ---options are supported

+
+
+
+
+

16.157.6. REQUIRED FILES

+

The directory specified by confdir has to contain a valid xymon-configuration +(/etc/xymon/) _plus_ the ext/-directory that normally resides in +/usr/lib/xymon/server/.

+
+
+

16.157.7. EXAMPLES

+
__xymon_config --confdir=xymon.example.com
+# this will replace /etc/xymon/ on the target host with
+# the contents from __xymon_config/files/xymon.example.com/
+
+## the same but set ownership to `xymon:xymon` and exclude
+## the `netrc`-file:
+__xymon_config --confdir=xymon.example.com \
+   --owner xymon --group xymon \
+   --rsync-opts "exclude=netrc"
+
+
+
+
+

16.157.8. SEE ALSO

+

cdist__xymon_server(7), cdist__rsync(7), xymon(7)

+
+
+

16.157.9. AUTHORS

+

Thomas Eckert <tom--@--it-eckert.de>

+
+
+

16.157.10. COPYING

+

Copyright (C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__xymon_server.html b/src/extra/manual/6.7.0/man7/cdist-type__xymon_server.html new file mode 100644 index 00000000..941386dc --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__xymon_server.html @@ -0,0 +1,490 @@ + + + + + + + + + + + 16.158. cdist-type__xymon_server(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.158. cdist-type__xymon_server(7)

+
+

16.158.1. NAME

+

cdist-type__xymon_server - Install a Xymon server

+
+
+

16.158.2. DESCRIPTION

+

This cdist type installs a Xymon (https://www.xymon.com/) server and (optional) +required helper packages.

+

This includes the Xymon client as a dependency, so NO NEED to install +__xymon_client separately.

+

To access the webinterface a webserver is required. The cdist-type +__xymon_apache can be used to install and configure the apache webserver for +the use with Xymon.

+

Further and day-to-day configuration of Xymon can either be done manually in +/etc/xymon/ or the directory can be deployed and managed by __xymon_config.

+
+
+

16.158.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.158.4. OPTIONAL PARAMETERS

+
+
state

'present', 'absent', defaults to 'present'. If '--install_helpers' is +specified for 'absent' the helper packages will be un-installed.

+
+
+
+
+

16.158.5. BOOLEAN PARAMETERS

+
+
install_helpers

Install helper packages used by Xymon (fping, heirloom-mailx, traceroute, +ntpdate).

+
+
+
+
+

16.158.6. EXAMPLES

+
# minmal
+__xymon_server
+
+# the same
+__xymon_server --state present
+
+# also install helper packages:
+__xymon_server --install_helpers
+
+# examples to give a more complete picture: __xymon_server installed on
+# `xymon.example.com` w/ IP 192.168.1.1:
+#
+# install webserver and grant 2 private subnets access to the webinterface:
+__xymon_apache --ipacl "192.168.0.0/16 10.0.0.0/8"
+# deploy server-configuration with __xymon_config:
+__xymon_config --confdir=xymon.example.com
+
+# install xymon-client on other machines (not needed on the server):
+__xymon_client --servers "192.168.1.1"
+
+
+
+
+

16.158.7. SEE ALSO

+

cdist__xymon_apache(7), cdist__xymon_config(7), +cdist__xymon_client(7), xymon(7)

+
+
+

16.158.8. AUTHORS

+

Thomas Eckert <tom--@--it-eckert.de>

+
+
+

16.158.9. COPYING

+

Copyright (C) 2018-2019 Thomas Eckert. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__yum_repo.html b/src/extra/manual/6.7.0/man7/cdist-type__yum_repo.html new file mode 100644 index 00000000..47d67eb2 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__yum_repo.html @@ -0,0 +1,502 @@ + + + + + + + + + + + 16.159. cdist-type__yum_repo(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.159. cdist-type__yum_repo(7)

+
+

16.159.1. NAME

+

cdist-type__yum_repo - Manage yum repositories

+
+
+

16.159.2. DESCRIPTION

+

For all undocumented parameters see yum.conf(5).

+
+
+

16.159.3. REQUIRED PARAMETERS

+

None.

+
+
+

16.159.4. OPTIONAL PARAMETERS

+
+
state

'present' or 'absent'. Defaults to 'present'

+
+
repositoryid

Defaults to __object_id.

+
+
+

name

+
+
baseurl

Can be specified multiple times.

+
+
+

metalink

+

mirrorlist

+
+
gpgkey

Can be specified multiple times.

+
+
+

gpgcakey

+

gpgcheck

+

exclude

+

includepkgs

+

failovermethod

+

timeout

+

http_caching

+

retries

+

throttle

+

bandwidth

+

sslcacert

+

sslverify

+

sslclientcert

+

sslclientkey

+

ssl_check_cert_permissions

+

metadata_expire

+

mirrorlist_expire

+

proxy

+

proxy_username

+

proxy_password

+

username

+

password

+

cost

+
+
+

16.159.5. BOOLEAN PARAMETERS

+

enabled

+

repo_gpgcheck

+
+
disablegroups

! enablegroups

+
+
+

keepalive

+

skip_if_unavailable

+
+
+

16.159.6. EXAMPLES

+
__yum_repo epel \
+   --name 'Extra Packages for Enterprise Linux 6 - $basearch' \
+   --mirrorlist 'https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch' \
+   --failovermethod priority \
+   --enabled \
+   --gpgcheck 1 \
+   --gpgkey https://fedoraproject.org/static/0608B895.txt
+
+
+
+
+

16.159.7. AUTHORS

+

Steven Armstrong <steven-cdist--@--armstrong.cc>

+
+
+

16.159.8. COPYING

+

Copyright (C) 2014 Steven Armstrong. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__zypper_repo.html b/src/extra/manual/6.7.0/man7/cdist-type__zypper_repo.html new file mode 100644 index 00000000..1d253813 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__zypper_repo.html @@ -0,0 +1,476 @@ + + + + + + + + + + + 16.160. cdist-type__zypper_repo(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.160. cdist-type__zypper_repo(7)

+
+

16.160.1. NAME

+

cdist-type__zypper_repo - Repository management with zypper

+
+
+

16.160.2. DESCRIPTION

+

zypper is usually used on the SuSE distribution to manage repositories.

+
+
+

16.160.3. REQUIRED PARAMETERS

+

None

+
+
+

16.160.4. OPTIONAL PARAMETERS

+
+
state

Either "present" or "absent" or "enabled" or "disabled", defaults to "present"

+
    +
  • present - make sure that the repo is available, needs uri and repo_desc for all following states, the repo can be searched via repo_id or uri

  • +
  • absent - drop the repo if found +

  • +
  • enabled - a repo can have state disabled if installed via zypper service (ris), in this case, you can enable the repo

  • +
  • disabled - instead of absent (drop), a repo can also set to disabled, which makes it inaccessible

  • +
+
+
uri

If supplied, use the uri and not the object id as repo uri.

+
+
repo_desc

If supplied, use the description and not the object id as repo description, only used if the state is present and the repo has to be created

+
+
repo_id

If supplied, use the id and not the object id as repo id, can be used with state absent, enabled and disabled

+
+
+
+
+

16.160.5. EXAMPLES

+
# Ensure testrepo in installed
+__zypper_repo testrepo --state present --uri http://url.to.your.repo/with/path
+
+# Drop repo by repo uri
+__zypper_repo testrepo --state absent --uri http://url.to.your.repo/with/path
+
+# Drop repo by id number (attention: repos are always numbered from 1 to max)
+__zypper_repo testrepo --state absent --repo_id 1
+
+# enable repo by id
+__zypper_repo testrepo2 --state enabled --repo_id 2
+
+# enable repo by uri
+__zypper_repo testrepo3 --state enabled --uri http://url.to.your.repo/with/path
+
+# disable a repo works like enabling it
+__zypper_repo testrepo4 --state disabled --repo_id 4
+
+
+
+
+

16.160.6. AUTHORS

+

Daniel Heule <hda--@--sfs.biz>

+
+
+

16.160.7. COPYING

+

Copyright (C) 2013 Daniel Heule. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/man7/cdist-type__zypper_service.html b/src/extra/manual/6.7.0/man7/cdist-type__zypper_service.html new file mode 100644 index 00000000..8c292a65 --- /dev/null +++ b/src/extra/manual/6.7.0/man7/cdist-type__zypper_service.html @@ -0,0 +1,472 @@ + + + + + + + + + + + 16.161. cdist-type__zypper_service(7) — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ + + + +
+
+
+
+ +
+

16.161. cdist-type__zypper_service(7)

+
+

16.161.1. NAME

+

cdist-type__zypper_service - Service management with zypper

+
+
+

16.161.2. DESCRIPTION

+

zypper is usually used on SuSE systems to manage services.

+
+
+

16.161.3. REQUIRED PARAMETERS

+
+
uri

Uri of the service

+
+
+
+
+

16.161.4. OPTIONAL PARAMETERS

+
+
service_desc

If supplied, use the service_desc and not the object id as description for the service.

+
+
state

Either "present" or "absent", defaults to "present"

+
+
type

Defaults to "ris", the standard type of services at SLES11. For other values, see manpage of zypper.

+
+
+
+
+

16.161.5. BOOLEAN PARAMETERS

+
+
remove-all-other-services

Drop all other services found on the target host before adding the new one.

+
+
remove-all-repos

If supplied, remove all existing repos prior to setup the new service.

+
+
+
+
+

16.161.6. EXAMPLES

+
# Ensure that internal SLES11 SP3 RIS is in installed and all other services and repos are discarded
+__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir" --remove-all-other-services --remove-all-repos
+
+# Ensure that internal SLES11 SP3 RIS is in installed, no changes to other services or repos
+__zypper_service INTERNAL_SLES11_SP3 --service_desc "Internal SLES11 SP3 RIS" --uri "http://path/to/your/ris/dir"
+
+# Drop service by uri, no changes to other services or repos
+__zypper_service INTERNAL_SLES11_SP3 --state absent --uri "http://path/to/your/ris/dir"
+
+
+
+
+

16.161.7. AUTHORS

+

Daniel Heule <hda--@--sfs.biz>

+
+
+

16.161.8. COPYING

+

Copyright (C) 2013 Daniel Heule. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version.

+
+
+ + +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/objects.inv b/src/extra/manual/6.7.0/objects.inv new file mode 100644 index 00000000..72a6bc1b Binary files /dev/null and b/src/extra/manual/6.7.0/objects.inv differ diff --git a/src/extra/manual/6.7.0/search.html b/src/extra/manual/6.7.0/search.html new file mode 100644 index 00000000..b1a16fa2 --- /dev/null +++ b/src/extra/manual/6.7.0/search.html @@ -0,0 +1,242 @@ + + + + + + + + + + + Search — cdist 6.7.0 documentation + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + +
+ +
+ + + + + + + + + + + + + + + + + +
+ +
    + +
  • Docs »
  • + +
  • Search
  • + + +
  • + + + +
  • + +
+ + +
+
+
+
+ + + + +
+ +
+ +
+ +
+ + +
+
+ +
+ +
+ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/extra/manual/6.7.0/searchindex.js b/src/extra/manual/6.7.0/searchindex.js new file mode 100644 index 00000000..190b2c2c --- /dev/null +++ b/src/extra/manual/6.7.0/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({docnames:["cdist-best-practice","cdist-bootstrap","cdist-cache","cdist-configuration","cdist-explorer","cdist-features","cdist-hacker","cdist-install","cdist-integration","cdist-inventory","cdist-manifest","cdist-messaging","cdist-os","cdist-parallelization","cdist-preos","cdist-quickstart","cdist-real-world","cdist-reference","cdist-remote-exec-copy","cdist-saving-output-streams","cdist-stages","cdist-support","cdist-troubleshooting","cdist-type","cdist-types","cdist-upgrade","cdist-why","index","man1/cdist","man1/cdist-dump","man1/cdist-new-type","man7/cdist-type__acl","man7/cdist-type__apt_default_release","man7/cdist-type__apt_key","man7/cdist-type__apt_key_uri","man7/cdist-type__apt_mark","man7/cdist-type__apt_norecommends","man7/cdist-type__apt_ppa","man7/cdist-type__apt_source","man7/cdist-type__apt_unattended_upgrades","man7/cdist-type__apt_update_index","man7/cdist-type__block","man7/cdist-type__ccollect_source","man7/cdist-type__cdist","man7/cdist-type__cdistmarker","man7/cdist-type__check_messages","man7/cdist-type__chroot_mount","man7/cdist-type__chroot_umount","man7/cdist-type__clean_path","man7/cdist-type__config_file","man7/cdist-type__consul","man7/cdist-type__consul_agent","man7/cdist-type__consul_check","man7/cdist-type__consul_reload","man7/cdist-type__consul_service","man7/cdist-type__consul_template","man7/cdist-type__consul_template_template","man7/cdist-type__consul_watch_checks","man7/cdist-type__consul_watch_event","man7/cdist-type__consul_watch_key","man7/cdist-type__consul_watch_keyprefix","man7/cdist-type__consul_watch_nodes","man7/cdist-type__consul_watch_service","man7/cdist-type__consul_watch_services","man7/cdist-type__cron","man7/cdist-type__daemontools","man7/cdist-type__daemontools_service","man7/cdist-type__debconf_set_selections","man7/cdist-type__directory","man7/cdist-type__docker","man7/cdist-type__docker_compose","man7/cdist-type__docker_config","man7/cdist-type__docker_secret","man7/cdist-type__docker_stack","man7/cdist-type__docker_swarm","man7/cdist-type__dog_vdi","man7/cdist-type__dot_file","man7/cdist-type__download","man7/cdist-type__file","man7/cdist-type__filesystem","man7/cdist-type__firewalld_rule","man7/cdist-type__firewalld_start","man7/cdist-type__git","man7/cdist-type__go_get","man7/cdist-type__golang_from_vendor","man7/cdist-type__grafana_dashboard","man7/cdist-type__group","man7/cdist-type__hostname","man7/cdist-type__hosts","man7/cdist-type__install_bootloader_grub","man7/cdist-type__install_chroot_mount","man7/cdist-type__install_chroot_umount","man7/cdist-type__install_config","man7/cdist-type__install_coreos","man7/cdist-type__install_directory","man7/cdist-type__install_file","man7/cdist-type__install_fstab","man7/cdist-type__install_generate_fstab","man7/cdist-type__install_mkfs","man7/cdist-type__install_mount","man7/cdist-type__install_partition_msdos","man7/cdist-type__install_partition_msdos_apply","man7/cdist-type__install_reboot","man7/cdist-type__install_reset_disk","man7/cdist-type__install_stage","man7/cdist-type__install_umount","man7/cdist-type__iptables_apply","man7/cdist-type__iptables_rule","man7/cdist-type__issue","man7/cdist-type__jail","man7/cdist-type__jail_freebsd10","man7/cdist-type__jail_freebsd9","man7/cdist-type__key_value","man7/cdist-type__keyboard","man7/cdist-type__letsencrypt_cert","man7/cdist-type__line","man7/cdist-type__link","man7/cdist-type__locale","man7/cdist-type__locale_system","man7/cdist-type__motd","man7/cdist-type__mount","man7/cdist-type__mysql_database","man7/cdist-type__mysql_privileges","man7/cdist-type__mysql_user","man7/cdist-type__openldap_server","man7/cdist-type__package","man7/cdist-type__package_apk","man7/cdist-type__package_apt","man7/cdist-type__package_dpkg","man7/cdist-type__package_emerge","man7/cdist-type__package_emerge_dependencies","man7/cdist-type__package_luarocks","man7/cdist-type__package_opkg","man7/cdist-type__package_pacman","man7/cdist-type__package_pip","man7/cdist-type__package_pkg_freebsd","man7/cdist-type__package_pkg_openbsd","man7/cdist-type__package_pkgng_freebsd","man7/cdist-type__package_rubygem","man7/cdist-type__package_update_index","man7/cdist-type__package_upgrade_all","man7/cdist-type__package_yum","man7/cdist-type__package_zypper","man7/cdist-type__pacman_conf","man7/cdist-type__pacman_conf_integrate","man7/cdist-type__pf_apply_anchor","man7/cdist-type__pf_ruleset","man7/cdist-type__ping","man7/cdist-type__postfix","man7/cdist-type__postfix_master","man7/cdist-type__postfix_postconf","man7/cdist-type__postfix_postmap","man7/cdist-type__postfix_reload","man7/cdist-type__postgres_database","man7/cdist-type__postgres_extension","man7/cdist-type__postgres_role","man7/cdist-type__process","man7/cdist-type__prometheus_alertmanager","man7/cdist-type__prometheus_exporter","man7/cdist-type__prometheus_server","man7/cdist-type__pyvenv","man7/cdist-type__qemu_img","man7/cdist-type__rbenv","man7/cdist-type__rsync","man7/cdist-type__rvm","man7/cdist-type__rvm_gem","man7/cdist-type__rvm_gemset","man7/cdist-type__rvm_ruby","man7/cdist-type__sensible_editor","man7/cdist-type__service","man7/cdist-type__ssh_authorized_key","man7/cdist-type__ssh_authorized_keys","man7/cdist-type__ssh_dot_ssh","man7/cdist-type__staged_file","man7/cdist-type__start_on_boot","man7/cdist-type__sysctl","man7/cdist-type__systemd_service","man7/cdist-type__systemd_unit","man7/cdist-type__timezone","man7/cdist-type__ufw","man7/cdist-type__ufw_rule","man7/cdist-type__unpack","man7/cdist-type__update_alternatives","man7/cdist-type__user","man7/cdist-type__user_groups","man7/cdist-type__xymon_apache","man7/cdist-type__xymon_client","man7/cdist-type__xymon_config","man7/cdist-type__xymon_server","man7/cdist-type__yum_repo","man7/cdist-type__zypper_repo","man7/cdist-type__zypper_service"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":2,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,sphinx:56},filenames:["cdist-best-practice.rst","cdist-bootstrap.rst","cdist-cache.rst","cdist-configuration.rst","cdist-explorer.rst","cdist-features.rst","cdist-hacker.rst","cdist-install.rst","cdist-integration.rst","cdist-inventory.rst","cdist-manifest.rst","cdist-messaging.rst","cdist-os.rst","cdist-parallelization.rst","cdist-preos.rst","cdist-quickstart.rst","cdist-real-world.rst","cdist-reference.rst","cdist-remote-exec-copy.rst","cdist-saving-output-streams.rst","cdist-stages.rst","cdist-support.rst","cdist-troubleshooting.rst","cdist-type.rst","cdist-types.rst","cdist-upgrade.rst","cdist-why.rst","index.rst","man1/cdist.rst","man1/cdist-dump.rst","man1/cdist-new-type.rst","man7/cdist-type__acl.rst","man7/cdist-type__apt_default_release.rst","man7/cdist-type__apt_key.rst","man7/cdist-type__apt_key_uri.rst","man7/cdist-type__apt_mark.rst","man7/cdist-type__apt_norecommends.rst","man7/cdist-type__apt_ppa.rst","man7/cdist-type__apt_source.rst","man7/cdist-type__apt_unattended_upgrades.rst","man7/cdist-type__apt_update_index.rst","man7/cdist-type__block.rst","man7/cdist-type__ccollect_source.rst","man7/cdist-type__cdist.rst","man7/cdist-type__cdistmarker.rst","man7/cdist-type__check_messages.rst","man7/cdist-type__chroot_mount.rst","man7/cdist-type__chroot_umount.rst","man7/cdist-type__clean_path.rst","man7/cdist-type__config_file.rst","man7/cdist-type__consul.rst","man7/cdist-type__consul_agent.rst","man7/cdist-type__consul_check.rst","man7/cdist-type__consul_reload.rst","man7/cdist-type__consul_service.rst","man7/cdist-type__consul_template.rst","man7/cdist-type__consul_template_template.rst","man7/cdist-type__consul_watch_checks.rst","man7/cdist-type__consul_watch_event.rst","man7/cdist-type__consul_watch_key.rst","man7/cdist-type__consul_watch_keyprefix.rst","man7/cdist-type__consul_watch_nodes.rst","man7/cdist-type__consul_watch_service.rst","man7/cdist-type__consul_watch_services.rst","man7/cdist-type__cron.rst","man7/cdist-type__daemontools.rst","man7/cdist-type__daemontools_service.rst","man7/cdist-type__debconf_set_selections.rst","man7/cdist-type__directory.rst","man7/cdist-type__docker.rst","man7/cdist-type__docker_compose.rst","man7/cdist-type__docker_config.rst","man7/cdist-type__docker_secret.rst","man7/cdist-type__docker_stack.rst","man7/cdist-type__docker_swarm.rst","man7/cdist-type__dog_vdi.rst","man7/cdist-type__dot_file.rst","man7/cdist-type__download.rst","man7/cdist-type__file.rst","man7/cdist-type__filesystem.rst","man7/cdist-type__firewalld_rule.rst","man7/cdist-type__firewalld_start.rst","man7/cdist-type__git.rst","man7/cdist-type__go_get.rst","man7/cdist-type__golang_from_vendor.rst","man7/cdist-type__grafana_dashboard.rst","man7/cdist-type__group.rst","man7/cdist-type__hostname.rst","man7/cdist-type__hosts.rst","man7/cdist-type__install_bootloader_grub.rst","man7/cdist-type__install_chroot_mount.rst","man7/cdist-type__install_chroot_umount.rst","man7/cdist-type__install_config.rst","man7/cdist-type__install_coreos.rst","man7/cdist-type__install_directory.rst","man7/cdist-type__install_file.rst","man7/cdist-type__install_fstab.rst","man7/cdist-type__install_generate_fstab.rst","man7/cdist-type__install_mkfs.rst","man7/cdist-type__install_mount.rst","man7/cdist-type__install_partition_msdos.rst","man7/cdist-type__install_partition_msdos_apply.rst","man7/cdist-type__install_reboot.rst","man7/cdist-type__install_reset_disk.rst","man7/cdist-type__install_stage.rst","man7/cdist-type__install_umount.rst","man7/cdist-type__iptables_apply.rst","man7/cdist-type__iptables_rule.rst","man7/cdist-type__issue.rst","man7/cdist-type__jail.rst","man7/cdist-type__jail_freebsd10.rst","man7/cdist-type__jail_freebsd9.rst","man7/cdist-type__key_value.rst","man7/cdist-type__keyboard.rst","man7/cdist-type__letsencrypt_cert.rst","man7/cdist-type__line.rst","man7/cdist-type__link.rst","man7/cdist-type__locale.rst","man7/cdist-type__locale_system.rst","man7/cdist-type__motd.rst","man7/cdist-type__mount.rst","man7/cdist-type__mysql_database.rst","man7/cdist-type__mysql_privileges.rst","man7/cdist-type__mysql_user.rst","man7/cdist-type__openldap_server.rst","man7/cdist-type__package.rst","man7/cdist-type__package_apk.rst","man7/cdist-type__package_apt.rst","man7/cdist-type__package_dpkg.rst","man7/cdist-type__package_emerge.rst","man7/cdist-type__package_emerge_dependencies.rst","man7/cdist-type__package_luarocks.rst","man7/cdist-type__package_opkg.rst","man7/cdist-type__package_pacman.rst","man7/cdist-type__package_pip.rst","man7/cdist-type__package_pkg_freebsd.rst","man7/cdist-type__package_pkg_openbsd.rst","man7/cdist-type__package_pkgng_freebsd.rst","man7/cdist-type__package_rubygem.rst","man7/cdist-type__package_update_index.rst","man7/cdist-type__package_upgrade_all.rst","man7/cdist-type__package_yum.rst","man7/cdist-type__package_zypper.rst","man7/cdist-type__pacman_conf.rst","man7/cdist-type__pacman_conf_integrate.rst","man7/cdist-type__pf_apply_anchor.rst","man7/cdist-type__pf_ruleset.rst","man7/cdist-type__ping.rst","man7/cdist-type__postfix.rst","man7/cdist-type__postfix_master.rst","man7/cdist-type__postfix_postconf.rst","man7/cdist-type__postfix_postmap.rst","man7/cdist-type__postfix_reload.rst","man7/cdist-type__postgres_database.rst","man7/cdist-type__postgres_extension.rst","man7/cdist-type__postgres_role.rst","man7/cdist-type__process.rst","man7/cdist-type__prometheus_alertmanager.rst","man7/cdist-type__prometheus_exporter.rst","man7/cdist-type__prometheus_server.rst","man7/cdist-type__pyvenv.rst","man7/cdist-type__qemu_img.rst","man7/cdist-type__rbenv.rst","man7/cdist-type__rsync.rst","man7/cdist-type__rvm.rst","man7/cdist-type__rvm_gem.rst","man7/cdist-type__rvm_gemset.rst","man7/cdist-type__rvm_ruby.rst","man7/cdist-type__sensible_editor.rst","man7/cdist-type__service.rst","man7/cdist-type__ssh_authorized_key.rst","man7/cdist-type__ssh_authorized_keys.rst","man7/cdist-type__ssh_dot_ssh.rst","man7/cdist-type__staged_file.rst","man7/cdist-type__start_on_boot.rst","man7/cdist-type__sysctl.rst","man7/cdist-type__systemd_service.rst","man7/cdist-type__systemd_unit.rst","man7/cdist-type__timezone.rst","man7/cdist-type__ufw.rst","man7/cdist-type__ufw_rule.rst","man7/cdist-type__unpack.rst","man7/cdist-type__update_alternatives.rst","man7/cdist-type__user.rst","man7/cdist-type__user_groups.rst","man7/cdist-type__xymon_apache.rst","man7/cdist-type__xymon_client.rst","man7/cdist-type__xymon_config.rst","man7/cdist-type__xymon_server.rst","man7/cdist-type__yum_repo.rst","man7/cdist-type__zypper_repo.rst","man7/cdist-type__zypper_service.rst"],objects:{},objnames:{},objtypes:{},terms:{"":[0,1,2,3,4,5,7,9,10,13,15,17,19,23,25,28,30,40,44,48,51,57,58,59,60,61,62,63,64,76,77,79,80,109,110,111,114,115,124,142,146,171,173,181,186],"0608b895":189,"100g":100,"100gb":100,"10g":100,"10gb":100,"10s":[52,54],"128m":100,"128mb":100,"15g":100,"1_all":128,"1_linux_amd64":173,"256m":16,"30s":[52,55],"32m":100,"360060e80432f560050202f22000023ff":79,"437d05b5":33,"46da3021ca9eace277115ec9106c5b46":[77,181],"4_amd64":128,"50g":[75,161],"512m":100,"512mb":100,"69767822f3ecc3c349c1efffefd2ae4ec36b6901":7,"759547ff4356de6e3d9e08522b0d0807":28,"75ee6a79e32da093da23fe4a13dd104b":19,"80_dn":145,"\u013eubom\u00edr":[71,72,73,74,93,114,177],"boolean":[3,17,23,25,28],"br\u00f6nnimann":136,"break":[1,6,25],"case":[4,8,10,11,13,16,19,23,26,28,78,95,124,127,176,181,190],"default":[0,3,8,10,13,14,17,18,19,23,25,28,29,30,31,32,33,34,37,38,39,41,42,43,44,48,50,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,84,86,87,89,92,93,94,95,96,98,99,100,104,105,107,108,109,110,111,112,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,149,150,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,188,189,190,191],"export":[0,7,10,11,15,17,25,158],"final":[10,16,17,28,173],"function":[3,6,8,9,14,17,23,28,115],"import":[0,7,8,16,19,31],"jim\u00e9nez":[139,140],"ku\u010dera":[71,72,73,74,93,114,177],"long":[10,52,54,157,159],"new":[1,4,9,11,16,20,26,29,39,51,55,56,76,79,86,112,143,153,177,183,191],"null":[4,23,49],"public":[0,6,7,15,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],"return":[4,16,19,28,55,128,147],"salvad\u00f3":178,"short":180,"sou\u010dkov\u00e1":[65,66,83,84,85,114,145,146,157,158,159],"static":[9,14,23,28,87,154,155,189],"switch":[1,141],"timoth\u00e9":169,"true":[3,14,16,17,23,28,39,49,51,100,109,110,111,180],"try":[8,14,16,20,25,51,77,112,147],"var":[0,3,9,16,28,120,143,173],"while":[2,4,17,18,23,26,55,186],AND:6,Added:112,And:[10,16,22,119],But:[1,5,10,22,23],DNS:[16,186],For:[0,1,2,3,6,8,9,10,13,14,15,16,17,18,19,20,22,23,28,39,45,74,77,79,87,142,177,189,191],IPs:185,Its:[16,17,28],NOT:[43,156],Not:26,ONE:156,One:[13,17,23,28,66,78,95,182,186],RIS:191,TLS:[51,124],That:[2,3,15,26,119],The:[0,1,4,6,7,9,10,11,13,14,17,18,20,22,25,28,32,37,41,42,44,48,51,52,54,55,56,64,66,69,75,78,79,80,83,84,87,89,95,96,97,98,104,107,109,110,111,112,114,115,116,118,124,125,127,128,137,139,140,142,143,144,145,154,156,161,165,166,167,170,171,173,175,176,177,179,180,187,188],Their:23,Then:[7,16,28],There:[1,4,5,6,8,9,16,19,23,26,56,176],These:[10,23,28],USE:156,Use:[0,3,6,17,25,28,43,46,47,52,54,67,78,95,109,110,111,119,134,160,163,170,171,182],Used:[17,28],Useful:[28,55,157,159],Uses:[5,96],Using:16,Will:[157,159,179],With:[0,9,14,18,23],__a:28,__acl:[17,24,31],__addifnosuchlin:25,__apach:20,__apt_default_releas:[17,24,32],__apt_kei:[17,24,33],__apt_key_uri:[17,24,34],__apt_mark:[17,24,35],__apt_norecommend:[17,24,36],__apt_ppa:[17,24,37],__apt_sourc:[17,24,38],__apt_unattended_upgrad:[17,24,39],__apt_update_index:[16,17,24,40],__archlinux_hostnam:23,__autof:25,__autofs_map:25,__autofs_reload:25,__b:28,__bar:23,__block:[11,17,24,41],__c:28,__ccollect_sourc:[17,24,42],__cdist:[17,24,43],__cdist_colored_log:17,__cdist_dry_run:[17,23],__cdist_log_level:[17,23],__cdist_log_level_nam:17,__cdistmark:[10,17,24,44],__check_messag:[17,24,45],__chroot_mount:[17,24,46,47],__chroot_umount:[17,24,46,47],__clean_path:[17,24,48],__config_fil:[17,24,49,176],__consul:[17,24,50],__consul_ag:[17,24,51],__consul_check:[17,24,52],__consul_reload:[17,24,53],__consul_servic:[17,24,54],__consul_templ:[17,24,55],__consul_template_templ:[17,24,56],__consul_watch_check:[17,24,57],__consul_watch_ev:[17,24,58],__consul_watch_kei:[17,24,59],__consul_watch_keyprefix:[17,24,60],__consul_watch_nod:[17,24,61],__consul_watch_servic:[17,24,62,63],__cron:[17,24,64],__cycle1:10,__cycle2:10,__cycle3:10,__cyclex:10,__d:28,__daemontool:[17,24,65,66,158],__daemontools_servic:[17,24,66],__debconf_set_select:[17,24,25,67],__directori:[10,16,17,24,25,31,68,77,181],__docker:[17,24,69],__docker_compos:[17,24,70],__docker_config:[17,24,71],__docker_secret:[17,24,72],__docker_stack:[17,24,73],__docker_swarm:[17,24,74],__dog_vdi:[17,24,75],__dot_fil:[17,24,76],__download:[17,24,77,181],__e:28,__example_typ:10,__explor:[4,17],__f:28,__file:[0,10,11,13,15,16,17,20,23,24,25,31,50,55,56,76,78,95,137,145,173],__file__:16,__filesystem:[17,24,79],__firewalld_rul:[17,24,80],__firewalld_start:[17,24,81],__foo:[23,30],__g:28,__git:[17,24,28,82],__global:[11,16,17,23,51],__go_get:[17,24,83],__golang_from_vendor:[17,24,83,84,158],__grafana_dashboard:[17,24,85],__group:[17,24,86],__h:28,__host:[17,24,88],__hostnam:[17,24,87],__install_bootloader_grub:[17,24,89],__install_chroot_mount:[17,24,90,91],__install_chroot_umount:[17,24,91],__install_config:[17,24,92],__install_coreo:[17,24,93],__install_directori:[17,24,94],__install_fil:[17,24,95],__install_fstab:[17,24,96],__install_generate_fstab:[17,24,96,97],__install_mkf:[17,24,98,99],__install_mount:[17,24,97,99],__install_nam:23,__install_partition_msdo:[17,24,100,101],__install_partition_msdos_appli:[17,24,101],__install_reboot:[17,24,102],__install_reset_disk:[17,24,103],__install_stag:[17,24,104],__install_umount:[17,24,105],__iptables_appli:[17,24,106],__iptables_rul:[17,24,106,107],__issu:[17,23,24,108],__jail:[17,24,109],__jail_freebsd10:[17,24,110],__jail_freebsd9:[17,24,111],__key_valu:[11,17,24,112],__keyboard:[17,24,113],__letsencrypt_cert:[16,17,24,114,124],__line:[17,24,25,115],__link:[10,17,24,25,116],__local:[17,24,117],__locale_system:[17,24,118],__main__:16,__manifest:[0,10,17,22,56,146,157,159,177],__messages_in:[11,17],__messages_out:[11,17,176],__motd:[17,24,119],__mount:[17,24,120],__myfancysingleton:23,__mylin:19,__mysql_databas:[17,24,121],__mysql_privileg:[17,24,122],__mysql_us:[17,24,123],__name:23,__name__:16,__nginx_vhost:23,__not_in_order_typ:10,__object:[0,4,16,17,23],__object_id:[4,16,17,23,33,34,41,48,52,54,76,77,120,145,150,158,189],__object_nam:[17,25],__openldap_serv:[17,24,124],__packag:[10,16,17,23,24,25,125,141],__package_:23,__package_apk:[17,24,126],__package_apt:[17,24,25,125,127,128],__package_dpkg:[17,23,24,128],__package_emerg:[17,24,125,129,130],__package_emerge_depend:[17,24,130],__package_luarock:[17,24,131],__package_opkg:[17,24,132],__package_pacman:[17,24,133],__package_pip:[16,17,24,134],__package_pkg_freebsd:[17,24,135],__package_pkg_openbsd:[17,24,136],__package_pkgng_freebsd:[17,24,137],__package_rubygem:[17,24,138],__package_update_index:[10,17,24,139],__package_upgrade_al:[10,17,24,140],__package_yum:[17,24,141],__package_zypp:[17,24,142],__pacman_conf:[17,24,143],__pacman_conf_integr:[17,24,144],__pf_apply_anchor:[17,24,145],__pf_ruleset:[17,24,146],__ping:[17,24,147],__postfix:[17,24,148],__postfix_mast:[17,24,149],__postfix_postconf:[17,24,150],__postfix_postmap:[17,24,151],__postfix_reload:[17,24,152],__postgres_databas:[16,17,24,153],__postgres_extens:[17,24,154],__postgres_rol:[16,17,24,155],__process:[17,24,25,156],__prometheus_alertmanag:[17,24,157],__prometheus_export:[17,24,158],__prometheus_serv:[17,24,159],__pyvenv:[17,24,160],__qemu_img:[17,24,161],__rbenv:[17,24,162],__remote_:92,__remote_copi:[18,23],__remote_exec:[18,23],__removelin:25,__rsync:[17,24,163,187],__rvm:[17,24,164],__rvm_gem:[17,24],__rvm_gemset:[17,24,25,165,166],__rvm_rubi:[17,24,25,165,166,167],__sample_typ:10,__self:25,__sensible_editor:[17,24,168],__servic:[17,24,169],__singleton_typ:25,__some_type_somewher:10,__ssh_authorized_kei:[17,24,25,28,170,171,172],__ssh_dot_ssh:[17,24,171,172],__staged_fil:[17,24,50,173],__start_on_boot:[17,24,174],__sysctl:[17,24,175],__systemd_servic:[17,24,176],__systemd_unit:[17,24,177],__target_fqdn:[10,17],__target_host:[10,16,17,23,87,145,146],__target_host_tag:17,__target_hostnam:[10,17],__timezon:[17,24,178],__type:[0,10,17,23,49,67,78,95,108,119,128,163],__type_explor:[4,17],__ufw:[17,24,179],__ufw_rul:[17,24,180],__ungleich_ldap:124,__ungleich_munin_nod:0,__ungleich_munin_serv:0,__unpack:[17,24,77,181],__update_altern:[17,24,182],__user:[10,16,17,24,25,183],__user_group:[17,24,25,184],__xymon_apach:[17,24,185,188],__xymon_cli:[17,24,186,188],__xymon_config:[17,24,187,188],__xymon_serv:[17,24,185,187,188],__your_typ:11,__yourtyp:23,__yum_repo:[17,24,189],__zypper_repo:[17,24,190],__zypper_servic:[17,24,191],_bottl:16,_cdist_preo:14,_ip:[109,111],_manag:49,_netdev:120,_plus_:187,_preos_nam:14,_proxi:77,_replaces_:187,abl:[15,23],abort:[4,10,22],about:[1,6,9,10,14,17,19,20,23,45,74,76,177],abov:[2,3,6,10,15,22,23,86,117,118,139,171,183],absent:[10,25,33,34,37,38,41,42,50,51,52,54,55,56,57,58,59,60,61,62,63,64,68,69,70,71,72,73,74,75,78,80,81,82,86,88,94,95,107,109,110,111,112,114,115,116,117,118,120,121,122,125,126,127,128,129,131,132,133,134,135,136,137,138,141,142,143,144,146,149,153,154,155,156,160,161,162,164,165,166,167,168,170,171,172,174,177,179,180,183,184,185,186,188,189,190,191],absolut:[116,168],accept:[6,10,14,17,25,28,79,80,107],access:[1,7,10,14,16,17,26,28,31,51,80,185,188],access_log:[0,16],accid:11,accomplish:18,accord:17,account:[10,18,21,119,165,166,167,183],achiev:[175,181],acl:[31,51,52,57,58,59,60,61,62,63],acl_datacent:51,acm:16,across:0,act:[4,17,112],action:[72,169,176],activ:[7,16,176,185,186],actual:[14,16,125],adamsbro:124,add:[0,1,6,7,9,10,15,26,33,34,41,44,54,65,76,85,86,88,109,110,111,115,117,136,143,149,158,171,172,180,183,184],added:[10,25,28,41,64,66,86,109,110,111,115,124,170,171,181,183,184],adding:[10,180,191],addit:[0,6,17,26,28,55,79,112],addition:1,addr:51,address:[18,23,28,51,55,88,109,110,111,186],adher:27,adjust:0,admin:[16,17,114,124,155],administr:13,advantag:[7,177],advic:87,affect:10,after:[0,2,10,11,14,16,17,23,25,28,41,51,52,53,56,77,100,115,149,176,180,181],afterward:[10,14,28],again:[6,23,114],against:[44,92,143,169],age:139,agent:[15,26,51,52,54,57,58,59,60,61,62,63,171],aim:[4,8,15],akp:126,alert:157,alertmanag:157,alertport:159,alia:[23,88],alic:[31,76],alik:[67,182],all:[0,1,2,3,6,8,9,10,11,14,15,17,19,20,22,23,25,26,28,29,31,55,62,64,68,76,94,100,103,115,121,122,140,142,146,155,170,171,180,189,190,191],allen:138,allow:[0,1,11,15,16,17,23,28,31,37,38,42,43,51,64,68,78,79,80,81,82,83,84,86,89,92,94,95,100,102,105,107,108,112,113,115,116,117,118,119,125,127,137,139,140,143,144,153,154,155,156,160,162,163,168,169,171,174,178,179,180,183,185],almost:[4,26],along:28,alpin:[12,117,126],alreadi:[6,10,13,25,28,34,68,72,76,78,95,137,160,168],also:[0,1,3,4,7,8,10,13,14,15,16,17,19,23,25,26,28,121,162,190],alter:68,altern:[1,43,55,109,110,111,149,171,176,182],although:22,alwai:[3,6,10,15,17,23,26,28,64,133,135,136,137,141,142,190],ambigu:[135,136,137],amd64:[28,136],among:[0,55],amongst:124,amount:[26,55],anchor:145,anchor_nam:145,ander:[31,33,35,39,45,48,77,121,122,123,181],andi:136,andorra:178,ani:[5,6,7,9,10,11,17,23,25,26,28,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,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,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],anoth:[1,6,10,23,43,67,78,95,108,109,110,111,115],another_featur:6,anymor:[107,162,172],anyth:[79,104],anywai:2,apach:[185,188],apache2:[10,48,116,126,176,185],api:55,apk:126,app:[16,52,129,130],append:[3,10,11,28,163,175],apphom:16,appli:[5,10,16,20,23,26,55,79,80,86,101,106,107,145,176,183],applic:[8,10,180],approach:[15,163],appropri:[0,10,28,109,110,111,139,140],apt:[16,23,32,33,34,35,36,38,40,127,139,140,157,159],arbitrari:169,arch:[28,38,139,140,189],architectur:[5,28,84,128,143],archiv:[3,7,28,33,38,84,109,110,111,173,181],archive_shell_function_approach:1,archlinux:[12,23,78,95,133],area:[1,17],arg:14,argpars:8,argument:[0,14,16,18,23,28,41],argv:14,armstrong:[28,30,33,34,36,37,38,40,41,46,47,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,69,86,87,89,90,91,92,96,97,98,99,100,101,102,103,104,105,112,115,118,120,125,148,149,150,151,152,153,155,170,171,173,175,183,184,189],asc:[7,33,34],ascii:[157,159],ask:11,associ:[109,110,111],assum:[1,6,7,15,17,23,25,55,56,160],assumpt:76,assur:16,attempt:[51,114],attent:[10,190],attribut:[14,25,68,78,95],auth:[55,115],authent:[0,15,33,51,55],author:[6,14],authorit:51,authorized_kei:[170,171],auto:[0,3,17,28,143],autofixinterrupteddpkg:39,automat:[0,10,15,16,28,33,39,51,76,114,124,139,140,158,179],autorequir:10,autorized_kei:170,avail:[0,1,5,10,14,15,17,22,23,28,116,137,139,142,143,158,163,170,171,178,190],avoid:[127,135,136,137],avow:119,awai:[6,156],awar:0,awk:[26,77,115],axyzaab3nzac1yc2:171,azxyaab3nzac1yc2:171,back:[6,11,20,23,25,26],backport:[157,159],backup:[1,42,47,171,181],bandwidth:189,banner:25,bar:[30,59,71,72,114,121,128,170],bar_1:128,bare:1,base:[0,1,6,9,17,28,30,109,110,111,112,124,125,128,139,140,163,166,170,171],basearch:189,basedn:124,baseurl:189,bash:[0,7,16,64,136,137],bashrc:[78,95],basi:0,basic:[0,55,182],bastian:162,batch:55,batteri:5,baz:[59,128],baz_1:128,becaus:[6,10,15,16,19,23,28,116,156],becom:[16,77],been:[23,25,78,95,119,163,173,174],befor:[1,6,7,10,11,16,22,23,41,55,56,86,89,92,112,115,191],beforehand:124,began:162,begin:[16,19,163],behav:[3,17,18,23,28],behavior:[23,51],behaviour:[5,17,23,68,94],being:[0,26,27,44,52,54,73,172],believ:6,belong:142,below:[0,4,10,11,17,23,28],benefit:6,besid:[17,119],best:[1,10],beta:[3,9,17,28,163],better:[0,3,6,26,163],between:[10,11,16,17,26,41,112,157,159],big:[0,82],bill:165,billi:164,bin:[0,2,3,7,10,15,16,17,19,22,23,26,28,50,52,54,57,58,59,60,61,62,63,64,66,134,160,163,168,173,182,183],binari:[50,51,55,70,128,156],bind:[51,109,110,111,150],bintrai:[50,173],binutil:142,bit:[17,37,119],biz:[79,129,130,142,190,191],bla:155,blackbox:158,blacklist:39,blank:[16,148,151,152],block:[0,6,10,11,41,98,180],block_smtp:180,blockdevic:79,blog:124,bob:[31,76],bodi:[16,23],bogatov:[76,88],boot:[14,28,65,81,85,99,109,110,111,174,179],bootabl:[28,100],bootload:89,bootstat:81,bootstrap:[14,28,51,124],both:[3,4,7,9,16,121],bottle_pgsql:16,bound:[19,52],box:43,br0:80,bracket:[18,23,28],brain:6,branch:[0,6,7,23,25,28,43,82],branchnam:7,british:117,broken:20,brought:6,brow:119,browser:6,bsd:[145,146],btrf:79,bug:[5,21],bugfix:[6,7],build:[0,6,10,43,98,153,158,162],built:[7,9,14],bulletin:51,buster:32,bz2:181,bzip2:28,c99:162,ca_fil:51,cach:[3,15,17,19,22,29,51,139,143],cache_path_pattern:[2,3,28],calcul:[28,77],call:[0,4,5,10,14,16,17,20,22,23,25,26,38,68,79,94,108,109,110,111,175],camera:[88,168],camilion:124,can:[0,1,2,3,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22,25,26,28,29,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,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,114,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,168,169,170,171,172,173,174,175,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],cannot:[23,28,71,72],canon:38,canonical_partn:38,care:[6,17,124,127,145,185],carlo:[113,118],carri:[22,179],cat:[0,4,5,9,11,16,19,22,23,51,170,171,173],catalina:[139,140],catalog:52,categori:118,caus:[4,17],cbrg:0,ccollect:42,ccollect_conf:42,ccollectconf:42,cconfig:20,cdist:[1,2,3,4,5,10,11,12,13,14,15,17,18,19,20,21],cdist__rsync:187,cdist__unpack_backup_yyi:181,cdist__unpack_sum:181,cdist__xymon_apach:188,cdist__xymon_cli:188,cdist__xymon_config:188,cdist__xymon_serv:[185,186,187],cdist_beta:[9,17,28],cdist_cache_path_pattern:[2,17,28],cdist_colored_output:[17,28],cdist_config_fil:[3,28],cdist_inventory_dir:[17,28],cdist_local_shel:[17,23,28],cdist_mark:44,cdist_order_depend:[10,17,28],cdist_overrid:[10,17,28],cdist_param:28,cdist_path:[8,17,28],cdist_remote_copi:[17,28],cdist_remote_exec:[17,28],cdist_remote_shel:[17,28],cdisttesthost:28,cdit:[28,113,120],cdn:[77,181],cento:[11,12,168,179],central:[0,5,17,178],ceph:158,cert:[16,51,55,114,124],cert_fil:51,certbot:[114,124],certif:[51,55,104,114,124],cet:7,cfengin:142,cfg:[3,28],cgi:185,chain:[45,80],challeng:16,chang:[0,1,5,6,11,16,17,20,23,25,31,40,41,45,49,53,59,60,62,68,71,73,76,78,86,87,94,95,109,110,111,112,114,115,123,124,145,149,150,163,171,173,176,177,191],channel:13,charact:[3,16,28,153],charl:166,charset:48,chase:138,chdir:16,check:[0,4,16,20,23,45,51,52,54,57,62,68,78,82,95,104,119,143],check_redi:[52,54],checkout:[0,1,6,7,25,43,82],checksum:[77,173,181],chgrp:[68,78,82,94,95,160,163],chmod:[16,68,78,82,94,95,160],choic:119,choos:87,chosen:[125,127,142],chown:[68,78,82,94,95,160,163],christian:131,chroot:[46,47,89,90,91,92,149],cipher:124,circular:10,cksum:[77,173],classifi:115,classmethod:14,clean:[48,140],cleanli:5,clear:5,clearli:22,client:[7,23,51,55,186,188],client_max_body_s:16,clone:[0,1,6,7,15,22,43,82],cloud:[9,124],cls:14,cluster:51,cmd:[77,80,83],cnq3:[77,181],code:[0,2,5,7,10,13,15,17,18,19,22,23,25,28,29,43,48,49,68,78,82,94,95,112,115,145,146,162,173],codenam:[32,38],collabor:1,collat:153,collect:[20,99],collis:23,colon:[17,23,28,55,56,154],color:[3,17,28],colored_output:[3,28],colour:[23,117],com:[6,33,34,38,44,50,55,56,71,72,73,74,77,82,83,85,88,93,109,110,111,114,115,124,135,136,137,138,139,140,143,144,145,146,150,160,171,173,177,178,179,180,181,187,188],combin:[10,109,110,111],come:[7,9],comma:[17,28,120],command:[1,3,7,9,10,16,17,19,22,28,45,46,52,54,55,56,64,66,77,80,90,94,95,98,107,114,147,149,158,170,173,180],commandlin:14,comment:[6,28,31,112,149,170,171,183],commit:[0,1,25],common:[0,10,44,182],commun:[11,15,17,51,55,69],compani:[0,1],company_a:0,company_b:0,compar:26,compat:[1,26,28,48,65,66,75,158,161],complet:[5,20,28,188],complex:173,compon:[3,23,28,38,175,181],compos:[70,73],compress:[28,104],comput:[5,26],concret:160,condit:[10,26],condition:10,conf:[0,2,3,6,10,13,15,17,19,23,25,28,46,47,48,49,56,109,110,111,112,115,124,137,143,144,146,156,175,176,185,189],conf_dir:[3,28],confdir:[17,187,188],config:[0,1,9,10,13,15,16,17,19,25,49,51,55,71,76,77,92,93,112,114,124,128,157,159,177,185],config_fil:[3,28],configur:[2,5,6,7,8,10,11,13,14,15,17,19,20,23,25,29,32,36,39,43,44,51,53,55,56,67,76,78,80,88,95,106,109,110,111,117,143,149,150,152,157,158,159,168,174,176,178,179,182,185,186,187,188],configure_hosts_simpl:8,conflict:[1,20,28,56,57],conform:144,confus:[141,180],connect:[13,26,28,39,51,55,124,147],consid:[1,3,6,23,41,52,54],consist:[5,17,23,25,44,154],constraint:163,consul:[49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,158,173],consult:0,consumpt:66,contact:[124,145,164,165,166,167],contain:[0,1,2,6,9,10,16,17,20,23,26,28,32,52,55,109,110,111,170,171,173,187],content:[2,9,10,11,14,16,17,23,28,31,44,46,47,49,51,56,78,95,119,163,177,181,187],context:[9,10,19],continu:[15,16,22,25,28],contrib:16,contribut:119,control:[0,7,11,13,18,28,51,176],controlmast:0,controlpath:0,controlpersist:0,controlsocket:13,convent:[0,128],convention:[3,28],convert:144,cool:6,copi:[1,3,6,11,15,17,20,23],copyright:[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,177,179,180,181,182,183,184,185,186,187,188,189,190,191],core:[5,6,17,26],coreo:[93,177],correct:[79,109,110,111,112],correctli:[10,28,68,94],correspond:[6,155],cost:189,could:[0,4,15,16,23,28],count:28,cours:13,cpma:[77,181],cpu:[3,28],cpu_cor:17,cpu_count:13,cpu_socket:17,creat:[0,1,2,6,7,11,14,15,17,19,20,23,25,28,30,31,42,43,44,50,51,55,66,68,71,72,75,76,78,79,82,86,94,95,100,101,109,110,111,112,114,116,121,123,124,153,154,155,157,158,159,160,161,170,171,178,181,183,190],createdb:[16,155],createextens:154,createrol:155,creation:[0,5,10,30,86],credenti:124,croatia:[9,28],cron:[64,114],cronjob:64,crontab:64,crt:124,crypt:86,ctmpl:56,ctype:153,cup:156,cupsd:156,curl:[52,77,104,173],currag:139,current:[0,1,2,3,10,14,16,17,20,23,25,28,31,46,51,109,110,111,119,146,154,155,158,181],current_valu:86,custom:[7,16,17,18,22,25,28,92,124],customerx:1,customlist:143,customlist_serv:143,cwarden:131,cycl:10,cycle11:10,cycle12:10,cycle13:10,cycle1:10,cycle21:10,cycle22:10,cycle23:10,cycle24:10,cycle2:10,cycle31:10,cycle32:10,cycle33:10,cycle34:10,cycle3:10,cyclexi:10,d886d4b7e4425a102a54bfaff4d2288b:13,daemon:[16,39],daemontool:[65,66,158],dai:[64,119,127,157,159,188],daili:[26,114],daniel:[44,79,142,190,191],darko:[9,19,23,28,29,30,50,81,114,160],dash:[0,7,41,49,51,56,71,72,73,78,95,119,177],data:[2,3,13,17,19,22,23,28,29,57,58,59,60,61,62,63,79,99,114,157,159],databas:[1,10,17,20,25,28,121,122,153,154],datacent:[51,57,58,59,60,61,62,63],date:[28,44,64,82],datetim:28,day_of_month:64,day_of_week:64,dbcustom:155,dbname:[16,154],dc1:51,dcobject:124,ddb:175,de_ch:[117,118],deactiv:176,deal:179,dear:6,deb:[38,128],debconf:67,debian9:19,debian:[11,12,14,23,38,39,67,119,124,125,127,128,139,140,168,182],debianutil:168,debootstrap:28,debug:[2,3,4,5,17,23,28,29,39,55,115],decad:26,decid:[1,3,10,17,20,77],decis:1,declar:[10,23],dedic:0,deduc:76,deem:119,def:[14,16,112],default_incom:179,default_outgo:179,default_rout:179,defin:[0,3,5,11,14,16,17,20,28,64,70,73,101,124,146,156,176],definit:[52,54,56,57,58,59,60,61,62,63,97,124,137],deinstal:25,del:9,delai:0,deleg:0,delet:[9,28,42,78,95,109,110,111,143,180,181,183,187],delimit:[16,17,23,28,29,38,112],deni:[51,179,180],denni:[88,168],dep:28,depend:[0,11,13,16,17,28,39,45,51,55,124,125,130,160,168,176,181,185,188],deploi:[17,25,49,50,52,54,55,56,57,58,59,60,61,62,63,73,106,107,124,173,187,188],deploy:131,deprec:124,depth:[10,82],deriv:[17,124,168],describ:[1,6,10,11],design:[5,51],desir:[7,8,14,20,178],destin:[23,42,44,56,77,97,115,116,163,171,181],detach:7,detail:[0,6,13,16,17,23,28,31,35,48,124,128,181,186],detect:[10,16,28,73,181],determin:[2,14,44,125,139,140],dev:[0,4,16,23,28,49,79,89,93,98,99,100,103,120],dev_sdb:79,devel:129,develop:[1,4,5,6,7,11,25],devf:[109,110,111],devic:[1,79,89,93,97,98,99,100,120],devuan:[12,14,16,119,157,159,168],dhcp:14,diagnost:[20,23],diagram:0,did:[6,15,47,91,176],diff:[6,25],differ:[1,3,4,5,10,11,16,17,20,23,26,28,44,79,119,127,156,157,159,183],dig:1,dir1:3,dir2:3,dir:[3,16,28,29,66,99,120,163,173,187,191],direct:[28,50,80],directli:[7,17,23,44,50,114,150,155,175],directori:[0,2,3,6,7,8,9,10,14,15,17,19,22,23,25,28,29,30,31,42,48,55,65,66,68,76,78,94,95,105,116,124,157,158,159,163,171,172,173,181,187,188],dirnam:16,disabl:[3,13,19,28,29,37,51,81,109,110,111,146,171,174,177,190],disablegroup:189,disallow:[109,110,111],discard:191,discourag:186,discov:19,discoverd:79,discoveri:158,disk:[17,55,56,79,89,103,161],dispatch:125,displai:[28,62,141],dist:[7,140],distinguish:[0,10],distrib_codenam:38,distribut:[0,3,7,14,15,16,17,28,38,51,55,107,129,130,133,141,142,160,179,190],distutil:7,django:9,djangoenv:160,djb:65,dmitri:[76,88],dns1:8,dns2:8,dns3:8,dns:8,dnsmasq:132,doc:[7,25,28,42,51,52,54,57,58,59,60,61,62,63,154,155,157,158,159],docker:[52,69,70,71,72,73,74],docker_compos:70,document:[0,1,5,15,16,23,45,51,52,54,55,56,57,58,59,60,61,62,63,154,155,157,158,159,186],documentation_cleanup:6,doe:[2,11,14,16,17,22,23,26,28,51,52,68,71,72,73,78,79,92,94,95,104,109,110,111,114,119,145,150,162,172,175,176],doesn:[78,95,112],dog:75,doing:17,dokuwiki:82,domain:[16,17,114,120,145],dominiqu:[70,143,144],don:[1,6,23,31,117,127,133,135,136,137,141,142,149,171,181],done:[2,6,10,11,16,23,41,78,95,124,145,188],dos:101,dot:[31,33,39,45,48,77,121,122,123,178,181],dot_cdist_path:7,dotman:7,doubl:17,down:51,download:[7,33,34,50,55,77,104,173],dpkg:[4,23,128],dport:107,dream:119,drive:28,drop:[6,13,25,28,107,153,154,155,183,190,191],dry:[17,28,163],dsl:26,due:[0,51,157,159],dumb:23,dump:120,dure:[2,19,20,25,28,96,97],dynam:[2,9,26,28],each:[0,1,2,4,9,10,13,16,19,23,28,124,171],earli:[1,4],eas:8,easi:[1,15,25,26,73],easili:[0,43,79,108,119],eat:25,echo:[0,6,11,15,16,22,23,31,124,173],eckert:[128,139,156,185,186,187,188],edit:[0,15,16,64,69,76,124],editor:[168,182],effect:[0,124,175],egg:[16,23],egress:[179,180],either:[3,10,11,13,17,23,25,26,28,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,71,72,73,74,75,77,78,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,114,116,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,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],els:[4,10,11,16,23,64],elswher:171,em0:[109,110,111],email:[16,30,114,124],emerg:23,emit:[11,50],empti:[1,4,10,17,23,28,31,38,39,68,78,94,95,128],emul:[2,28],en_gb:117,en_u:118,enabl:[1,3,13,16,17,28,29,37,38,48,51,55,81,109,110,111,112,116,146,157,159,174,177,179,185,186,189,190],enablegroup:189,enclos:[18,23,28],encod:[51,124,153,170,171],encor:65,encount:[10,13,23,28],encrypt:[51,114,124],end:[10,19,28,41],enforc:51,engin:26,english:117,ensur:[0,6,10,15,16,17,23,25,68,79,80,94,107,112,115,124,126,127,129,130,131,132,133,135,136,137,138,141,142,147,156,160,171,172,174,190,191],enter:[1,15,28],enterpris:[27,189],entranc:80,entri:[0,2,10,16,17,31,38,64,88,115,120,149,170,171,175],env:[9,16,28],environ:[2,3,5,10,11,16,22,27,77,124,134,160,164,165,166,167,170],eof:[0,11,16,23,67,119,145],epel:[141,168,179,189],eprotex:[111,135,137,145,146],equal:[9,16,78,95],equival:145,err:55,error:[3,4,5,8,10,16,17,19,20,23,28,55,78,95,127,137,141,175],error_log:0,esac:[10,11,16,23],especi:4,essenti:[0,10,80,107,127],establish:107,etc:[0,3,6,10,11,15,16,21,23,28,33,38,42,44,45,46,47,48,49,56,64,68,77,78,88,94,95,96,97,99,108,112,115,116,119,120,124,137,145,150,151,156,157,158,159,163,171,175,176,177,178,187,188],eth0:180,eth:0,ethz:[0,1,28],europ:[9,28,178],eval:15,evax:[164,165,166,167],eve:76,even:[6,10,26,163],event:58,ever:[23,26],everi:[0,6,10,15,20,22,23,25,28,51,52,54,64,73,139],everyth:[0,6,15,16,17,41,64,147],evilham:[124,145],exact_delimit:112,exactli:[4,10,78,95,112,168,180],exampl:[1,15,16,19,20,22,23],except:[6,8,28,78,95],exclud:[39,42,48,163,187,189],exclus:185,exec:[6,25,28,51,66,92],execut:[2,3,4,7,8,11,16,17,18,19,22,23,28,29,45,51,64,77,150,156,158,163,173,175,176],exist:[3,5,6,10,13,14,15,16,17,20,23,25,28,29,41,51,68,71,72,73,76,77,78,94,95,112,114,124,137,145,168,171,175,176,181,183,191],exit:[4,11,16,19,20,22,23,29],expans:23,expect:[4,10,23,28,51,77,104,173,180],expicit:171,explain:28,explicit:[33,75,98,117,118,171,174,183],explicitli:[87,109,110,111],explor:[2,11,13,16,20,25,26,28,29,31,51,125,139,140],explorer_nam:4,express:[39,45,115],ext3:79,ext4:31,ext:187,extend:[5,23,45,51,100],extens:[64,124,154,181],extern:1,extra:[10,124,189],facil:55,factor:5,fail:[2,4,13,15,19,20,22,28,71],failovermethod:189,failur:22,fallback:77,fals:[3,17,23,28,39,100],familiar:[5,7],fanci:[23,112,171],far:6,fashion:3,fast:5,fc11:10,fc12:10,fc13:10,fc21:10,fc22:10,fc23:10,fc24:10,fc31:10,fc32:10,fc33:10,fc34:10,fcxy:10,fdisk:100,fds:[88,168],featur:[1,2,6,7,10,26,171],fed:9,fedora:[12,141,168],fedoraproject:189,feed:[0,16],fetch:[0,1,6,25,33,77,104,173],fetchal:16,field:[64,120],file1:0,file2:0,file3:0,file:[0,2,6,9,10,11,13,15,16,17,18,19,23,30,31,41,44,45,46,47,48,49,50,51,55,56,66,67,71,72,73,76,77,78,88,95,96,97,98,104,108,112,115,118,119,124,128,140,143,145,146,151,157,159,163,170,171,173,176,177,181],filea:10,fileb:10,filec:10,filef:10,fileg:10,fileh:10,filei:10,filenam:[9,29,44,67,77,128,143,159,173],filesystem:[17,31,79,98,99,109,110,111,120],filter:[57,62,80],find:[3,5,8,10,14,15,25,47,48],fine:[1,6,163],finish:[2,10,13,16,28,30],firewal:[80,145,146,179,180],firewalld:[80,81],first:[0,1,3,6,7,8,10,14,15,16,23,27,28,64,87,109,110,111,124],fix:[6,10,17,25,28],fixm:6,fixthingsbecausequalityassurancefoundissuesinourpatch:6,fixtur:28,flag:[9,17,22,23,66,82,124],flaggi:130,flavor:[135,136,137],flexibl:25,flour:169,flow:10,focu:5,folder:[23,173],follow:[0,1,2,3,6,7,10,13,14,15,16,17,19,20,23,25,28,30,31,50,124,128,130,133,135,136,137,141,142,154,160,168,176,180,190],foo:[17,23,30,59,60,71,72,73,77,114,121,124,128,134,160,170,176],foo_0:128,foobar:[10,30,68,86,89,94,104,173,177,183],foobarexampl:10,fooenv:160,fooo:124,forc:[28,38,79,125,139,140,142],form:154,format:[2,6,7,14,17,25,44,56,77,79,173,181],forward:[76,80,107,112,171],forward_direct:80,foss:[7,124],found:[3,6,7,10,23,28,79,109,110,111,190,191],foundat:[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,71,72,73,74,75,77,78,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,114,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],fping:188,fqdn:[55,109,110,111,124,186],framework:16,free:[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],freebsd:[12,14,17,31,109,110,111,119,124,135,137],freedom:14,freeli:17,fresh:1,frodo:[78,95],from:[0,2,3,5,6,8,9,11,13,16,17,20,21,22,26,28,29,31,33,34,38,39,41,42,43,48,50,55,65,67,71,72,76,78,79,80,82,83,84,86,87,88,95,97,104,108,112,114,115,118,119,124,127,128,134,135,136,137,143,145,153,156,157,158,159,163,170,171,173,180,181,184,187,190],front:[80,107],frontend:28,fstab:[96,97,99,120],fstype:79,ftp:[77,141],fulfil:26,full:[7,17,26,28,30,128,179,180,187],fullchain:16,fulli:[17,31,174],fun:25,funni:88,further:[7,14,19,25,188],furthermor:26,fuse:120,futur:[2,31],fwd:107,g640b7f9:13,gain:11,garden:25,gatewai:0,gcc:129,gem:165,gemset:[165,166],gencod:[2,6,11,17,19,20,25,29,30],gener:[2,4,7,10,11,13,15,17,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],gentoo:[12,23,125,129,130,174],gentoolkit:[129,130],get:[6,7,9,10,13,14,15,23,25,33,40,77,82,83,114,127,139,157,158,159],getaddrinfo:17,getfacl:31,getfqdn:17,gethostbyaddr:17,gid:[16,86,183],giel:132,git:[0,1,15,22,43,67,82,158],git_dir:1,github:[7,55,56,82,83],gitlab:6,gitolit:67,gitus:67,give:[4,6,7,15,31,121,163,188],given:[6,10,23,26,28,44,49,54,56,58,64,67,68,89,93,105,115,116,118,120,124,127,128,137,151,164,166,167,168,170,171,173,175,176,182],giveng:163,glaru:124,glob:28,global:[2,3,10,11,13,16,17,23,25,28,29,55,56,179],gmail:[44,50,71,72,73,74,93,114,139,140,143,144,160,177],gmbh:7,gmx:176,gnu:[16,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],gnuin:178,goal:16,gobin:66,goe:[78,95],going:77,golang:[83,84,158],good:[6,7,23,76],googlegroup:6,gossip:51,got:2,gpg:7,gpgcakei:189,gpgcheck:189,gpgkei:189,gplv3:[28,29,30,69,70,76,79,113,115,117,118,136,160,164,165,166,167,175,178],gracefulli:51,grade:27,grafana:85,grant:[28,29,30,69,70,76,79,113,115,117,118,122,136,160,164,165,166,167,175,178,188],graph:10,green:[6,23],grep:[6,11,26,45,143,144],group:[16,17,21,25,28,31,49,51,68,76,78,82,86,94,95,160,163,173,184,187],groupadd:86,groupmod:86,grub2:89,grub:[89,92],guarante:23,guest:[109,110,111],guffei:[109,110,111,135,137,145,146],guid:25,gzip:[28,104],hack:23,hacker:6,hand:[8,11,25,124],handi:55,handl:[26,28,112],handler:[57,58,59,60,61,62,63],happen:[13,22,25,28,77],happi:88,hard:116,hardware_typ:25,has:[0,1,2,3,7,9,10,11,13,14,17,19,20,23,25,26,28,64,79,124,128,163,172,173,174,186,187,190],hash:[10,28,77,124],hashicorp:[55,56],hat:[139,140],have:[0,1,7,9,10,11,14,15,16,17,21,23,25,28,31,40,78,79,95,109,110,111,119,124,142,185,190],haven:6,hda:[79,142,190,191],head:[0,1],header:[6,22],health:52,healthi:[52,54],heavili:177,heirloom:188,help:[0,10,17,23,28,29,43,157,159],helper:[7,8,23,29,30,188],her:[16,31,43],here:[0,3,5,7,15,16,22,23,26,41,78,95],heul:[79,142,190,191],hidden:19,high:[23,26,124,179],higher:[3,28],highest:28,hint:4,his:[16,76],histori:82,hold:35,home:[0,1,2,10,16,17,19,28,30,43,68,76,78,82,94,95,116,160,161,162,163,170,172,183],homedir:183,honor:17,hook:[16,114],host1:25,host2:25,host:[0,1,2,3,4,5,8,10,13,15,17,18,19,20,23,25,26,29,42,43,50,52,55,62,77,78,88,92,95,97,109,110,111,115,119,122,123,124,129,147,163,173,187,191],host_max:28,hostabc:0,hostdir:28,hostnam:[4,9,16,17,23,28,51,87,88,109,110,111],hour:[64,139],how:[1,4,10,15,18,52,54,157,159],howev:73,html:[5,16,28,51,52,54,57,58,59,60,61,62,63,154,155],http:[3,6,7,28,33,34,38,39,50,51,52,54,55,56,57,58,59,60,61,62,63,77,84,85,104,107,124,136,141,154,155,157,158,159,173,181,188,189,190,191],http_cach:189,http_proxi:77,human:[33,52],i386:141,id_rsa:[14,28,163,170,171],idea:[9,76],idempot:[26,73,124,181],ident:[15,187],identifi:41,ifconfig:[109,110,111],ignit:93,ignor:[10,28,31,51,55,64,88,99,115,120,124,173],ikq02:28,ikq03:28,ikq04:28,ikq05:28,imag:[75,161],img:161,immedi:[7,10],implement:[0,6,18,19,20,23,64,124],implicitli:28,improv:6,inaccess:190,inact:177,inc:131,includ:[0,1,3,5,6,10,14,16,19,22,28,38,68,77,94,114,115,128,134,159,162,180,188],includepkg:189,inclus:17,incom:51,incompat:25,increas:[28,29],increment:28,inde:68,indent:6,independ:[0,10,107],index:[7,10,16,38,40,127,139],indic:[1,20,44],inet:149,inetorgperson:124,influenc:[17,28,68,94],info:[2,3,9,13,14,17,19,22,23,34,55],inform:[6,17,19,23,28,39,45,51,74,97,149,177],ing:66,ingress:[179,180],inherit:[76,155],ini:[3,16,28],init:[0,1,2,3,6,8,10,11,13,15,17,19,22,23,28,65,106,156,160],init_manifest:[3,28],initi:[0,1,3,8,11,13,14,17,23,28,46,47,52,74],input:[16,67,71,72,73,107],input_direct:80,insecur:104,insert:[16,79,88,112,115],insid:[10,46,47,52],instal:[0,1,4,8,10,14,17,34,36,39,43,50,55,64,65,66,69,70,76,77,83,84,85,89,90,92,93,94,95,96,97,99,114,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,140,141,142,148,157,158,159,160,162,163,164,165,166,167,177,179,180,185,186,187,188,190,191],install_help:188,install_hosts_simpl:8,installonshutdown:39,instanc:[0,7,10,17,20,28,55,124],instanti:10,instantli:5,instead:[0,10,17,22,25,31,51,55,64,97,108,134,140,163,170,171,176,180,190],integr:[0,144],intend:7,intens:[15,174],intent:[16,17],intention:[148,151,152],interact:[8,18,28,52],interest:118,interfac:[17,18,52,109,110,111,163,180],interfav:54,interfer:11,intermedi:[68,94],intern:[0,10,25,28,37,38,52,191],internal_sles11_sp3:191,internet:33,interpret:[28,115],interv:[52,54],intrepid:168,introduc:[6,26],introduct:[158,159],inventori:[3,17],inventory_dir:[3,28],invit:6,invoc:160,invok:[17,38,57,58,59,60,61,62,63,73],involv:10,ip_forward:[112,175],ipacl:[185,188],iptabl:[106,107],ipv4:[28,80,112,175],ipv6:[18,23,27,28],iscsi:39,ish:54,iso:93,issu:[3,6,10,23,51,78,95,108],item:[0,16],iter:8,its:[0,2,7,8,9,13,14,16,20,23,28,56,68,109,110,111,115,152,177],itself:[23,70,76,150,163,171],jail:[17,109,110,111],jail_:[109,111],jail_list:[109,110,111],jailbas:[109,110,111],jaildir:[109,110,111],jailrul:[109,110,111],jake:[109,110,111,135,137,145,146],jame:138,jargon:10,jessi:168,jfs:98,jimenezrick:[139,140],job:[3,13,28,64,114],john:[166,167],join:[21,51,154],jointheirstm:[109,110],journal:98,json:[49,51,93],jun:9,just:[8,9,10,15,16,23,50,55,119,121,180],kaction:88,kamila:[65,66,83,84,85,114,145,146,157,158,159],keep:[5,75,82,128,159,176,183],keepal:[11,189],keepaliv:11,keepassx:0,kei:[0,7,14,15,25,28,33,34,51,59,60,61,63,112,124,143,150,170,171,175],kept:[1,181],kernel:[39,112,175],kernel_nam:17,key_fil:51,keyboard:113,keydir:33,keyfil:28,keygen:[0,15],keyid:33,keyprefix:60,keyr:34,keyserv:33,keytyp:[170,171],keyword:28,kill:[6,156],kind:17,kisrqlpw:19,kiss:[5,9,27,119],know:[5,6,10,12,23],known:[4,16,23,46,47,50,51,55],kooijman:32,ksp:[65,66,83,84,85,114,157,158,159],kucera:[71,72,73,74,93,114,177],kvlt:[31,33,35,39,45,48,77,121,122,123,181],kvm:[10,68,94,161],label:[79,103],lack:1,lang:118,languag:[5,10,23,138,164,165,166,167],last:[3,16,22,23,28,139,173],later:[1,10,20,23,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,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,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,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,168,169,170,171,172,173,174,175,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],latest:[0,1,6,25,50,55,69,137,158],layout:113,lc_all:118,lc_collat:153,lc_ctype:153,lc_messag:118,ldap:124,lead:[10,17,22,23,28,51,79,156],leader:55,learn:[15,26],least:[12,45,51],leav:[51,74],left:[74,124,148,151,152,171],legaci:174,legacy_kei:112,legacy_timezon:115,length:112,less:[5,6],let:[1,10,78,95,114,119,124],letsencrypt:[16,114],level:[3,8,17,26,28,51,55,179],lib:[3,8,120,187],libc:117,libexec:115,libpq:16,librari:28,libreoffic:0,licens:[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],life:[11,15,25],lighttpd:10,like:[0,1,3,4,5,6,7,9,10,11,15,16,17,18,19,22,23,28,64,66,77,80,114,117,119,124,127,128,143,176,190],limit:[13,26,28,180],line:[0,3,4,9,10,14,15,16,22,23,28,29,31,45,80,107,109,111,112,115,180],liner:4,link:[17,21,45,116],linux:[12,16,31,79,98,100,112,139,140,189],list:[1,3,6,9,10,14,17,23,33,38,50,55,84,142,185],listen:[0,16,124],liter:17,littl:26,live:[16,51],load:[124,146],loadbalanc:[9,28],local0:55,local:[0,1,3,8,10,11,16,17,19,20,22,23,28,29,50,52,54,56,68,77,94,104,115,117,118,124,125,127,128,140,142,160,163,173,180],local_shel:[3,28],localbranchnam:7,localch:1,localedef:[117,118],localhost:[9,10,15,28,55,122,123,185],localrepo:143,localrepo_serv:143,localtim:178,locat:[3,4,16,17,25,33,55,109,110,111,134,171],loch:1,log:[0,3,15,16,17,28,51,55,66,115,179],logdirectori:23,login:[15,16,112,155,171],loglevel:[23,28],longer:88,look:[0,1,4,6,10,15,16,19,23,25,48,124,142,176],loop:[16,26],loos:26,lose:5,loss:79,lost:[19,145],lot:[5,17],lotsofopt:[109,110,111],low:179,lower:[3,28],lowercas:14,lowest:28,lsb:38,lsb_codenam:17,lsb_descript:17,lsb_id:17,lsb_releas:17,lsblk:79,lsof:132,lua:131,luarock:131,luasocket:131,lubomir:[71,72,73,74,93,114,177],lvm:103,lzma:[28,181],mac:12,machin:[0,1,7,14,17,25,26,44,50,55,77,96,102,173,179,180,188],machine_typ:17,made:[7,20,25,110],magic:[5,10],maher:44,mai:[0,1,4,7,10,13,17,20,23,25,28,55,163,170,171],mail:[6,39],mailinglist:6,mailonlyonerror:39,mailto:64,mailx:188,main:[5,23,38,66,124,150,179],mainli:28,maintain:[7,9,17,25],major:26,make:[0,5,6,7,10,16,23,25,26,31,51,76,78,79,88,95,150,157,158,159,165,166,167,171,176,190],man:[2,6,10,17,25,30,142,181],manag:[0,6,10,15,23,25,28,33,37,38,41,42,43,44,46,47,51,52,54,55,56,57,58,59,60,61,62,63,64,66,68,69,71,72,73,74,75,78,80,86,88,94,95,107,108,109,110,111,115,116,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,145,146,154,155,157,159,161,162,164,165,166,167,170,171,172,173,174,175,177,183,184,188,189,190,191],mandatori:88,mani:[0,6,10,16,112,158],manifest:[0,2,3,6,8,11,13,14,15,17,19,25,28,30,45,124,160,163],manipul:26,manner:107,manpag:[5,6,10,17,23,25,31,191],manpath:[7,10,25],manual:[14,25,88,120,124,136,188],map:[15,17,20,155],mapper:79,mark:[23,35,100,179,180],markasoftwar:[179,180],marker:[2,23,44],mask:[31,177],mass:25,master:[1,5,6,7,23,25,43,51,54,82,149],match:[39,45,48,51,77,115,156,180],matter:26,matthia:176,matthiasstech:176,matthij:32,max:[55,139,190],maxag:139,maxdepth:48,maximum:[0,3,13,28,55,56,112,179],maxproc:149,maxsess:[0,13,28],maxstartup:[13,28],mcs3u8q2scmuxt4ybw7mebhtasmyr:124,md5:[77,181],md5sum:[23,77],mdadm:103,mean:[2,3,9,10,13,16,20,23,26,28,64,68,69,73,94,109,110,111],meaning:5,meant:76,medium:[124,179],meet:6,member:16,membership:[68,78,94,95],memori:17,merg:[0,1,6,17,20,25],messag:[2,4,5,16,17,20,23,25,28,29,45,119,127,141],metadata_expir:189,metalink:189,meter:39,method:[5,14,50],mfsmaster:120,mfsmount:120,mfssubfold:120,mib:175,micro:16,midnight:64,might:[6,124,173],migrat:25,mindepth:48,minim:[14,28,186],minimalstep:39,minimum:[55,56,176],minmal:[185,188],minor:[23,100],minut:64,mirror:[6,7,28,136,141,143,163,189],mirrorcatalog:136,mirrorlist:[143,189],mirrorlist_expir:189,miss:[23,37,127],mistak:9,mitchellh:[50,173],mkdir:[0,16,23,68,94],mkf:[79,98],mkfsoption:79,mktemp:23,mnt:[28,89,92,96,104],mod:[86,183,185],mode:[0,5,13,15,16,17,28,31,49,51,68,74,76,78,82,94,95,104,114,160,173],model:26,modern:[5,179],modif:[109,110,111],modifi:[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,71,72,73,74,75,77,78,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,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],modul:[8,124,131,185],mondai:64,monitor:[158,185],month:64,more:[0,1,2,6,9,10,13,14,15,17,19,22,23,25,28,31,39,45,48,55,74,75,78,95,117,118,149,173,174,177,184,185,186,188],morn:64,morti:132,mosh:180,most:[6,26,44,179,182],motd:119,motiv:26,mount:[46,47,79,90,91,99,105,109,110,111,120],move:[7,77,181],msdo:100,msgcach:186,much:[1,16,119],multi:4,multilog:66,multipath:[39,79],multipl:[1,3,10,23,28,45,51,54,55,88,137,149,170,184,189],multiplex:[0,13,28],multiprocess:13,munin:[0,10,45,107],musl:117,must:[0,6,9,10,14,18,20,23,28,48,51,56,65,66,77,80,83,88,109,110,111,112,115,124,128,145,158,170,171,173,176,181],muttrc:76,mux_client_request_sess:13,my_program:66,mycloud:9,mycompani:1,mydbnam:153,mydbusernam:153,mydomain:150,myfancyissu:108,mylin:19,myoldvm:161,myrepo:137,myrol:155,myservic:86,myset:[165,166],mysql:[121,122,123],mystuff:163,myvmnam:161,n566pqut:19,name:[0,1,2,4,5,6,9,10,14,16,17,19,23],namespac:22,nano:168,nat:80,nativ:27,natur:0,nblock:41,nearbi:6,necessari:10,need:[0,1,5,6,7,10,15,16,20,23,25,26,38,73,76,83,109,110,111,112,114,124,129,137,154,157,159,162,172,188,190],nest:[17,28],net:[9,10,112,136,175],netbsd:[12,14,175],netmask:[109,110,111],netrc:187,network:[0,13,26,28,180,185],never:[3,17,23,28],new_valu:86,newer:[1,157,159],newli:[20,30],newlin:[16,23],next:[10,15,23],nfs:[68,94],nginx:[0,56,114,127,156,169,176,184],nicer:16,nico:[0,28,42,43,67,68,75,78,80,82,94,95,106,107,108,114,116,117,118,119,126,127,133,134,141,142,156,161,162,163,172,174,182],no_color:[3,28],no_x11:[135,136,137],noarch:141,noatim:99,nobodi:31,node:[0,45,51,61,158],nofil:171,nofstab:120,nologin:10,non:[0,4,20,23,48,68,94,171],none:[3,8,28,32,33,36,37,40,44,46,47,49,50,51,52,53,54,55,65,66,68,69,70,78,81,83,84,85,86,87,89,90,91,92,94,95,96,97,101,102,103,105,106,108,115,119,120,125,126,127,129,130,131,132,133,134,135,136,137,138,139,140,141,142,144,147,148,151,152,158,160,163,169,174,176,177,178,183,185,186,188,189,190],nonempti:120,noob:168,nopar:171,nopasswd:0,nor:[6,28],noreload:149,normal:[0,10,15,23,44,79,124,144,187],notat:79,note:[2,3,7,10,15,17,23,50,52,55,64,66,97,124,150,157,159,168,171,186],notebook:[1,26],noth:[25,78,79,95,141],notic:[3,18,23,145],nov:7,now:[1,6,7,9,10,16,19,25,88,119],nslcd:67,ntext:41,ntpdate:188,number:[0,3,13,28,29,98,100,190],numer:[56,100],nut:[109,110,111],nutzer:1,nutzung:28,nvm:100,nvme0n1:100,nvme0n1p2:100,object:[0,4,5,10,11,13,14,16,19,23,25,28,35,52,66,83,114,116,118,121,123,126,127,128,129,131,132,133,134,135,136,137,138,141,142,154,156,163,176,180,190,191],object_id:[28,41,79,88,89,98,99,100,105,109,110,111,112,115,125,171,175,184],object_mark:2,objectclass:124,obsolet:[127,132,133,135,136,137,141],obtain:[3,28,114,124],obvious:5,occur:[20,137],oettli:[129,130],off:[3,17,23,28,179],offic:28,offici:[1,28],offlin:0,old:[9,25,28,80,168],older:[25,127],oliv:147,olliv:147,omit:[23,33,55,56,168,173],onboot:[109,110,111],onc:[6,23,71,72,88,124],onchang:[48,49,77,78,95,112,115],one:[0,1,2,3,4,5,6,10,11,13,15,17,20,26,28,45,51,55,77,78,95,115,120,127,144,170,171,176,178,180,184,191],ones:[25,26],onli:[0,1,2,3,5,6,7,9,10,11,15,16,17,19,20,25,26,28,29,31,43,51,55,58,62,64,70,77,78,79,81,86,95,100,112,124,127,137,139,157,159,163,171,174,176,180,183,185,187,190],onlyonacpow:39,onpan:175,onto:[119,146],open:[6,13,26,28,39,180],openbsd:[12,136],openldap:124,opennebula:[11,19],openssh:0,openwrt:132,oper:[3,5,13,16,23,28,51,84,86,87,104,112,163,168,174,175,183],opkg:132,opposit:[6,180],opt:[7,77,116,163,181,187],option:[0,2,3,8,9,13,14,17,18,19,23,28,45,67,175,182],optional_multipl:23,options_architectur:143,order:[0,2,3,11,16,17,26,28,31,45,77],org:[0,3,20,28,30,39,42,43,67,68,75,78,80,82,84,88,94,95,106,107,108,109,110,114,116,117,119,124,126,127,131,133,134,141,154,155,156,161,162,163,172,174,182,189],organ:124,orient:10,origin:[6,7,10,25,28,65],ornett:167,ortigoza:[113,118],os_releas:17,os_vers:17,other:[1,4,6,7,8,10,11,13,16,17,19,20,22,23,25,26,28,31,33,43,64,68,77,79,94,155,168,185,188,191],otherstuff:163,otherwis:[7,10,17,23,28,78,95,112,115,119,124,128,143],otho:[129,130],our:[10,16,22,178],out:[0,1,10,15,16,17,25,28,82,107,140,176,180],out_path:[3,28],outgo:51,output:[0,2,3,4,6,13,16,17,20,23,28,29,31,55,77,107,109,110,111,142,173,176],over:[0,11,15,56],overrid:[18,57,58,59,60,61,62,63,181],overridden:76,overview:[19,74,157,158,159],overwrit:[3,11,17,28,124],overwritten:[76,181],own:[1,2,3,7,9,13,23,55,153,162,171],owner:[16,28,49,68,76,78,82,94,95,153,160,162,163,171,173,187],ownership:[171,187],ozagkg54:28,packag:[4,10,23,33,35,36,39,40,51,65,69,70,83,85,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,157,159,160,163,168,188,189],package2:163,packagenam:142,packages_to_instal:16,packet:[112,179],pacman:[23,133,139,140,143,144],page:[2,7,14],pair:[0,15],pam:115,pam_exec:115,panter:0,paradigm:5,parallel:[3,6,23,26,28],param:28,paramet:[0,2,4,6,8,10,17,20,25,28,29],parent:[10,25,31,48,68,76,94],parit:100,part:[80,92,119,168],partial:[31,51],particular:[2,3,136,137,158],particularli:177,partit:[100,101,103],partner:38,pass:[11,17,18,20,28,44,45,48,57,62,82,98,99,114,120,124,127,145,149,154,160,169,179,187],passingonli:62,passiv:186,password:[0,10,15,16,28,55,86,115,121,123,124,155,183,189],past:15,patch:[21,142],path:[0,2,3,7,8,13,16,19,23,30,31,41,42,44,46,47,48,49,51,55,56,64,67,71,72,73,79,90,91,93,97,104,114,120,124,128,134,157,159,168,170,173,177,181,182,190,191],pattern:[2,3,17,31,45,48,115,142,159],pci:79,peer:[13,51],pem:[16,51,124],peopl:[0,1,6,15],per:[0,3,13,17,23,28,55,76,88,109,124],percentag:100,permament:175,perman:175,permiss:[51,68,78,82,94,95,124,160,168,171,172],permit:[13,28],permit_sasl_authent:149,permitrootlogin:[0,11,15],persist:[77,181],person:28,pfctl:145,pgp:33,pgrep:156,pgsql:16,phrawzti:44,physic:[109,110,111],pick:7,pictur:188,pip3:16,pip:[7,16,25,134],pkg:[137,143],pkg_path:136,pkg_state:128,pkgsite:135,pki:124,pki_prefix:124,place4:80,place:[0,7,17,23,119,146],plain:[124,143],plain_file_filenam:143,plan:[0,25],playmorepromod:[77,181],pleas:[18,23,25,31,163],plone:116,plugin:[14,16,17,28],point:[6,7,10,11,15,17,26,105,120,124],pointer:[6,10],polici:[51,107,179],poljak:[29,30,50,81,114,160],poll:55,polyakov:[179,180],pong:147,popular:26,port:[16,26,52,54,55,145,149,180],portabl:23,portag:[129,130],posit:[3,6,16,28,115],posix:[3,5,7,26,28,48],pospisek:[128,154],possibl:[0,1,11,17,18,28,112,150],postconf:150,poster:28,postfix:[148,149,150,151,152,169],postgr:[153,154,155],postgres_serv:16,postgresql:[154,155],postmap:151,power:11,ppa:37,practic:1,practis:[4,26],pre:[68,78,95],preced:[3,28,56],predefin:23,prefer:65,prefix:[3,6,23,29,41,60,77,92,96,99,100,112],preo:17,preos:28,prepar:[13,28,46,90,173],prepend:99,preprocess:173,prese:[25,67],present:[0,2,9,10,16,23,25,28,33,34,37,38,41,42,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,66,68,69,70,71,72,73,74,75,76,78,80,81,82,83,86,88,93,94,95,107,109,110,111,112,114,115,116,117,118,120,121,122,123,124,125,126,127,128,129,131,132,133,134,135,136,137,138,141,142,143,144,146,149,153,154,155,156,160,161,162,164,165,166,167,168,170,171,172,173,174,177,179,180,183,184,185,186,188,189,190,191],preserv:181,pretti:[0,1,23],prevent:[22,23,175],previou:[20,22,51,139,187],previous:[0,10,88],primari:[17,28,51],principl:27,print:[14,16,20,23,28,30,77],printf:[16,77,173],prior:[68,94,137,191],prioriti:[80,189],privat:[0,6,51,75,124,149,188],privileg:[0,121,122],privkei:[16,124],probabl:[6,23,25,26,118],problem:[23,163],proc:42,proce:10,procedur:25,process:[3,13,16,17,19,28,156],produc:19,product:[0,54,62,142],program:[5,10,26,66,75,138,161,164,165,166,167,182],prohibit:13,project2:31,project:[3,16,31],projectnam:16,prometheu:[66,83,157,158,159],promport:159,proper:[14,23],properti:[86,112],propos:6,proto:145,protocol:[5,80],provid:[10,17,18,23,48,51,57,58,59,60,61,62,63,76,78,84,95,128],proxi:[16,189],proxy_password:189,proxy_usernam:189,psasword:124,psql:16,psycopg2:16,ptype:142,pub:[14,28,170,171],pubkei:[0,15],publish:[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,71,72,73,74,75,77,78,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,114,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],pull:[6,11,25],punnar:[31,33,35,39,45,48,77,121,122,123,181],puppet:[127,133,135,136,137,141,174],purg:[127,128],purpos:[0,4,9,14,16],push:[1,5,6],put:[76,157,159],pwd:[7,25,30],pxe:[14,28],pxe_boot_dir:28,py3k:28,pypi:7,pyro:134,python2:[133,135,136,137,141,142],python3:[9,16,160],python:[5,6,8,28,39,133,134,135,136,137,141,142,160],pythonx:[133,135,136,137,141,142],pyvenv:160,qemu:[75,161],quagga:35,qualifi:17,qualiti:163,queri:[55,128],question:[21,44],quick:145,quickstart:1,quiet:28,quit:0,quot:[0,11],rabbitmq:[33,34,38],rail:[0,138,165],rails_test:154,rais:[8,78,95],ramon:178,rang:[180,185],rar:181,rather:28,raw:64,raw_command:64,rbenv:162,rc4:70,reach:[13,28,54,139],reachabl:1,react:[11,26],read:[1,3,9,10,13,15,16,23,28,31,67,71,72,73,163],readabl:[33,52],readi:[14,16],real:[0,11,15,17],realis:[0,10],realli:[10,176],realm:124,reason:1,reboot:[39,64,102],recent:[1,6,44,83,158],recogn:[3,17,28],recognis:22,recommend:[0,1,15,23,36],recommended_mutt_config:76,recreat:71,recurs:[25,31,48,68,82,94,105,163],red:[139,140],redefin:[3,10],redhat:[11,12],redi:[52,54,62],redirect:[23,66],redistribut:[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,71,72,73,74,75,77,78,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,114,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,161,162,163,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],redund:6,ref:[0,1],refer:[10,13,16,23,28],referenc:[11,17],reflect:1,refus:[13,28,79],regex:[48,112,115],regexp:156,regist:[14,179],regular:[26,39,45,76,78,95,115],reiserf:98,reject:[149,179,180],rejoin:51,rel:[17,28,116],relat:[45,64,107],releas:[7,23,27,32,34,38,51,55,127,141],releasev:189,relev:0,reli:1,reliabl:11,reload:[16,49,53,114,149,152,169,176,185],remain:[18,23,100],rememb:16,remot:[0,1,2,3,6,11,13,17,19,23,25,28,30,42,51,77,82,92,109,110,111,124,145,147,163,165,166,167,171,180],remote_copi:[3,28],remote_exec:[3,28],remote_out_path:[3,28],remote_shel:[3,28],remov:[17,19,23,25,28,31,39,41,48,64,68,69,70,71,72,73,75,78,86,88,94,95,103,109,110,111,112,114,115,116,117,118,121,126,127,128,129,131,132,133,135,136,137,138,141,142,146,160,161,164,165,166,167,170,171,172,177,180,183,184,191],renam:25,render:[0,55,56],renew:[16,114,124],repeat:[6,28],replac:[15,16,25,78,95,112,173,187],replic:124,repo:[1,6,137,139,168,189,190,191],repo_desc:190,repo_gpgcheck:189,repo_id:190,report:[19,21,25,42,186],repositori:[1,6,7,37,38,82,85,135,137,140,143,179,189,190],repositoryid:189,repres:[8,10,23],request:[6,11,13,21,51,146],request_uri:16,requir:[0,5,6,8,10,15,16,17,18,23,25,26,28,75,145,161],required_multipl:23,reserv:17,reset:103,resid:187,resolv:[10,28,46,47,88],resourc:[0,26],respect:[18,23,121],respons:[157,159],rest:100,restart:[11,16,45,48,56,169,176,177,185],restor:[46,47],restrict:[58,179],restructur:6,restructuredtext:17,result:[1,4,10,17,20,23,26,28,137],retain:157,retent:[157,159],retri:[51,55,189],retriev:[97,127,140,173],retry_interv:51,reus:[0,4,5,20],reusabl:16,revers:16,revok:122,rewrit:185,rfc:87,rhel:168,ricardo:[139,140],rid:33,right:[0,172],ris:[190,191],rock:0,role:[3,155],root:[0,10,13,15,16,18,28,31,39,49,64,68,78,94,95,114,116,134,162,163,168,171,172,173],root_password:28,rootdn:124,roughli:145,rout:[16,179],router:112,roux4:[143,144],roux:[70,143,144],rpc:156,rpcstatd:156,rpm:141,rsa:[7,171],rsalvado:178,rst:[6,17,30],rsync:[163,187],rubi:[23,138,162,164,165,166,167],rubygem:138,rule:[17,28,51,80,106,107,159,170,180],rule_fil:159,ruleset:[107,109,110,111,145,146],run:[0,2,4,5,6,7,11,12,13,14,16,17,19,22,25,26,28,40,44,46,48,49,50,51,52,54,55,56,64,66,68,73,78,89,90,92,94,95,97,102,104,112,114,115,119,134,139,147,149,150,151,156,163,169,173,176,179],runa:134,runlevel:[17,174],runtim:175,rvm:[164,165,166,167],rwx:31,safe:76,sai:10,salt:124,same:[0,4,7,10,20,23,26,28,33,37,68,78,79,80,86,94,95,98,99,112,117,118,125,139,149,163,165,166,171,173,174,175,183,187,188],sampl:16,san:[0,37,79],sane:124,sat:7,satisfi:14,saturdai:64,sausag:16,save:[2,3,23,28,33,46,47,66,124,157,159,173],save_output_stream:28,sbin:156,scalabl:5,scan:[14,65],scenario:[0,26],schema:124,scheme:153,schijndel:132,schinagl:147,schotteliu:[0,28,42,43,67,68,75,78,80,82,94,95,106,107,108,114,116,117,118,119,126,127,133,134,141,142,156,161,162,163,172,174,182],scope:176,scp:[3,17,18,23,28],screen:[28,29],script:[0,4,5,7,9,10,11,16,17,20,28,29,30,52,54,64,65,106,168,170],scsi:79,sda1:[98,99,100],sda2:[98,99,100],sda3:100,sda5:[98,99,100],sda6:100,sda7:100,sda:[89,93],sdb:[28,79,103],sdc3:120,sds:[88,168],sdx:79,search:[3,28,45,115,190],searchbas:124,second:[13,14,52,139],secondli:1,secret:[31,72,121,123,124,155],section:[2,3,15,16,28,143],secur:[5,26,48,51,55,78],sed:[25,26],see:[0,1,2,6,9,10,11,13,14,16,17,18,19,22,23,25,28,31,35,39,45,48,50,74,77,84,86,87,120,177,181,189,191],seen:23,segment:[87,173],select:[1,7,9,10,16,28,43,67,165,168,178],semant:[10,17,28],send:[0,11,21,55,114,124],sens:[23,185],sensibl:[124,168],sent:55,separ:[3,5,6,10,13,17,23,28,55,56,112,120,175,186,188],sequenti:[13,28],serv:[16,55],server:[0,5,7,10,13,15,26,28,50,51,55,77,85,97,104,109,110,111,114,124,143,171,173,181,186,187,188],server_alia:23,server_nam:[0,16],serverid:124,servernam:[0,23],servername_access:0,servername_error:0,servic:[0,10,16,45,48,49,52,54,55,56,57,62,63,65,66,68,71,73,82,94,107,114,116,149,158,160,161,169,177,185,190,191],service_desc:191,servicedir:[65,66],session:[0,13,28,115],set:[1,3,5,8,9,10,14,16,17,22,23,28,30,31,32,33,35,38,39,51,55,64,65,67,68,78,82,85,86,87,95,101,112,113,114,117,118,121,124,143,145,153,166,167,168,170,171,175,178,179,180,183,187,190],setfacl:31,setuidgid:66,setup:[7,10,15,16,17,25,28,43,67,68,94,108,117,119,124,179,182,191],sever:26,sfs:[79,129,130,142,190,191],sha1:77,sha256:77,shadow:[78,95,116],shall:[28,170,171],shallow:82,share:[0,124,178],shareabl:1,shebang:[22,23],sheepdog:75,shell1:9,shell2:9,shell:[3,4,5,7,8,9,10,15,16,17,22,23,52,54,64,183],shinken_virtualenv:134,ship:15,shorten:23,should:[1,3,6,10,14,15,16,17,18,20,21,23,25,28,37,52,54,56,79,100,109,110,111,112,115,124,162,170,171,172,174,176,178,184],show:[1,10,15,16,19,28,29,78,95],show_index:16,shown:10,shutdown:176,side:0,sign:[7,33,34,112],signific:[4,157,159],sigterm:51,silent:88,silli:[68,94],similar:0,similarli:6,simpl:[4,5,9,10,11,18,124,147],simpli:[6,26],simplic:5,sinatra:138,sinc:[0,14,19,22,23,27,71,72,73,76,139],singl:[0,26,170,173,180],singleton:[0,25,84,85],site:[0,7,16,17,116,160],situat:[10,22],size:[55,75,100,161,173],skel:[78,95],skeleton:[3,23,30],skip:[23,28,39,139],skip_if_unavail:189,sky:75,slapd:124,slappasswd:124,slash:[10,17,99,156,163],sles11:191,slightli:141,slow:0,small:[4,5,27],smtp:149,smtp_bind_address:150,smtpd:149,smtpd_client_restrict:149,smtpd_enforce_tl:149,smtpd_sasl_auth_en:149,snapshot:136,snippet:[0,25],snmpd:174,sock:16,socket:[16,17],softwar:[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],solari:48,solid:0,solut:[22,23],solv:[1,5,163],some:[6,7,9,10,11,16,17,18,19,23,26,28,31,41,46,47,51,52,57,58,59,60,61,62,63,64,78,87,95,107,109,111,119,120,124,158,170,171,175,179],some_fancy_hash:10,some_other_hash:10,somecommandthatdoesnotexist:22,somedomain:150,somefil:[78,95,112],someth:[2,6,10,11,15,22,45,68,94,119,124,158,176],sometim:[0,10],somewher:[10,23,83,92],soon:[6,15],sophist:[1,15],sorri:48,sourc:[0,2,3,10,16,17,19,22,23,25,26,28,31,38,40,42,43,49,51,56,71,72,76,78,82,95,108,116,119,128,145,146,157,159,163,173,177,181],sourcepol:[128,154],sp3:191,space:[6,10,38,100,115,148,151,152,186],spam:[16,23],spawn:28,special:[10,22,28,69,119,150],specif:[0,4,7,10,17,20,23,38,50,55,57,69,77,86,98,100,125,129,134,135,137,139,140,160,181],specifi:[0,2,3,8,9,13,14,16,17,18,28,29,42,51,52,54,55,62,64,66,72,78,79,82,88,95,100,112,114,115,116,134,136,141,143,149,153,163,168,170,171,179,184,186,187,188,189],sped:0,spezifi:79,sphinx:7,split:25,splitbrain:82,sql:[154,155],sqlite3:9,squar:[18,23,28],src:38,srcpackag:142,srv1:88,srv:31,ssh:[1,3,5,7,11,13,14,15,17,18,23,26,28,107,170,171,172],ssh_config:0,ssha:124,sshd:[0,11,13,28,156,170,171,176],sshd_conf:163,sshd_config:[0,13,15,28],ssl:[16,23,51,55,104,114],ssl_certif:16,ssl_certificate_kei:16,ssl_check_cert_permiss:189,sslcacert:189,sslclientcert:189,sslclientkei:189,sslv2:124,sslverifi:189,ssrq:[88,168],stabl:[0,1,8,28,32],stack:73,staff:26,stage:[4,10,104,114,124,173],stai:[7,10,25,80,82],stale:55,standalon:114,standard:[0,5,9,17,23,28,71,72,73,168,171,191],start:[10,15,16,19,20,25,28,41,65,81,85,109,110,111,115,156,169,174,176,177,179],starter:1,startstat:81,stash:6,statd:156,state:[0,1,2,5,16,19,20,23,25,28,33,34,35,37,38,41,42,49,50,51,52,54,55,56,57,58,59,60,61,62,63,64,68,69,70,71,72,73,74,75,76,78,80,82,86,88,94,95,107,109,110,111,112,114,115,116,117,118,120,121,122,123,125,126,127,128,129,131,132,133,134,135,136,137,138,141,142,143,144,146,149,153,154,155,156,160,161,162,164,165,166,167,168,170,171,172,173,174,176,177,179,180,183,184,185,186,188,189,190,191],statement:10,statu:[4,49,52,54],stderr:[2,4,16,19,20,23,29,55,66],stdin:[0,2,9,16,17,28,31,32,41,49,51,56,67,78,95,119,177],stdintest:0,stdout:[0,2,3,4,19,20,28,29,55,77,173],stecher:176,step:[1,7,15,16,28],steven:[28,30,33,34,36,37,38,40,41,46,47,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,69,86,87,89,90,91,92,96,97,98,99,100,101,102,103,104,105,112,115,118,120,125,148,149,150,151,152,153,155,170,171,173,175,183,184,189],stick:5,still:9,stop:[16,25,81,109,110,111,156,169,176,177],stoppend:176,storag:[9,17,77,157,159,181],store:[0,1,2,4,9,10,17,20,22,23,97,173],str:16,straightforward:5,stream:[2,28],stretch:32,strftime:28,string:[8,17,26,28,38,46,47,67,86,100,120,170,171,173,176],strip:[17,28,156,181],strong:13,structur:[2,66],stu:139,stuff:[0,1,7,23,174],stupid:5,style:[109,110,111,175,185],sub:[15,28],subcommand:[14,28],subdir:31,subdirectori:[2,17,23,28],subfold:[0,43],subject:6,submiss:[6,149],submit:23,submodul:82,subnet:188,subsequ:16,subset:124,substitut:28,subtyp:109,success:[0,13,19,28,147],successfulli:[15,16],sudo:0,sudoer:0,suffici:83,suffix:[10,41,46,47,56,100,124],suggest:[23,36],suit:[28,124],suitabl:[68,78,82,94,95,160,185],sum:[77,181],superblock:103,superus:155,supplementari:17,suppli:[35,68,78,94,95,108,112,115,119,126,127,129,131,132,133,134,135,136,137,138,141,142,143,190,191],support:[3,13,14,16,18,23,25,26,27,28,31,39,50,51,55,77,80,84,109,110,111,117,119,124,157,158,159,163,168,174,180,187],suppos:[0,10,23,129],suppress:28,sure:[10,16,23,78,79,95,157,159,171,176,190],surpris:5,suse:[11,142,190,191],svc:[66,158],swap:[99,100],swarm:74,swellpath:131,symbol:[10,25,116],symlink:[25,78,95,178],sync:0,synchronis:1,syncrepl:124,syntax:[23,25,31,180,185],sys:[14,42,129],sys_uid_max:112,sysadmin:[10,26],sysctl:[112,175],syslog:[51,55,156],syslogen:39,syslogfacil:39,system:[0,1,3,4,6,14,15,23,26,27,28,43,44,51,66,67,83,84,86,87,98,104,112,117,118,125,127,128,131,138,139,145,146,158,160,161,168,169,174,175,177,182,183,185,191],systemd:[176,177],tabl:[16,80,103,122],tag:[7,9,17,54,62],tagfil:28,taglist:28,take:[7,18,23,25,41,49,51,52,56,64,68,72,78,87,94,95,119,145,163,177],taken:[0,119,163,185],talk:55,tar:[3,7,28,104,173,181],tarbal:[104,181],targ:7,target:[2,3,4,5,10,13,15,16,17,18,23,26,28,38,43,50,55,56,66,68,77,78,79,86,89,92,94,95,96,97,99,104,105,119,125,127,129,139,140,157,159,163,168,173,181,182,183,187,191],target_dir:28,target_host:2,target_runlevel:174,task:10,tbz2:[3,28],tcp:[52,107,145],tell:[0,10,73,152],temp:[28,68,94],tempfil:[23,28],templat:[17,55,56,153],temporari:[1,11,17,19,23,28],term:[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],termin:51,test1:124,test2:124,test:[6,9,12,16,17,19,28,31,32,34,38,114,115,116,124,163,174],testdir:163,testdisk1:79,testdisk2:79,testdisk3:79,tester:163,testfil:10,testjail:[109,110,111],testrepo2:190,testrepo3:190,testrepo4:190,testrepo:190,text:[0,6,41,124],textual:149,tftp:[14,104],tgz:[3,28,104,109,110,111,181],than:[0,6,10,23,68,94,127,168],thei:[0,6,7,10,20,23,31,78,95,137,159],theloni:167,them:[0,3,6,9,10,11,13,18,23,106,170],therefor:168,thi:[0,1,2,3,4,6,7,8,9,10,11,13,14,15,16,17,18,19,20,22,23,26,28,29,30,32,34,37,38,40,42,43,44,45,46,47,48,51,52,54,55,56,57,58,59,60,61,62,63,64,68,69,70,71,72,73,74,76,77,78,79,80,81,82,83,84,85,86,88,89,92,93,94,95,97,98,100,102,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,124,125,127,128,129,130,135,136,137,139,140,145,146,148,150,151,152,153,154,155,156,158,159,160,162,163,164,165,166,167,168,169,170,171,172,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,190],thing:[0,6,33,78,79,95,98],think:[1,6,23],third:22,thisjail:[109,110,111],thoma:[128,129,130,139,156,185,186,187,188],those:[2,13,15,28],thought:[17,28],thread:16,three:[0,22],throttl:189,through:[9,14,16,20,52,54,109,110,111,124,165,166,167,176,179],thu:[1,6,10,11,17,22,23,25,119,137],tick:5,time:[0,1,5,13,17,28,39,44,51,54,55,56,64,71,73,88,139,149,163,170,171,184,189],timeout:[52,189],timestamp:[10,28,44,181],timezon:[115,178],timothe:169,tip:87,tld:120,tls:124,tlsciphersuit:124,tmp:[0,10,13,19,23,28,44,68,78,94,95,99,115,128,163,173],tmpdir:[0,23,28],tmpf:99,tmpow6cwemh:19,tmpuah6fw_t:13,tmpzomy0wi:19,todo:124,togeth:[13,45,52,54],token:[51,52,55,57,58,59,60,61,62,63],tom:[128,139,156,185,186,187,188],toma:[128,154],too:31,tool:[5,9,10,23,39,130,158],top:124,topmost:80,total:[9,13,18],touch:[6,10,16,23],tour:6,tpo_deb:[128,154],trace:[3,17,23,28],tracerout:188,track:[0,1],traffic:[80,180],trail:[17,28,51,170,171],transfer:[13,20],translat:[10,28],transport:[5,15],treat:112,tree:[1,16,20,23,25],tri:[71,147],trigger:[55,56,106],trust:33,try_fil:16,ttl:[51,52,54],tty:[3,28],tutori:[1,15],twice:6,two:[7,9,10,11,13,18,20,22,23,171],txt:189,txz:[3,28],type:[1,2,3,4,5,7,11,19,20,25,26,28,29,37,38,40,42,43,44,45,46,48,49,50,55,56,57,58,59,60,61,62,63,64,67,68,71,72,73,74,76,77,78,79,80,81,82,83,84,85,86,88,89,92,93,94,95,98,99,100,102,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,124,125,127,128,129,130,135,136,137,139,140,143,144,145,146,147,149,150,153,154,155,156,158,160,162,163,168,169,170,171,172,173,174,176,177,178,179,180,181,183,185,186,187,188,191],type__acl:17,type__apt_default_releas:17,type__apt_kei:17,type__apt_key_uri:17,type__apt_mark:17,type__apt_norecommend:17,type__apt_ppa:17,type__apt_sourc:17,type__apt_unattended_upgrad:17,type__apt_update_index:17,type__block:17,type__ccollect_sourc:17,type__cdist:17,type__cdistmark:17,type__check_messag:17,type__chroot_mount:[17,47],type__chroot_umount:17,type__clean_path:17,type__config_fil:17,type__consul:17,type__consul_ag:[17,52,54,57,58,59,60,61,62,63],type__consul_check:17,type__consul_reload:17,type__consul_servic:17,type__consul_templ:[17,56],type__consul_template_config:56,type__consul_template_templ:17,type__consul_watch_check:17,type__consul_watch_ev:17,type__consul_watch_kei:17,type__consul_watch_keyprefix:17,type__consul_watch_nod:17,type__consul_watch_servic:17,type__cron:17,type__daemontool:[17,66,158],type__daemontools_servic:[17,65],type__debconf_set_select:[17,182],type__directori:17,type__dock:17,type__docker_compos:17,type__docker_config:17,type__docker_secret:17,type__docker_stack:17,type__docker_swarm:17,type__dog_vdi:17,type__dot_fil:17,type__download:17,type__fil:[17,49,76,173],type__filesystem:17,type__firewalld_rul:17,type__firewalld_start:17,type__git:17,type__go_get:17,type__golang_from_vendor:[17,158],type__grafana_dashboard:[17,157,159],type__group:17,type__host:17,type__hostnam:17,type__install_bootloader_grub:17,type__install_chroot_mount:[17,91],type__install_chroot_umount:17,type__install_config:17,type__install_coreo:17,type__install_directori:17,type__install_fil:17,type__install_fstab:17,type__install_generate_fstab:[17,96],type__install_mkf:[17,99],type__install_mount:[17,96],type__install_mount_appli:99,type__install_partition_msdo:17,type__install_partition_msdos_appli:17,type__install_reboot:17,type__install_reset_disk:17,type__install_stag:17,type__install_umount:17,type__iptables_appli:[17,107],type__iptables_rul:[17,80,106],type__issu:17,type__jail:17,type__jail_freebsd10:17,type__jail_freebsd9:17,type__jail_freeebsd10:110,type__key_valu:17,type__keyboard:17,type__letsencrypt_cert:[17,124],type__lin:17,type__link:17,type__local:[17,118],type__locale_system:[17,117],type__motd:17,type__mount:17,type__mysql_databas:17,type__mysql_privileg:17,type__mysql_us:17,type__nam:6,type__openldap_serv:17,type__p:17,type__packag:[17,126,127,128,129,130,131,132,133,134,135,136,137,138,141,142],type__package_apk:17,type__package_apt:17,type__package_dpkg:17,type__package_emerg:[17,130],type__package_emerge_depend:[17,129],type__package_luarock:17,type__package_opkg:17,type__package_pacman:17,type__package_pip:17,type__package_pkg_freebsd:17,type__package_pkg_openbsd:17,type__package_pkgng_freebsd:17,type__package_rubygem:17,type__package_update_index:17,type__package_upgrade_al:17,type__package_yum:17,type__package_zypp:17,type__pacman_conf:17,type__pacman_conf_integr:17,type__pf_apply_anchor:17,type__pf_ruleset:17,type__postfix:17,type__postfix_mast:17,type__postfix_postconf:17,type__postfix_postmap:17,type__postfix_reload:17,type__postgre_databas:154,type__postgres_databas:[17,155],type__postgres_extens:17,type__postgres_rol:[17,153],type__process:[17,174],type__prometheus_alertmanag:[17,159],type__prometheus_export:17,type__prometheus_serv:[17,157,158],type__pyvenv:17,type__qemu_img:17,type__rbenv:17,type__rsync:17,type__rvm:[17,165,166,167],type__rvm_gem:[17,164,166,167],type__rvm_gemset:[17,164,167],type__rvm_rubi:[17,164,165,166],type__sensible_editor:17,type__servic:17,type__ssh_authorized_kei:[17,172],type__ssh_dot_ssh:17,type__staged_fil:17,type__start_on_boot:[17,156],type__sysctl:17,type__systemd_servic:17,type__systemd_unit:17,type__systemd_util:176,type__timezon:17,type__ufw:17,type__ufw_rul:17,type__unpack:17,type__update_altern:[17,67],type__update_index:139,type__us:17,type__user_group:17,type__xymon_apach:17,type__xymon_cli:17,type__xymon_config:17,type__xymon_serv:17,type__yum_repo:17,type__zypper_repo:17,type__zypper_servic:17,typeord:2,typic:[0,15],ubuntu:[11,12,14,23,33,37,38,119,127,128,168],ubuntuarchivekei:33,udp:145,ufw:[179,180],ugprad:137,uid:[16,183],ultim:7,umount:105,unacc:154,unaffect:88,unattend:39,unattendedupgrad:39,unclean:22,uncompl:179,undefin:[10,31,171],under:[2,9,23,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],underlai:50,underscor:23,understand:[15,180],understood:[1,15,104],undo:[47,91],undocu:189,unexpect:23,ungleich:[0,6,7,8,11,15,16,19,21,28,29,30,42,43,70,75,80,81,82,113,118,124,169],unhold:35,uninstal:[25,125,128,129,177],union:2,uniqu:[3,5,17,51],unit:[56,75,161,177],unix:[5,9,16,23,26,68,78,82,94,95,160,181],unknown:[141,171],unless:[3,11,28,50,168],unlik:76,unmount:[46,47,91],unpack:[104,181],unpriv:149,unset:[0,10,23],unstabl:32,unsupport:[11,16],untest:25,until:[10,15,16,51],unus:39,unzip:173,updat:[0,5,6,10,16,38,39,40,41,51,52,54,57,58,59,60,61,62,63,71,72,73,115,127,139,182],upgrad:[5,10,39,137,140],upgrade_cdist:25,upload:[51,56,78,95,96],upon:[0,10,19,30,119,168],upstream:[0,17,51],uri:[16,33,34,38,104,190,191],url:[0,1,52,54,77,124,141,173,181,190],usabl:[6,17,28],usag:[15,28],use:[0,1,2,3,4,6,7,8,9,10,11,13,14,15,16,17,20,22,25,28,29,30,31,35,38,43,51,52,54,55,69,70,76,77,79,80,97,98,108,109,110,111,112,113,114,115,117,118,124,125,126,127,129,131,132,133,134,135,136,137,138,139,140,141,142,156,159,160,163,164,165,166,167,173,175,178,180,185,188,190,191],use_ssl:23,used:[0,2,3,7,8,9,10,13,15,17,18,20,22,23,25,26,27,28,29,33,34,44,46,47,50,51,55,64,66,67,71,75,77,98,99,100,106,109,110,111,114,115,124,126,127,128,129,130,132,133,134,135,136,137,141,142,145,146,153,158,161,170,172,173,174,176,181,182,185,188,190,191],useful:[23,28,45,156,176,177],user:[0,1,3,6,7,10,15,17,18,25,28,31,43,48,51,64,68,76,78,82,94,95,112,121,122,123,124,134,145,153,160,162,163,164,165,166,167,168,170,171,172,183,184],useradd:183,userdel:183,usermod:183,usernam:[43,55,189],uses:[15,26,51,171],using:[0,2,3,5,10,13,14,16,17,20,23,26,28,31,32,41,45,49,50,51,55,56,80,92,93,104,114,118,124,127,128,134,136,149,156,158,160,163,173,186],usr:[16,28,50,52,54,57,58,59,60,61,62,63,109,110,111,115,124,156,160,163,173,178,182,187],usual:[0,1,4,6,15,17,26,68,83,94,107,118,124,126,127,129,130,132,133,135,136,137,141,142,156,169,180,190,191],utf:[117,118],util:168,utilis:[10,26],uuid:97,uwsgi_param:16,uwsgi_pass:16,vacuum:16,valid:[3,10,28,55,113,124,157,159,187],valu:[0,2,3,4,8,9,10,16,17,23,25,26,28,32,39,46,47,55,56,69,86,112,118,120,124,143,150,173,175,191],van:132,vanish:[7,163],varchar:16,variabl:[0,2,3,10,11,15,16,25,28,64,77,109,110,111,125,139,140],variant:[127,128],variou:[0,87,182],vault:55,vdi:75,venv:[16,160],venvparam:160,verbos:[3,8,15,17,23,28,29,39,42],verbose_info:8,verbose_trac:8,veri:[4,5,26,78,155],verifi:[6,7,51,55],verify_incom:55,versa:144,version:[0,1,6,10,13,17,19,23,28,29,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,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],vfstype:120,via:[0,1,6,15,88,109,110,111,120,190],vice:144,view:[26,57,58,59,60,61,62,63],vim:[125,135,136,137,182],virtual:160,virtualenv:[134,160],vmware:79,vrrp:11,vvv:28,vvvv:28,wai:[2,4,6,7,10,11,13,16,17,18,23,26,73,76,80],wait:[55,56],wakeup:149,walkthrough:16,want:[0,1,6,7,9,10,11,15,16,17,23,45,97,124,127,129,133,135,136,137,141,142],warden:131,warn:[3,6,8,17,23,28,55,68,76,79,80,94,163,174,187],watch:[57,58,59,60,61,62,63],watch_foo:49,wathev:112,web1:[9,28],web2:[9,28],web3:[9,28],web:[9,16,28,52,58],webapp:54,webinterfac:[185,188],webpag:185,webroot:[16,114],webserv:[10,114,127,185,188],webuser1:184,webuser2:184,well:[0,1,5,10,11,15,16,17,28,51,55,68,94,156,158,175],weneedgoodsecur:124,went:15,were:48,wget:77,what:[0,5,15,20,23,25,41,47,49,51,56,78,91,95,119,168,177,180],whatev:[64,68,78,94,95,98],when:[0,1,2,6,10,11,13,14,17,18,20,23,26,28,31,34,38,46,47,51,55,57,58,59,60,61,62,63,78,82,95,99,108,114,127,128,137,146,156],whenev:[1,11,40],where:[1,9,10,13,18,19,23,28,56,68,71,72,73,74,76,78,89,92,95,97,99,104,114,120,124,157,159,163,168,170,173,176,177,181],wherea:23,whether:[17,20,42,68,73,94,109,110,111,124],which:[0,1,3,4,6,7,8,9,10,16,17,20,22,23,26,28,33,34,41,42,43,44,48,50,51,52,54,55,56,64,77,79,88,92,93,96,104,112,114,115,127,130,142,143,147,153,156,158,162,168,170,171,173,174,176,177,178,179,184,190],white:10,whitespac:[28,112],who:[1,6,15,64,76,119,153],whole:100,whose:14,wide:[3,26,28,118,163],wiki:39,win:[3,23],window:[3,28],wish:10,within:[1,10,13,17,23,28,46,90,109,110,111],without:[0,15,20,28,51,52,54,77,80,107,124,163],withus:39,won:1,word:[6,20,23],work:[3,4,6,10,16,18,23,25,26,51,55,100,119,125,130,147,171,190],world:[0,6,15],would:[0,9,10,11,16,17,20,22,23,78,95,180],wrapper:[0,98],write:[6,16,22,163,180],written:[5,23,28,41,49,51,56,78,95,119,177,181],wrong:[112,116,119],wrongsourc:116,wsgi:16,www:[0,11,16,20,33,34,38,51,52,54,57,58,59,60,61,62,63,109,110,111,115,116,154,155,188],x11:142,xdg_config_hom:[3,28],xenial:28,xenserv:12,xeru:131,xfs:[79,120],xmonad:76,xxx:[79,181],xxxx:79,xxxxxxxxxx:23,xymon:[185,186,187,188],xymonserv:186,xyz:[0,10],yearli:64,yes:[3,10,15,25,28,149],yet:[8,139],yml:[73,157,159],you:[0,1,3,4,6,7,9,10,11,13,14,15,16,17,18,21,22,23,25,26,28,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,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,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],your:[0,1,3,5,6,7,9,10,15,16,17,23,25,26,28,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,71,72,73,74,75,77,78,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,114,116,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,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,168,169,170,171,172,173,174,176,177,179,180,181,182,183,184,185,186,187,188,189,190,191],yourself:[23,112],yourusernam:6,yum:[139,140,141,189],yyi:181,yyyymmddhhmmss:28,z12y12l12:139,zero:[4,20,23],zhao:139,zip:[77,173,181],zone:80,zoneinfo:178,zsh:[7,126,127,133,135,136,137,141,142,183],zypper:[142,190,191]},titles:["24. Best practice","12. Bootstrap","26. Local cache overview","13. Configuration","17. Explorer","2. Features","29. Hacking","4. How to install cdist","22. cdist integration / using cdist as library","20. Inventory","14. Manifest","18. Messaging","3. Supported operating systems","19. Parallelization","21. PreOS","7. Quickstart","8. Dive into real world cdist","23. Reference","28. Remote exec and copy commands","27. Saving output streams","25. Execution stages","6. Support","30. Troubleshooting","15. cdist type","16. cdist types","5. How to upgrade cdist","1. Why should I use cdist?","cdist - usable configuration management","9. cdist(1)","10. cdist-dump(1)","11. cdist-new-type(1)","16.1. cdist-type__acl(7)","16.2. cdist-type__apt_default_release(7)","16.3. cdist-type__apt_key(7)","16.4. cdist-type__apt_key_uri(7)","16.5. cdist-type__apt_mark(7)","16.6. cdist-type__apt_norecommends(7)","16.7. cdist-type__apt_ppa(7)","16.8. cdist-type__apt_source(7)","16.9. cdist-type__apt_unattended_upgrades(7)","16.10. cdist-type__apt_update_index(7)","16.11. cdist-type__block(7)","16.12. cdist-type__ccollect_source(7)","16.13. cdist-type__cdist(7)","16.14. cdist-type__cdistmarker(7)","16.15. cdist-type__check_messages(7)","16.16. cdist-type__chroot_mount(7)","16.17. cdist-type__chroot_umount(7)","16.18. cdist-type__clean_path(7)","16.19. cdist-type__config_file(7)","16.20. cdist-type__consul(7)","16.21. cdist-type__consul_agent(7)","16.22. cdist-type__consul_check(7)","16.23. cdist-type__consul_reload(7)","16.24. cdist-type__consul_service(7)","16.25. cdist-type__consul_template(7)","16.26. cdist-type__consul_template_template(7)","16.27. cdist-type__consul_watch_checks(7)","16.28. cdist-type__consul_watch_event(7)","16.29. cdist-type__consul_watch_key(7)","16.30. cdist-type__consul_watch_keyprefix(7)","16.31. cdist-type__consul_watch_nodes(7)","16.32. cdist-type__consul_watch_service(7)","16.33. cdist-type__consul_watch_services(7)","16.34. cdist-type__cron(7)","16.35. cdist-type__daemontools(7)","16.36. cdist-type__daemontools_service(7)","16.37. cdist-type__debconf_set_selections(7)","16.38. cdist-type__directory(7)","16.39. cdist-type__docker(7)","16.40. cdist-type__docker_compose(7)","16.41. cdist-type__docker_config(7)","16.42. cdist-type__docker_secret(7)","16.43. cdist-type__docker_stack(7)","16.44. cdist-type__docker_swarm(7)","16.45. cdist-type__dog_vdi(7)","16.46. cdist-type__dot_file(7)","16.47. cdist-type__download(7)","16.48. cdist-type__file(7)","16.49. cdist-type__filesystem(7)","16.50. cdist-type__firewalld_rule(7)","16.51. cdist-type__firewalld_start(7)","16.52. cdist-type__git(7)","16.53. cdist-type__go_get(7)","16.54. cdist-type__golang_from_vendor(7)","16.55. cdist-type__grafana_dashboard(7)","16.56. cdist-type__group(7)","16.57. cdist-type__hostname(7)","16.58. cdist-type__hosts(7)","16.59. cdist-type__install_bootloader_grub(7)","16.60. cdist-type__install_chroot_mount(7)","16.61. cdist-type__install_chroot_umount(7)","16.62. cdist-type__install_config(7)","16.63. cdist-type__install_coreos(7)","16.64. cdist-type__install_directory(7)","16.65. cdist-type__install_file(7)","16.66. cdist-type__install_fstab(7)","16.67. cdist-type__install_generate_fstab(7)","16.68. cdist-type__install_mkfs(7)","16.69. cdist-type__install_mount(7)","16.70. cdist-type__install_partition_msdos(7)","16.71. cdist-type__install_partition_msdos_apply(7)","16.72. cdist-type__install_reboot(7)","16.73. cdist-type__install_reset_disk(7)","16.74. cdist-type__install_stage(7)","16.75. cdist-type__install_umount(7)","16.76. cdist-type__iptables_apply(7)","16.77. cdist-type__iptables_rule(7)","16.78. cdist-type__issue(7)","16.79. cdist-type__jail(7)","16.80. cdist-type__jail_freebsd10(7)","16.81. cdist-type__jail_freebsd9(7)","16.82. cdist-type__key_value(7)","16.83. cdist-type__keyboard(7)","16.84. cdist-type__letsencrypt_cert(7)","16.85. cdist-type__line(7)","16.86. cdist-type__link(7)","16.87. cdist-type__locale(7)","16.88. cdist-type__locale_system(7)","16.89. cdist-type__motd(7)","16.90. cdist-type__mount(7)","16.91. cdist-type__mysql_database(7)","16.92. cdist-type__mysql_privileges(7)","16.93. cdist-type__mysql_user(7)","16.94. cdist-type__openldap_server(7)","16.95. cdist-type__package(7)","16.96. cdist-type__package_akp(7)","16.97. cdist-type__package_apt(7)","16.98. cdist-type__package_dpkg(7)","16.99. cdist-type__package_emerge(7)","16.100. cdist-type__package_emerge_dependencies(7)","16.101. cdist-type__package_luarocks(7)","16.102. cdist-type__package_opkg(7)","16.103. cdist-type__package_pacman(7)","16.104. cdist-type__package_pip(7)","16.105. cdist-type__package_pkg_freebsd(7)","16.106. cdist-type__package_pkg(7)","16.107. cdist-type__package_pkgng_freebsd(7)","16.108. cdist-type__package_rubygem(7)","16.109. cdist-type__package_update_index(7)","16.110. cdist-type__package_upgrade_all(7)","16.111. cdist-type__package_yum(7)","16.112. cdist-type__package_zypper(7)","16.113. cdist-type__pacman_conf(7)","16.114. cdist-type__pacman_conf_integrate(7)","16.115. cdist-type__pf_apply_anchor(7)","16.116. cdist-type__pf_ruleset(7)","16.117. cdist-type__ping(7)","16.118. cdist-type__postfix(7)","16.119. cdist-type__postfix_master(7)","16.120. cdist-type__postfix_postconf(7)","16.121. cdist-type__postfix_postmap(7)","16.122. cdist-type__postfix_reload(7)","16.123. cdist-type__postgres_database(7)","16.124. cdist-type__postgres_extension(7)","16.125. cdist-type__postgres_role(7)","16.126. cdist-type__process(7)","16.127. cdist-type__prometheus_alertmanager(7)","16.128. cdist-type__prometheus_exporter(7)","16.129. cdist-type__prometheus_server(7)","16.130. cdist-type__pyvenv(7)","16.131. cdist-type__qemu_img(7)","16.132. cdist-type__rbenv(7)","16.133. cdist-type__rsync(7)","16.134. cdist-type__rvm(7)","16.135. cdist-type__rvm_gemset(7)","16.136. cdist-type__rvm_gemset(7)","16.137. cdist-type__rvm_ruby(7)","16.138. cdist-type__sensible_editor(7)","16.139. cdist-type__service(7)","16.140. cdist-type__ssh_authorized_key(7)","16.141. cdist-type__ssh_authorized_keys(7)","16.142. cdist-type__ssh_dot_ssh(7)","16.143. cdist-type__staged_file(7)","16.144. cdist-type__start_on_boot(7)","16.145. cdist-type__sysctl(7)","16.146. cdist-type__systemd-service(7)","16.147. cdist-type__systemd_unit(7)","16.148. cdist-type__timezone(7)","16.149. cdist-type__ufw(7)","16.150. cdist-type__ufw_rule(7)","16.151. cdist-type__unpack(7)","16.152. cdist-type__update_alternatives(7)","16.153. cdist-type__user(7)","16.154. cdist-type__user_groups(7)","16.155. cdist-type__xymon_apache(7)","16.156. cdist-type__xymon_client(7)","16.157. cdist-type__xymon_config(7)","16.158. cdist-type__xymon_server(7)","16.159. cdist-type__yum_repo(7)","16.160. cdist-type__zypper_repo(7)","16.161. cdist-type__zypper_service(7)"],titleterms:{"":16,"boolean":[31,38,42,46,47,50,51,55,62,65,66,68,69,70,79,86,94,97,104,109,110,111,112,114,115,120,124,127,128,137,140,149,155,157,158,159,166,167,169,171,176,177,181,183,186,188,189,191],"class":14,"new":[0,6,14,23,25,30],The:23,Using:[9,22,23],__sample_bottle_host:16,__sample_nginx_http_letsencrypt_and_ssl_redirect:16,abort:176,access:23,add:28,also:[29,30,42,47,49,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,75,76,80,81,88,91,96,98,99,101,106,107,109,110,111,115,117,118,124,126,127,128,129,130,131,132,133,134,135,136,137,138,141,142,143,144,145,146,149,150,153,154,155,156,157,158,159,161,163,164,165,166,167,168,170,171,172,173,174,179,180,182,183,185,186,187,188],applic:16,argument:30,author:[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,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],avail:[7,11],banner:28,base:[14,26],best:0,bootstrap:1,bottl:16,branch:1,bug:6,build:7,cach:[2,20,28],can:23,caveat:[13,28,71,72,109,110,111,137],cdist:[0,6,7,8,9,16,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],cdist_order_depend:0,certif:16,chat:21,code:[6,20],command:[14,18,23],commerci:21,complet:16,config:[3,23,28],configur:[0,1,3,9,16,26,27,28],connect:0,consid:22,content:0,convent:6,copi:[18,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,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191],copyright:176,creat:[10,16],creation:[14,16],databas:[9,16],debian:28,debug:22,defin:[10,23],del:28,depend:[10,26],deprec:[23,31],descript:[2,3,4,8,9,10,11,13,14,19,20,23,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],detect:23,develop:0,devuan:28,differ:0,directori:[1,16],distribut:26,dive:16,document:7,dry:23,dummi:14,dump:[22,29],encrypt:16,environ:[0,17,23,28],error:22,everywher:6,exampl:[4,6,8,9,10,11,13,14,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],exec:18,execut:[0,10,20],exit:28,explor:[4,17,23,128,185],extern:9,featur:5,file:[3,28,187],format:[3,28],from:[1,7,10,23,25],gencod:[16,23],gener:[20,23,25,28],git:[6,7,25],group:0,hack:6,helper:22,highli:26,hint:23,host:[7,9,16,28],hostfil:28,how:[6,7,23,25],html:7,http:16,idiom:23,implement:14,includ:23,inclus:6,info:28,inform:[20,112],init:16,initi:[10,20],input:23,insid:23,instal:[7,16,23,25,28],instanc:23,instruct:25,integr:8,interfac:9,introduct:[9,16],inventori:[9,28],kill:0,known:26,languag:26,layout:16,let:16,level:23,librari:8,limit:168,linkedin:21,list:[16,21,28],local:2,locat:1,log:23,loop:23,mail:21,maintain:0,man:7,manag:[26,27],manifest:[10,16,20,22,23],manipul:9,master:0,messag:[11,41,50,68,76,78,79,86,87,94,95,109,110,111,112,114,115,116,128,137,139,156,163,170,176,177,183,185],modul:14,more:[26,112],multi:0,multipl:[0,31,39,42,114,124,163,171,187],name:[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],next:16,nginx:16,nonparallel:23,note:[0,28],object:[2,17,20],one:23,onli:23,open:16,oper:12,option:[29,31,32,33,34,35,36,37,38,39,40,41,42,43,44,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,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,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,165,168,169,170,171,172,173,174,176,177,178,179,180,181,183,184,185,186,187,188,189,190,191],order:10,origin:1,other:0,output:19,overrid:10,overview:2,packag:[7,16,25],parallel:[0,13],paramet:[16,23,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],passwordless:0,path:[17,28],pattern:28,postgresql:16,power:26,practic:0,preo:[14,28],prepar:16,publish:1,push:26,python:[7,16,25],quickstart:15,read:17,real:16,redirect:16,refer:17,remot:[16,18],report:6,repositori:0,requir:[7,31,32,33,34,35,36,37,38,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,76,77,78,79,80,81,82,83,84,85,86,87,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,119,120,122,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,146,147,148,149,150,151,152,157,158,159,160,163,164,165,166,167,168,169,170,171,173,174,175,176,177,178,181,182,183,184,185,186,187,188,189,190,191],retriev:20,run:[20,23],safe:25,save:19,scalabl:26,script:[22,23,26],see:[29,30,42,47,49,51,52,54,55,56,57,58,59,60,61,62,63,64,65,66,67,75,76,80,81,88,91,96,98,99,101,106,107,109,110,111,115,117,118,124,126,127,128,129,130,131,132,133,134,135,136,137,138,141,142,143,144,145,146,149,150,153,154,155,156,157,158,159,161,163,164,165,166,167,168,170,171,172,173,174,179,180,182,183,185,186,187,188],separ:0,server:16,servic:176,setup:[0,1],shell:[0,26,28],should:26,signatur:7,singleton:23,sourc:7,speed:0,split:10,ssh:0,stage:20,state:10,statu:28,stdin:23,stream:19,stuff:6,sub:14,submit:6,summari:20,support:[12,21],synopsi:[23,28,29,30],system:12,tag:28,target:[7,20],templat:0,test:0,than:26,time:23,troubleshoot:22,trust:0,type:[0,6,10,16,17,23,24,30],type__acl:31,type__apt_default_releas:32,type__apt_kei:33,type__apt_key_uri:34,type__apt_mark:35,type__apt_norecommend:36,type__apt_ppa:37,type__apt_sourc:38,type__apt_unattended_upgrad:39,type__apt_update_index:40,type__block:41,type__ccollect_sourc:42,type__cdist:43,type__cdistmark:44,type__check_messag:45,type__chroot_mount:46,type__chroot_umount:47,type__clean_path:48,type__config_fil:49,type__consul:50,type__consul_ag:51,type__consul_check:52,type__consul_reload:53,type__consul_servic:54,type__consul_templ:55,type__consul_template_templ:56,type__consul_watch_check:57,type__consul_watch_ev:58,type__consul_watch_kei:59,type__consul_watch_keyprefix:60,type__consul_watch_nod:61,type__consul_watch_servic:[62,63],type__cron:64,type__daemontool:65,type__daemontools_servic:66,type__debconf_set_select:67,type__directori:68,type__dock:69,type__docker_compos:70,type__docker_config:71,type__docker_secret:72,type__docker_stack:73,type__docker_swarm:74,type__dog_vdi:75,type__dot_fil:76,type__download:77,type__fil:78,type__filesystem:79,type__firewalld_rul:80,type__firewalld_start:81,type__git:82,type__go_get:83,type__golang_from_vendor:84,type__grafana_dashboard:85,type__group:86,type__host:88,type__hostnam:87,type__install_bootloader_grub:89,type__install_chroot_mount:90,type__install_chroot_umount:91,type__install_config:92,type__install_coreo:93,type__install_directori:94,type__install_fil:95,type__install_fstab:96,type__install_generate_fstab:97,type__install_mkf:98,type__install_mount:99,type__install_partition_msdo:100,type__install_partition_msdos_appli:101,type__install_reboot:102,type__install_reset_disk:103,type__install_stag:104,type__install_umount:105,type__iptables_appli:106,type__iptables_rul:107,type__issu:108,type__jail:109,type__jail_freebsd10:110,type__jail_freebsd9:111,type__key_valu:112,type__keyboard:113,type__letsencrypt_cert:114,type__lin:115,type__link:116,type__local:117,type__locale_system:118,type__motd:119,type__mount:120,type__mysql_databas:121,type__mysql_privileg:122,type__mysql_us:123,type__openldap_serv:124,type__p:147,type__packag:125,type__package_akp:126,type__package_apt:127,type__package_dpkg:128,type__package_emerg:129,type__package_emerge_depend:130,type__package_luarock:131,type__package_opkg:132,type__package_pacman:133,type__package_pip:134,type__package_pkg:136,type__package_pkg_freebsd:135,type__package_pkgng_freebsd:137,type__package_rubygem:138,type__package_update_index:139,type__package_upgrade_al:140,type__package_yum:141,type__package_zypp:142,type__pacman_conf:143,type__pacman_conf_integr:144,type__pf_apply_anchor:145,type__pf_ruleset:146,type__postfix:148,type__postfix_mast:149,type__postfix_postconf:150,type__postfix_postmap:151,type__postfix_reload:152,type__postgres_databas:153,type__postgres_extens:154,type__postgres_rol:155,type__process:156,type__prometheus_alertmanag:157,type__prometheus_export:158,type__prometheus_serv:159,type__pyvenv:160,type__qemu_img:161,type__rbenv:162,type__rsync:163,type__rvm:164,type__rvm_gemset:[165,166],type__rvm_rubi:167,type__sensible_editor:168,type__servic:169,type__ssh_authorized_kei:[170,171],type__ssh_dot_ssh:172,type__staged_fil:173,type__start_on_boot:174,type__sysctl:175,type__systemd:176,type__systemd_unit:177,type__timezon:178,type__ufw:179,type__ufw_rul:180,type__unpack:181,type__update_altern:182,type__us:183,type__user_group:184,type__xymon_apach:185,type__xymon_cli:186,type__xymon_config:187,type__xymon_serv:188,type__yum_repo:189,type__zypper_repo:190,type__zypper_servic:191,typewrit:23,ubuntu:28,updat:[1,25],upgrad:25,upstream:[6,16,23],usabl:27,usag:23,use:[23,26],user:16,using:[7,8,9],uwsgi:16,variabl:[17,23],verif:7,version:[7,25],welcom:6,what:16,why:26,work:[0,1],workflow:6,world:16,write:[14,17,23],zero:26}}) \ No newline at end of file