123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 |
- .. _tutorial-minionfs:
- ============================
- MinionFS Backend Walkthrough
- ============================
- .. versionadded:: 2014.1.0
- .. note::
- This walkthrough assumes basic knowledge of Salt and :mod:`cp.push
- <salt.modules.cp.push>`. To get up to speed, check out the
- :ref:`Salt Walkthrough <tutorial-salt-walk-through>`.
- Sometimes it is desirable to deploy a file located on one minion to one or more
- other minions. This is supported in Salt, and can be accomplished in two parts:
- #. Minion support for pushing files to the master (using :py:func:`cp.push
- <salt.modules.cp.push>`)
- #. The :mod:`minionfs <salt.fileserver.minionfs>` fileserver backend
- This walkthrough will show how to use both of these features.
- Enabling File Push
- ==================
- To set the master to accept files pushed from minions, the
- :conf_master:`file_recv` option in the master config file must be set to
- ``True`` (the default is ``False``).
- .. code-block:: yaml
- file_recv: True
- .. note::
- This change requires a restart of the salt-master service.
- Pushing Files
- =============
- Once this has been done, files can be pushed to the master using the
- :py:func:`cp.push <salt.modules.cp.push>` function:
- .. code-block:: bash
- salt 'minion-id' cp.push /path/to/the/file
- This command will store the file in a subdirectory named ``minions`` under the
- master's :conf_master:`cachedir`. On most masters, this path will be
- ``/var/cache/salt/master/minions``. Within this directory will be one directory
- for each minion which has pushed a file to the master, and underneath that the
- full path to the file on the minion. So, for example, if a minion with an ID of
- ``dev1`` pushed a file ``/var/log/myapp.log`` to the master, it would be saved
- to ``/var/cache/salt/master/minions/dev1/var/log/myapp.log``.
- Serving Pushed Files Using MinionFS
- ===================================
- While it is certainly possible to add ``/var/cache/salt/master/minions`` to the
- master's :conf_master:`file_roots` and serve these files, it may only be
- desirable to expose files pushed from certain minions. Adding
- ``/var/cache/salt/master/minions/<minion-id>`` for each minion that needs to be
- exposed can be cumbersome and prone to errors.
- Enter :mod:`minionfs <salt.fileserver.minionfs>`. This fileserver backend will
- make files pushed using :py:func:`cp.push <salt.modules.cp.push>` available to
- the Salt fileserver, and provides an easy mechanism to restrict which minions'
- pushed files are made available.
- Simple Configuration
- --------------------
- To use the :mod:`minionfs <salt.fileserver.minionfs>` backend, add ``minionfs``
- to the list of backends in the :conf_master:`fileserver_backend` configuration
- option on the master:
- .. code-block:: yaml
- file_recv: True
- fileserver_backend:
- - roots
- - minionfs
- .. note::
- ``minion`` also works here. Prior to the 2018.3.0 release, *only*
- ``minion`` would work.
- Also, as described earlier, ``file_recv: True`` is needed to enable the
- master to receive files pushed from minions. As always, changes to the
- master configuration require a restart of the ``salt-master`` service.
- Files made available via :mod:`minionfs <salt.fileserver.minionfs>` are by
- default located at ``salt://<minion-id>/path/to/file``. Think back to the
- earlier example, in which ``dev1`` pushed a file ``/var/log/myapp.log`` to the
- master. With :mod:`minionfs <salt.fileserver.minionfs>` enabled, this file
- would be addressable in Salt at ``salt://dev1/var/log/myapp.log``.
- If many minions have pushed to the master, this will result in many directories
- in the root of the Salt fileserver. For this reason, it is recommended to use
- the :conf_master:`minionfs_mountpoint` config option to organize these files
- underneath a subdirectory:
- .. code-block:: yaml
- minionfs_mountpoint: salt://minionfs
- Using the above mountpoint, the file in the example would be located at
- ``salt://minionfs/dev1/var/log/myapp.log``.
- Restricting Certain Minions' Files from Being Available Via MinionFS
- --------------------------------------------------------------------
- A whitelist and blacklist can be used to restrict the minions whose pushed
- files are available via :mod:`minionfs <salt.fileserver.minionfs>`. These lists
- can be managed using the :conf_master:`minionfs_whitelist` and
- :conf_master:`minionfs_blacklist` config options. Click the links for both of
- them for a detailed explanation of how to use them.
- A more complex configuration example, which uses both a whitelist and
- blacklist, can be found below:
- .. code-block:: yaml
- file_recv: True
- fileserver_backend:
- - roots
- - minionfs
- minionfs_mountpoint: salt://minionfs
- minionfs_whitelist:
- - host04
- - web*
- - 'mail\d+\.domain\.tld'
- minionfs_blacklist:
- - web21
- Potential Concerns
- ------------------
- * There is no access control in place to restrict which minions have access to
- files served up by :mod:`minionfs <salt.fileserver.minionfs>`. All minions
- will have access to these files.
- * Unless the :conf_master:`minionfs_whitelist` and/or
- :conf_master:`minionfs_blacklist` config options are used, all minions which
- push files to the master will have their files made available via
- :mod:`minionfs <salt.fileserver.minionfs>`.
|