@@ -57,7 +57,7 @@ write files.
5757Installation
5858------------
5959
60- 1. Thoroughly review :ref: `noteworthy_differences ` and :ref: ` known_issues `.
60+ 1. Review :ref: `noteworthy_differences `.
61612. Download and extract |mitogen_url |.
62623. Modify ``ansible.cfg ``:
6363
@@ -143,13 +143,29 @@ Testimonials
143143Noteworthy Differences
144144----------------------
145145
146- * Ansible 2.3-2.7 are supported along with Python 2.6, 2.7 or 3.6. Verify your
147- installation is running one of these versions by checking ``ansible
146+ * Ansible 2.3-2.7 are supported along with Python 2.6, 2.7, 3.6 and 3.7. Verify
147+ your installation is running one of these versions by checking ``ansible
148148 --version `` output.
149149
150- * The Ansible ``raw `` action executes as a regular Mitogen connection,
151- precluding its use for installing Python on a target. This will be addressed
152- soon.
150+ * The ``raw `` action executes as a regular Mitogen connection, which requires
151+ Python on the target, precluding its use for installing Python. This will be
152+ addressed in a future release. For now, simply mix Mitogen and vanilla
153+ Ansible strategies:
154+
155+ .. code-block :: yaml
156+
157+ - hosts : web-servers
158+ strategy : linear
159+ tasks :
160+ - name : Install Python if necessary.
161+ raw : test -e /usr/bin/python || apt install -y python-minimal
162+
163+ - hosts : web-servers
164+ strategy : mitogen_linear
165+ roles :
166+ - nginx
167+ - initech_app
168+ - y2k_fix
153169
154170 * The ``doas ``, ``su `` and ``sudo `` become methods are available. File bugs to
155171 register interest in more.
@@ -166,43 +182,70 @@ Noteworthy Differences
166182 :ref: `mitogen_su <su >`, :ref: `mitogen_sudo <sudo >`, and :ref: `setns <setns >`
167183 types. File bugs to register interest in others.
168184
169- * Local commands execute in a reuseable interpreter created identically to
170- interpreters on targets. Presently one interpreter per ``become_user ``
171- exists, and so only one local action may execute simultaneously.
185+ * Actions are single-threaded for each `(host, user account) ` combination,
186+ including actions that execute on the local machine. Playbooks may experience
187+ slowdown compared to vanilla Ansible if they employ long-running
188+ ``local_action `` or ``delegate_to `` tasks delegating many target hosts to a
189+ single machine and user account.
172190
173191 Ansible usually permits up to ``forks `` simultaneous local actions. Any
174192 long-running local actions that execute for every target will experience
175193 artificial serialization, causing slowdown equivalent to `task_duration *
176- num_targets `. This will be fixed soon.
194+ num_targets `. This will be addressed soon.
177195
178- * "Module Replacer" style modules are not supported. These rarely appear in
179- practice, and light web searches failed to reveal many examples of them.
196+ * The Ansible 2.7 `reboot
197+ <https://docs.ansible.com/ansible/latest/modules/reboot_module.html> `_ module
198+ may require a ``pre_reboot_delay `` on systemd hosts, as insufficient time
199+ exists for the reboot command's exit status to be reported before necessary
200+ processes are torn down.
201+
202+ * On OS X when a SSH password is specified and the default connection type of
203+ ``smart `` is used, Ansible may select the Paramiko plug-in rather than
204+ Mitogen. If you specify a password on OS X, ensure ``connection: ssh ``
205+ appears in your playbook, ``ansible.cfg ``, or as ``-c ssh `` on the
206+ command-line.
180207
181208* Ansible permits up to ``forks `` connections to be setup in parallel, whereas
182209 in Mitogen this is handled by a fixed-size thread pool. Up to 32 connections
183210 may be established in parallel by default, this can be modified by setting
184211 the ``MITOGEN_POOL_SIZE `` environment variable.
185212
186- * The ``ansible_python_interpreter `` variable is parsed using a restrictive
187- :mod: `shell-like <shlex> ` syntax, permitting values such as ``/usr/bin/env
188- FOO=bar python ``, which occur in practice. Ansible `documents this
189- <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#ansible-python-interpreter> `_
190- as an absolute path, however the implementation passes it unquoted through
191- the shell, permitting arbitrary code to be injected.
192-
193- * Performance does not scale linearly with target count. This will improve over
213+ * Performance does not scale cleanly with target count. This will improve over
194214 time.
195215
196- * SSH and ``become `` are treated distinctly when applying timeouts, and
197- timeouts apply up to the point when the new interpreter is ready to accept
198- messages. Ansible has two timeouts: ``ConnectTimeout `` for SSH, applying up
199- to when authentication completes, and a separate parallel timeout up to when
200- ``become `` authentication completes.
201-
202- For busy targets, Ansible may successfully execute a module where Mitogen
203- would fail without increasing the timeout. For sick targets, Ansible may hang
204- indefinitely after authentication without executing a command, for example
205- due to a stuck filesystem IO appearing in ``$HOME/.profile ``.
216+ * Performance on Python 3 is significantly worse than on Python 2. While this
217+ has not yet been investigated, at least some of the regression appears to be
218+ part of the core library, and should therefore be straightforward to fix as
219+ part of 0.2.x.
220+
221+ ..
222+ * SSH and ``become`` are treated distinctly when applying timeouts, and
223+ timeouts apply up to the point when the new interpreter is ready to accept
224+ messages. Ansible has two timeouts: ``ConnectTimeout`` for SSH, applying up
225+ to when authentication completes, and a separate parallel timeout up to
226+ when ``become`` authentication completes.
227+ For busy targets, Ansible may successfully execute a module where Mitogen
228+ would fail without increasing the timeout. For sick targets, Ansible may
229+ hang indefinitely after authentication without executing a command, for
230+ example due to a stuck filesystem IO appearing in ``$HOME/.profile``.
231+
232+ ..
233+ * "Module Replacer" style modules are not supported. These rarely appear in
234+ practice, and light web searches failed to reveal many examples of them.
235+
236+ ..
237+ * The ``ansible_python_interpreter`` variable is parsed using a restrictive
238+ :mod:`shell-like <shlex>` syntax, permitting values such as ``/usr/bin/env
239+ FOO=bar python``, which occur in practice. Ansible `documents this
240+ <https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html#ansible-python-interpreter>`_
241+ as an absolute path, however the implementation passes it unquoted through
242+ the shell, permitting arbitrary code to be injected.
243+
244+ ..
245+ * Configurations will break that rely on the `hashbang argument splitting
246+ behaviour <https://github.com/ansible/ansible/issues/15635>`_ of the
247+ ``ansible_python_interpreter`` setting, contrary to the Ansible
248+ documentation. This will be addressed in a future 0.2 release.
206249
207250
208251New Features & Notes
@@ -253,8 +296,8 @@ container.
253296 ``ansible_password ``, or ``ansible_become_pass `` inventory variables.
254297
255298 * Automatic tunnelling of SSH-dependent actions, such as the
256- ``synchronize `` module, is not yet supported. This will be added in the
257- 0.3 series .
299+ ``synchronize `` module, is not yet supported. This will be addressed in a
300+ future release .
258301
259302To enable connection delegation, set ``mitogen_via=<inventory name> `` on the
260303command line, or as host and group variables.
0 commit comments