diff --git a/docs/ansible.rst b/docs/ansible.rst index 408d14c6..6dabd15f 100644 --- a/docs/ansible.rst +++ b/docs/ansible.rst @@ -29,6 +29,12 @@ time spent by the target host already doing useful work. Mitogen cannot speed up a module once it is executing, it can only ensure the module executes as quickly as possible. +.. raw:: html + +
+ +
+ * **A single SSH connection is used for each target host**, in addition to one sudo invocation per distinct user account. Subsequent playbook steps always reuse the same connection. This is much better than SSH multiplexing combined @@ -54,6 +60,31 @@ quickly as possible. relating to those files in cross-account scenarios are entirely avoided. +Installation +------------ + +.. caution:: + + Thoroughly review the list of limitations before use, and **do not test the + prototype in a live environment until this notice is removed**. + +1. Verify Ansible 2.4 and Python 2.7 are listed in the output of ``ansible + --version`` +2. Download and extract http://github.com/dw/mitogen/archive/master.zip +3. Modify ``ansible.cfg``: + + .. code-block:: dosini + + [defaults] + strategy_plugins = /path/to/mitogen-master/ansible_mitogen/plugins/strategy + strategy = mitogen + + The ``strategy`` key is optional. If omitted, you can set the + ``ANSIBLE_STRATEGY=mitogen`` environment variable on a per-run basis. + +4. Cross your fingers and try it. + + Limitations ----------- @@ -70,6 +101,9 @@ High Risk `_ has received minimal testing. +* For now only **built-in Python command modules work**, however almost all + modules shipped with Ansible are Python-based. + * Transfer of large (i.e. GB-sized) files using certain Ansible-internal APIs, such as triggered via the ``copy`` module, will cause corresponding temporary memory and CPU spikes on both host and target machine, due to delivering the @@ -81,6 +115,10 @@ High Risk respected, however ``delegate_to``, ``connection: local``, ``become``, ``become_user``, and ``local_action`` have all been tested. +* Only Ansible 2.4 is being used for development, with occasional tests under + 2.3 and 2.2. It should be more than possible to fully support at least 2.3, + if not also 2.2. + Low Risk ~~~~~~~~ @@ -97,9 +135,6 @@ Low Risk * Interaction with modules employing special action plugins is minimally tested, except for the ``synchronize``, ``template`` and ``copy`` modules. -* For now only Python command modules work, however almost all modules shipped - with Ansible are Python-based. - * Uncaptured standard output of remotely executing modules and shell commands are logged to the console. This will be fixed in a later version. @@ -129,29 +164,8 @@ Behavioural Differences connection to host closed`` to appear in ``stderr`` output of every executed command. This never manifests with the Mitogen extension. -* Asynchronous jobs execute in a thread of the single target Python - interpreter. In future this will be replaced with subprocesses, as it's - likely some use cases spawn many asynchronous jobs. - - -Configuration -------------- - -.. warning:: - - Don't test the prototype in a live environment until this notice is removed. - -1. Ensure the host machine is using Python 2.x for Ansible by verifying the - output of ``ansible --version``. Ensure the ``python`` command starts a - Python 2.x interpreter. If not, substitute ``python`` for the correct - command in steps 2 and 3. -2. ``python -m pip install -U git+https://github.com/dw/mitogen.git`` **on the - host machine only**. -3. ``python -c 'import ansible_mitogen as a; print a.__path__'`` -4. Add ``strategy_plugins = /path/to/../ansible_mitogen/plugins/strategy`` using the - path from above to the ``[defaults]`` section of ``ansible.cfg``. -5. Add ``strategy = mitogen`` to the ``[defaults]`` section of ``ansible.cfg``. -6. Cross your fingers and try it out. +* Asynchronous support is very primitive, and jobs execute in a thread of the + target Python interpreter. This will fixed shortly. Demo @@ -232,8 +246,8 @@ The extension aggressively reuses the single target Python interpreter to execute every module. While this works well, it violates an unwritten assumption regarding Ansible modules, and so it is possible a buggy module could cause a run to fail, or for unrelated modules to interact with each other -due to bad hygiene. Mitigations will be added as necessary if problems of this -sort ever actually manfest. +due to bad hygiene. Mitigations (such as forking) will be added as necessary if +problems of this sort ever actually manfest. Patches ~~~~~~~ @@ -244,8 +258,8 @@ mechanism for selecting a connection plug-in. While it is hoped the patches can be avoided in future, for interesting versions of Ansible deployed today this simply is not possible, and so they continue to be required. -The patches are well defined, act conservatively including by disabling -themselves when non-Mitogen connections are in use, and additional third party +The patches are concise and behave conservatively, including by disabling +themselves when non-Mitogen connections are in use. Additional third party plug-ins are unlikely to attempt similar patches, so the risk to an established configuration should be minimal. @@ -260,6 +274,8 @@ equivalent semantics. This allows: such as forwarding SSH agents across ``sudo`` invocations, * reporting on conflicting flag combinations, * reporting on unsupported flag combinations, +* internally special-casing certain behaviour (like recursive agent forwarding) + without boring the user with the details, * avoiding opening the extension up to untestable scenarios where users can insert arbitrary garbage between Mitogen and the components it integrates with, diff --git a/docs/index.rst b/docs/index.rst index da108372..977f443e 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -12,18 +12,15 @@ Mitogen is a Python library for writing distributed self-replicating programs. } -.. warning:: +.. caution:: - This is alpha-quality code. If you intend to use it, be aware of how little - real world testing it has received, the total absence of any systematic - tests, and the nightmare-level difficulty of debugging hangs in a tree of - processes running identical code straddling multiple thread and machine - boundaries! ``router.enable_debug()`` is your friend. + Be aware this is prerelease code, and that comprehensive automated tests + are presently absent. + :py:meth:`Router.enable_debug() ` is + your friend. If have a use for this software, please `drop an e-mail`_ so + expectations and bug fixes can be managed sensibly. - If you think you have a use for this software, please `drop me an e-mail`_ - so that expectations and bug fixes can be managed sensibly. - - .. _drop me an e-mail: dw@botanicus.net + .. _drop an e-mail: dw@botanicus.net .. image:: images/cell_division.png :align: right