2014-02-27 23:49:18 +00:00
|
|
|
.. _states-highstate:
|
|
|
|
|
2011-10-27 06:02:50 +00:00
|
|
|
====================================
|
2011-10-30 16:21:46 +00:00
|
|
|
Highstate data structure definitions
|
2011-10-27 06:02:50 +00:00
|
|
|
====================================
|
|
|
|
|
2011-10-30 22:12:38 +00:00
|
|
|
The Salt State Tree
|
2011-10-27 06:02:50 +00:00
|
|
|
===================
|
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
A state tree is a collection of ``SLS`` files that live under the directory
|
|
|
|
specified in :conf_master:`file_roots`. A state tree can be organized into
|
|
|
|
``SLS modules``.
|
2011-11-26 08:52:59 +00:00
|
|
|
|
2014-02-27 23:49:18 +00:00
|
|
|
.. _states-highstate-top-file:
|
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
Top file
|
|
|
|
--------
|
2011-11-26 08:52:59 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
The main state file that instructs minions what environment and modules to use
|
|
|
|
during state execution.
|
2011-11-26 08:52:59 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
Configurable via :conf_master:`state_top`.
|
2012-03-15 00:09:19 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
.. seealso:: :doc:`A detailed description of the top file </ref/states/top>`
|
2011-11-26 08:52:59 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _include-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 22:12:38 +00:00
|
|
|
Include declaration
|
|
|
|
-------------------
|
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Defines a list of :ref:`module-reference` strings to include in this ``SLS``.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
Occurs only in the top level of the highstate structure.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
Example:
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
.. code-block:: yaml
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
include:
|
|
|
|
- edit.vim
|
|
|
|
- http.server
|
2011-10-28 02:58:17 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _module-reference:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
Module reference
|
2011-10-30 22:12:38 +00:00
|
|
|
----------------
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
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``.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _id-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
ID declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
--------------
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Defines an individual 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`.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Occurs on the top level or under the :ref:`extend-declaration`.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
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.
|
2012-01-30 19:11:27 +00:00
|
|
|
|
2013-01-13 14:02:19 +00:00
|
|
|
.. note:: Naming gotchas
|
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Until 0.9.6, IDs could **not** contain a dot, otherwise highstate
|
|
|
|
summary output was unpredictable. (It was fixed in versions 0.9.7 and
|
|
|
|
above)
|
2013-01-13 14:02:19 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _extend-declaration:
|
2013-01-13 14:02:19 +00:00
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
Extend declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
------------------
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Extends a :ref:`name-declaration` from an included ``SLS module``. The
|
|
|
|
keys of the extend declaration always define existing :ref`ID declaration`
|
|
|
|
which have been defined in included
|
2014-02-27 21:30:49 +00:00
|
|
|
``SLS modules``.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
Occurs only in the top level and defines a dictionary.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-04-03 21:19:34 +00:00
|
|
|
States cannot be extended more than once in a single state run.
|
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
Extend declarations are useful for adding-to or overriding parts of a
|
2014-02-28 01:27:07 +00:00
|
|
|
:ref:`state-declaration` that is defined in another ``SLS`` file. In the
|
2012-02-09 20:20:01 +00:00
|
|
|
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
|
2012-03-15 00:09:19 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
extend:
|
|
|
|
apache:
|
|
|
|
service:
|
|
|
|
- watch:
|
|
|
|
- file: mywebsite
|
|
|
|
|
|
|
|
mywebsite:
|
|
|
|
file:
|
|
|
|
- managed
|
2012-03-15 00:09:19 +00:00
|
|
|
|
2013-06-07 18:47:31 +00:00
|
|
|
.. seealso:: watch_in and require_in
|
2013-03-28 03:44:57 +00:00
|
|
|
|
2013-08-04 00:27:17 +00:00
|
|
|
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.
|
2013-03-28 03:44:57 +00:00
|
|
|
|
2013-06-07 18:47:31 +00:00
|
|
|
:doc:`State Requisites </ref/states/requisites>`
|
2013-03-28 03:44:57 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _state-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
State declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
-----------------
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
A list which contains one string defining the :ref:`function-declaration` and
|
|
|
|
any number of :ref:`function-arg-declaration` dictionaries.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
Can, optionally, contain a number of additional components like the
|
2014-02-28 01:27:07 +00:00
|
|
|
name override components — :ref:`name <name-declaration>` and
|
|
|
|
:ref:`names <names-declaration>`. Can also contain :ref:`requisite
|
|
|
|
declarations <requisite-declaration>`.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Occurs under an :ref:`ID-declaration`.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _requisite-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
Requisite declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
---------------------
|
2011-10-28 02:55:10 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
A list containing :ref:`requisite references <requisite-reference>`.
|
2011-10-28 02:55:10 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
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.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Occurs as a list component under a :ref:`state-declaration` or as a
|
|
|
|
key under an :ref:`ID-declaration`.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _requisite-reference:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
Requisite reference
|
2011-10-30 22:12:38 +00:00
|
|
|
-------------------
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
A single key dictionary. The key is the name of the referenced
|
2014-02-28 01:27:07 +00:00
|
|
|
:ref:`state-declaration` and the value is the ID of the referenced
|
|
|
|
:ref:`ID-declaration`.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Occurs as a single index in a :ref:`requisite-declaration` list.
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _function-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 22:03:23 +00:00
|
|
|
Function declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
--------------------
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
The name of the function to call within the state. A state declaration
|
|
|
|
can contain only a single function declaration.
|
2012-02-09 20:20:01 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
For example, the following state declaration calls the :mod:`installed
|
|
|
|
<salt.states.pkg.installed>` function in the ``pkg`` state module:
|
2012-02-09 20:20:01 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
.. code-block:: yaml
|
2012-02-09 20:20:01 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
httpd:
|
|
|
|
pkg.installed
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
The function can be declared inline with the state as a shortcut, but
|
|
|
|
the actual data structure is better referenced in this form:
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
.. code-block:: yaml
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
httpd:
|
|
|
|
pkg:
|
|
|
|
- installed
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
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.
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
INVALID:
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
.. code-block:: yaml
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
httpd:
|
|
|
|
pkg.installed
|
|
|
|
service.running
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
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.
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
VALID:
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
.. code-block:: yaml
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
httpd:
|
|
|
|
pkg:
|
|
|
|
- installed
|
|
|
|
service:
|
|
|
|
- running
|
2012-06-18 06:22:06 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Occurs as the only index in the :ref:`state-declaration` list.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _function-arg-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 22:03:23 +00:00
|
|
|
Function arg declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
------------------------
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
A single key dictionary referencing a Python type which is to be passed
|
2014-02-28 01:27:07 +00:00
|
|
|
to the named :ref:`function-declaration` as a parameter. The type must
|
2014-02-27 21:30:49 +00:00
|
|
|
be the data type expected by the function.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Occurs under a :ref:`function-declaration`.
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
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:
|
2012-06-18 07:28:55 +00:00
|
|
|
file.managed:
|
2012-02-09 20:20:01 +00:00
|
|
|
- user: root
|
|
|
|
- group: root
|
|
|
|
- mode: 644
|
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _name-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 22:03:23 +00:00
|
|
|
Name declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
----------------
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Overrides the ``name`` argument of a :ref:`state-declaration`. If
|
|
|
|
``name`` is not specified the :ref:`ID-declaration` satisfies the
|
2014-02-27 21:30:49 +00:00
|
|
|
``name`` argument.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 21:30:49 +00:00
|
|
|
The name is always a single key dictionary referencing a string.
|
2012-02-09 20:20:01 +00:00
|
|
|
|
|
|
|
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:
|
2012-06-18 07:28:55 +00:00
|
|
|
file.managed:
|
2012-02-09 20:20:01 +00:00
|
|
|
- name: /etc/motd
|
|
|
|
- mode: 644
|
|
|
|
|
|
|
|
motd_quote:
|
2012-06-18 07:28:55 +00:00
|
|
|
file.append:
|
2012-02-09 20:20:01 +00:00
|
|
|
- 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:
|
2012-06-18 07:28:55 +00:00
|
|
|
file.managed:
|
2012-02-09 20:20:01 +00:00
|
|
|
- name: /etc/apache2/sites-available/mywebsite.com
|
|
|
|
- source: salt://mywebsite.com
|
|
|
|
|
|
|
|
a2ensite mywebsite.com:
|
2012-06-18 07:28:55 +00:00
|
|
|
cmd.wait:
|
2012-02-09 20:20:01 +00:00
|
|
|
- unless: test -L /etc/apache2/sites-enabled/mywebsite.com
|
|
|
|
- watch:
|
|
|
|
- file: mywebsite
|
|
|
|
|
|
|
|
apache2:
|
|
|
|
service:
|
|
|
|
- running
|
|
|
|
- watch:
|
|
|
|
- file: mywebsite
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
.. _names-declaration:
|
2014-02-27 23:49:18 +00:00
|
|
|
|
2011-10-30 22:03:23 +00:00
|
|
|
Names declaration
|
2011-10-30 22:12:38 +00:00
|
|
|
-----------------
|
2011-10-27 06:02:50 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
Expands the contents of the containing :ref:`state-declaration` into
|
2014-02-27 21:30:49 +00:00
|
|
|
multiple state declarations, each with its own name.
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
For example, given the following state declaration:
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
.. code-block:: yaml
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2012-02-09 20:20:01 +00:00
|
|
|
python-pkgs:
|
2012-06-18 07:28:55 +00:00
|
|
|
pkg.installed:
|
2012-02-09 20:20:01 +00:00
|
|
|
- names:
|
|
|
|
- python-django
|
|
|
|
- python-crypto
|
|
|
|
- python-yaml
|
|
|
|
|
2012-05-23 04:43:12 +00:00
|
|
|
Once converted into the lowstate data structure the above state
|
2012-03-15 00:09:19 +00:00
|
|
|
declaration will be expanded into the following three state declarations:
|
2012-02-09 20:20:01 +00:00
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
|
|
|
python-django:
|
2012-06-18 07:28:55 +00:00
|
|
|
pkg.installed
|
2012-02-09 20:20:01 +00:00
|
|
|
|
|
|
|
python-crypto:
|
2012-06-18 07:28:55 +00:00
|
|
|
pkg.installed
|
2012-02-09 20:20:01 +00:00
|
|
|
|
|
|
|
python-yaml:
|
2012-06-18 07:28:55 +00:00
|
|
|
pkg.installed
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2014-02-27 23:49:18 +00:00
|
|
|
.. _states-highstate-example:
|
|
|
|
|
2011-10-30 16:21:46 +00:00
|
|
|
Large example
|
2011-10-28 02:55:10 +00:00
|
|
|
=============
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2011-10-28 02:55:10 +00:00
|
|
|
Here is the layout in yaml using the names of the highdata structure
|
|
|
|
components.
|
|
|
|
|
|
|
|
.. code-block:: yaml
|
2011-10-30 16:21:46 +00:00
|
|
|
|
2011-10-28 02:55:10 +00:00
|
|
|
<Include Declaration>:
|
|
|
|
- <Module Reference>
|
|
|
|
- <Module Reference>
|
2012-02-09 20:20:01 +00:00
|
|
|
|
2011-10-28 02:55:10 +00:00
|
|
|
<Extend Declaration>:
|
|
|
|
<ID Declaration>:
|
2012-02-09 20:20:01 +00:00
|
|
|
[<overrides>]
|
|
|
|
|
2012-12-27 09:47:23 +00:00
|
|
|
|
2012-12-27 19:12:18 +00:00
|
|
|
# standard declaration
|
2012-12-27 09:47:23 +00:00
|
|
|
|
2011-10-28 02:55:10 +00:00
|
|
|
<ID Declaration>:
|
2012-06-18 06:22:06 +00:00
|
|
|
<State Declaration>:
|
2012-10-11 17:40:37 +00:00
|
|
|
- <Function>
|
2011-10-28 02:55:10 +00:00
|
|
|
- <Function Arg>
|
|
|
|
- <Function Arg>
|
|
|
|
- <Function Arg>
|
2012-02-09 20:20:01 +00:00
|
|
|
- <Name>: <name>
|
2011-10-28 02:55:10 +00:00
|
|
|
- <Requisite Declaration>:
|
|
|
|
- <Requisite Reference>
|
|
|
|
- <Requisite Reference>
|
2012-02-09 20:20:01 +00:00
|
|
|
|
2012-12-27 09:47:23 +00:00
|
|
|
|
2012-12-27 19:12:18 +00:00
|
|
|
# inline function and names
|
2012-12-27 09:47:23 +00:00
|
|
|
|
2011-10-28 02:55:10 +00:00
|
|
|
<ID Declaration>:
|
2012-06-18 07:28:55 +00:00
|
|
|
<State Declaration>.<Function>:
|
2011-10-28 02:55:10 +00:00
|
|
|
- <Function Arg>
|
|
|
|
- <Function Arg>
|
|
|
|
- <Function Arg>
|
|
|
|
- <Names>:
|
|
|
|
- <name>
|
|
|
|
- <name>
|
|
|
|
- <name>
|
|
|
|
- <Requisite Declaration>:
|
|
|
|
- <Requisite Reference>
|
|
|
|
- <Requisite Reference>
|
2012-12-27 09:47:23 +00:00
|
|
|
|
|
|
|
|
2012-12-27 19:12:18 +00:00
|
|
|
# multiple states for single id
|
2012-12-27 09:47:23 +00:00
|
|
|
|
|
|
|
<ID Declaration>:
|
|
|
|
<State Declaration>:
|
|
|
|
- <Function>
|
|
|
|
- <Function Arg>
|
|
|
|
- <Name>: <name>
|
|
|
|
- <Requisite Declaration>:
|
|
|
|
- <Requisite Reference>
|
|
|
|
<State Declaration>:
|
|
|
|
- <Function>
|
|
|
|
- <Function Arg>
|
|
|
|
- <Names>:
|
|
|
|
- <name>
|
|
|
|
- <name>
|
|
|
|
- <Requisite Declaration>:
|
|
|
|
- <Requisite Reference>
|