123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404 |
- .. _states-highstate:
- ====================================
- Highstate data structure definitions
- ====================================
- The Salt State Tree
- ===================
- A state tree is a collection of ``SLS`` files and directories that live under the directory
- specified in :conf_master:`file_roots`.
- .. note::
- Directory names or filenames in the state tree cannot contain a period, with the
- exception of the period in the .sls file suffix.
- .. _states-highstate-top-file:
- Top file
- --------
- The main state file that instructs minions what environment and modules to use
- during state execution.
- Configurable via :conf_master:`state_top`.
- .. seealso:: :ref:`A detailed description of the top file <states-top>`
- .. _include-declaration:
- Include declaration
- -------------------
- Defines a list of :ref:`module-reference` strings to include in this ``SLS``.
- Occurs only in the top level of the SLS data structure.
- Example:
- .. code-block:: yaml
- include:
- - edit.vim
- - http.server
- .. _module-reference:
- Module reference
- ----------------
- The name of a SLS module defined by a separate SLS file and residing on
- the Salt Master. A module named ``edit.vim`` is a reference to the SLS
- file ``salt://edit/vim.sls``.
- .. _id-declaration:
- ID declaration
- --------------
- Defines an individual :ref:`highstate <running-highstate>` component. Always
- references a value of a dictionary containing keys referencing
- :ref:`state-declaration` and :ref:`requisite-declaration`. Can be overridden by
- a :ref:`name-declaration` or a :ref:`names-declaration`.
- Occurs on the top level or under the :ref:`extend-declaration`.
- Must be unique across entire state tree. If the same ID declaration is
- used twice, only the first one matched will be used. All subsequent
- ID declarations with the same name will be ignored.
- .. note:: Naming gotchas
- In Salt versions earlier than 0.9.7, ID declarations containing dots would
- result in unpredictable output.
- .. _extend-declaration:
- Extend declaration
- ------------------
- Extends a :ref:`name-declaration` from an included ``SLS module``. The
- keys of the extend declaration always refer to an existing
- :ref:`id-declaration` which have been defined in included ``SLS modules``.
- Occurs only in the top level and defines a dictionary.
- States cannot be extended more than once in a single state run.
- Extend declarations are useful for adding-to or overriding parts of a
- :ref:`state-declaration` that is defined in another ``SLS`` file. In the
- following contrived example, the shown ``mywebsite.sls`` file is ``include``
- -ing and ``extend`` -ing the ``apache.sls`` module in order to add a ``watch``
- declaration that will restart Apache whenever the Apache configuration file,
- ``mywebsite`` changes.
- .. code-block:: yaml
- include:
- - apache
- extend:
- apache:
- service:
- - watch:
- - file: mywebsite
- mywebsite:
- file.managed:
- - name: /var/www/mysite
- .. seealso:: watch_in and require_in
- Sometimes it is more convenient to use the :ref:`watch_in
- <requisites-watch-in>` or :ref:`require_in <requisites-require-in>` syntax
- instead of extending another ``SLS`` file.
- :ref:`State Requisites <requisites>`
- .. _state-declaration:
- State declaration
- -----------------
- A list which contains one string defining the :ref:`function-declaration` and
- any number of :ref:`function-arg-declaration` dictionaries.
- Can, optionally, contain a number of additional components like the
- name override components — :ref:`name <name-declaration>` and
- :ref:`names <names-declaration>`. Can also contain :ref:`requisite
- declarations <requisite-declaration>`.
- Occurs under an :ref:`ID-declaration`.
- .. _requisite-declaration:
- Requisite declaration
- ---------------------
- A list containing :ref:`requisite references <requisite-reference>`.
- Used to build the action dependency tree. While Salt states are made to
- execute in a deterministic order, this order is managed by requiring
- and watching other Salt states.
- Occurs as a list component under a :ref:`state-declaration` or as a
- key under an :ref:`ID-declaration`.
- .. _requisite-reference:
- Requisite reference
- -------------------
- A single key dictionary. The key is the name of the referenced
- :ref:`state-declaration` and the value is the ID of the referenced
- :ref:`ID-declaration`.
- Occurs as a single index in a :ref:`requisite-declaration` list.
- .. _function-declaration:
- Function declaration
- --------------------
- The name of the function to call within the state. A state declaration
- can contain only a single function declaration.
- For example, the following state declaration calls the :mod:`installed
- <salt.states.pkg.installed>` function in the ``pkg`` state module:
- .. code-block:: yaml
- httpd:
- pkg.installed: []
- The function can be declared inline with the state as a shortcut.
- The actual data structure is compiled to this form:
- .. code-block:: yaml
- httpd:
- pkg:
- - installed
- Where the function is a string in the body of the state declaration.
- Technically when the function is declared in dot notation the compiler
- converts it to be a string in the state declaration list. Note that the
- use of the first example more than once in an ID declaration is invalid
- yaml.
- INVALID:
- .. code-block:: yaml
- httpd:
- pkg.installed
- service.running
- When passing a function without arguments and another state declaration
- within a single ID declaration, then the long or "standard" format
- needs to be used since otherwise it does not represent a valid data
- structure.
- VALID:
- .. code-block:: yaml
- httpd:
- pkg.installed: []
- service.running: []
- Occurs as the only index in the :ref:`state-declaration` list.
- .. _function-arg-declaration:
- Function arg declaration
- ------------------------
- A single key dictionary referencing a Python type which is to be passed
- to the named :ref:`function-declaration` as a parameter. The type must
- be the data type expected by the function.
- Occurs under a :ref:`function-declaration`.
- For example in the following state declaration ``user``, ``group``, and
- ``mode`` are passed as arguments to the :mod:`managed
- <salt.states.file.managed>` function in the ``file`` state module:
- .. code-block:: yaml
- /etc/http/conf/http.conf:
- file.managed:
- - user: root
- - group: root
- - mode: 644
- .. _name-declaration:
- Name declaration
- ----------------
- Overrides the ``name`` argument of a :ref:`state-declaration`. If
- ``name`` is not specified the :ref:`ID-declaration` satisfies the
- ``name`` argument.
- The name is always a single key dictionary referencing a string.
- Overriding ``name`` is useful for a variety of scenarios.
- For example, avoiding clashing ID declarations. The following two state
- declarations cannot both have ``/etc/motd`` as the ID declaration:
- .. code-block:: yaml
- motd_perms:
- file.managed:
- - name: /etc/motd
- - mode: 644
- motd_quote:
- file.append:
- - name: /etc/motd
- - text: "Of all smells, bread; of all tastes, salt."
- Another common reason to override ``name`` is if the ID declaration is long and
- needs to be referenced in multiple places. In the example below it is much
- easier to specify ``mywebsite`` than to specify
- ``/etc/apache2/sites-available/mywebsite.com`` multiple times:
- .. code-block:: yaml
- mywebsite:
- file.managed:
- - name: /etc/apache2/sites-available/mywebsite.com
- - source: salt://mywebsite.com
- a2ensite mywebsite.com:
- cmd.wait:
- - unless: test -L /etc/apache2/sites-enabled/mywebsite.com
- - watch:
- - file: mywebsite
- apache2:
- service.running:
- - watch:
- - file: mywebsite
- .. _names-declaration:
- Names declaration
- -----------------
- Expands the contents of the containing :ref:`state-declaration` into
- multiple state declarations, each with its own name.
- For example, given the following state declaration:
- .. code-block:: yaml
- python-pkgs:
- pkg.installed:
- - names:
- - python-django
- - python-crypto
- - python-yaml
- Once converted into the lowstate data structure the above state
- declaration will be expanded into the following three state declarations:
- .. code-block:: yaml
- python-django:
- pkg.installed
- python-crypto:
- pkg.installed
- python-yaml:
- pkg.installed
- Other values can be overridden during the expansion by providing an additional
- dictionary level.
- .. versionadded:: 2014.7.0
- .. code-block:: yaml
- ius:
- pkgrepo.managed:
- - humanname: IUS Community Packages for Enterprise Linux 6 - $basearch
- - gpgcheck: 1
- - baseurl: http://mirror.rackspace.com/ius/stable/CentOS/6/$basearch
- - gpgkey: http://dl.iuscommunity.org/pub/ius/IUS-COMMUNITY-GPG-KEY
- - names:
- - ius
- - ius-devel:
- - baseurl: http://mirror.rackspace.com/ius/development/CentOS/6/$basearch
- .. _states-highstate-example:
- Large example
- =============
- Here is the layout in yaml using the names of the highdata structure
- components.
- .. code-block:: yaml
- <Include Declaration>:
- - <Module Reference>
- - <Module Reference>
- <Extend Declaration>:
- <ID Declaration>:
- [<overrides>]
- # standard declaration
- <ID Declaration>:
- <State Module>:
- - <Function>
- - <Function Arg>
- - <Function Arg>
- - <Function Arg>
- - <Name>: <name>
- - <Requisite Declaration>:
- - <Requisite Reference>
- - <Requisite Reference>
- # inline function and names
- <ID Declaration>:
- <State Module>.<Function>:
- - <Function Arg>
- - <Function Arg>
- - <Function Arg>
- - <Names>:
- - <name>
- - <name>
- - <name>
- - <Requisite Declaration>:
- - <Requisite Reference>
- - <Requisite Reference>
- # multiple states for single id
- <ID Declaration>:
- <State Module>:
- - <Function>
- - <Function Arg>
- - <Name>: <name>
- - <Requisite Declaration>:
- - <Requisite Reference>
- <State Module>:
- - <Function>
- - <Function Arg>
- - <Names>:
- - <name>
- - <name>
- - <Requisite Declaration>:
- - <Requisite Reference>
|