Commit Graph

3980 Commits (master)
 

Author SHA1 Message Date
Alex Willmer 492bd2fa1f
Merge pull request #1396 from moreati/prepare-v0.3.36
Prepare v0.3.36
6 days ago
Alex Willmer 1d62a51810 Begin 0.3.37dev 6 days ago
Alex Willmer 4111224161 Prepare v0.3.36 6 days ago
Alex Willmer 4952c5635c
Merge pull request #1389 from mhartmay/possible-fix
mitogen: first_stage: Break the while loop in case of EOF
6 days ago
Marc Hartmayer 8807cd53be mitogen: first_stage: Break the while loop in case of EOF
The current implementation can cause an infinite loop, leading to a process that
hangs and consumes 100% CPU. This occurs because the EOF condition is not
handled properly, resulting in repeated select(...) and read(...) calls.

The fix is to properly handle the EOF condition and break out of the loop when
it occurs.

-SSH command size: 822
+SSH command size: 838
 Preamble (mitogen.core + econtext) size: 18226 (17.80KiB)

-mitogen.parent        99062  96.7KiB  51235 50.0KiB 51.7%  12936 12.6KiB 13.1%
+mitogen.parent        99240  96.9KiB  51244 50.0KiB 51.6%  12956 12.7KiB 13.1%

Fixes: https://github.com/mitogen-hq/mitogen/issues/1348
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
6 days ago
Marc Hartmayer f5195edf08 first_stage_test: Add more tests
+ test_non_blocking_stdin
 + test_blocking_stdin
 + test_premature_eof
 + test_broker_connect_eof_error
 + test_broker_connect_timeout_because_blocking_read(self):

Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
6 days ago
Marc Hartmayer f7ca6af62d first_stage_test: Open /dev/zero in binary mode
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
1 week ago
Marc Hartmayer 0ab5b425d8 first_stage_test: Refactor the test
Use testlib.subprocess instead of subprocess and make the test description a
docstring that can be used by the test runner.

Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
1 week ago
Marc Hartmayer 2d9e90acf9 parent_test: Refactor `wait_for_child`
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
1 week ago
Marc Hartmayer fdaf09c4d6 mitogen/parent: Fix typo
Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
1 week ago
Alex Willmer 2398df1159
Merge pull request #1393 from moreati/firststage-linecomments
mitogen: Line comments in first stage
2 weeks ago
Alex Willmer 606a21fb27 mitogen: Add first line comments to _first_stage() 2 weeks ago
Alex Willmer 733f4bca81 mitogen: Allow line comments in first stage, strip them. 2 weeks ago
Alex Willmer 9c71a158e7
Merge pull request #1390 from mhartmay/fix-hanging-tests
testlib: Fix hanging tests
2 weeks ago
Marc Hartmayer 0a559ec8d8 testlib: Fix hanging tests
When I run

$ MITOGEN_LOG_LEVEL=debug SKIP_ANSIBLE=1 ./run_tests -v -k first_stage_test.CommandLineTest

in a interactive Shell (with a tty), it ends in a hanging process as the
`have_python2` and `have_python3` ends up ends up in an interactive Python
shell. Therefore check the Python version instead.

Signed-off-by: Marc Hartmayer <mhartmay@linux.ibm.com>
2 weeks ago
Alex Willmer 7be79d05e9
Merge pull request #1013 from moreati/issue1011-blacklist-msg
mitogen: Clarify blacklisted import error message
3 weeks ago
Alex Willmer ccaaf4b7fe mitogen: Clarify blacklisted ModuleNotFoundError message
Previous phrasing was misleading - it implied a given module was explicitly on
the blacklist, even if it was due to a restrictive whitelist and the blacklist
was empty.

Arguably the blacklist/whitelist semantics are themselves misleading. A
redesign is tempting.
3 weeks ago
Alex Willmer 073fc48afc tests: Remove BlacklistTest stubs (covered by ImporterBlacklistTest) 3 weeks ago
Alex Willmer e0de4d3b8e
Merge pull request #1386 from moreati/issue1237
Tidy ups
3 weeks ago
Alex Willmer 64a581b2ac tests: Add Ubuntu 16.04 to image_prep inventory
I missed this when committing what built 2025.02 iamges
3 weeks ago
Alex Willmer 823d1d8b47 docs: Document Ansible 13 (ansible-core 2.20) support 3 weeks ago
Alex Willmer 9b46882478 ansible_mitogen: Remove a use of ansible.module_utils.six 3 weeks ago
Alex Willmer b105877f4d mitogen: Re-declare Python 2.4 compatibility
With CentOS 5 now covered by the Mitogen unit tests I'm content to
reverse/clarify 104865e866
3 weeks ago
Alex Willmer fb9efb24ca
Merge pull request #1383 from moreati/prepare-v0.3.35
Prepare v0.3.35
3 weeks ago
Alex Willmer 9ce6a43329 Begin 0.3.36dev 3 weeks ago
Alex Willmer 4af6a75278 Prepare v0.3.35 3 weeks ago
Alex Willmer be3d496110
Merge pull request #1382 from moreati/issue1225-interpreter-python-fallback
ansible_mitogen: Use INTERPRETER_PYTHON_FALLBACK as python candidates
3 weeks ago
Alex Willmer 699a8ebfb5 ansible_mitogen: Use INTERPRETER_PYTHON_FALLBACK as python candidates
This shouldn't change the interpreter ultimately chosen by Ansible. It should
only improve the hit rate of performing interpreter discovery, particular in
cases where only pythonX.Y is present on the target.

Interpreter discovery may take longer or shorter, depending on the Ansible
version and the interpreters present on the target.
4 weeks ago
Alex Willmer abb77e77e1
Merge pull request #1374 from moreati/prepare-v0.3.34
Prepare v0.3.34
4 weeks ago
Alex Willmer 19938ec05a Begin 0.3.35.dev 4 weeks ago
Alex Willmer 8e6a93dd0f Prepare v0.3.34 4 weeks ago
Alex Willmer 682faf85fc
Merge pull request #1126 from moreati/issue1124
Ansible: Avoid sending `__main__` and its dependencies from controller to targets
4 weeks ago
Alex Willmer 83b6cdb616 ansible_mitogen: Speedup startup by not sending `__main__`
On my laptop his reduces the time to execute `ansible -mping ...` by approx
300 ms with `strategy=mitogen_linear`.

Until this commit Mitogen was unnecessarily sending large chunks of Ansible
from the controller to targets, due to `__main__` being identified as a
related module of `ansible.module_utils.basic`, and resolving to something
within `ansible.cli...`.

On Ansible target hosts executing any Ansible Module `__main__` is imported by
`ansible.module_utils.basic` as part of Ansible's module delivery mechanism.
When `mitogen.master.ModuleResponder` (on the controller) processes the
request for `ansible.module_utils.basic` from the target, it scans
`ansible.module_utils.basic` for related imports and finds `__main__`. However
`__main__` on the controller is not the same module as `__main__` on the
target. On the controller it is a module in `ansible.cli...` that implements
one of the ansible commands (e.g. `ansible`, `ansible-playbook`).
4 weeks ago
Alex Willmer f191f050bf mitogen: Log why a module is sent or not sent by ModuleResponder
This should not change the logic
4 weeks ago
Alex Willmer f556ec12b1
Merge pull request #1373 from moreati/issue1118-new-os-releases
CI: Expand test coverage of OS releases
4 weeks ago
Alex Willmer a208daa461 CI: Add OS release coverage: Ubuntu 22.04, Ubuntu 24.04 4 weeks ago
Alex Willmer 14e8334705 CI: Add OS release coverage: Debian 12 4 weeks ago
Alex Willmer 1fe55f1c67 CI: Add OS release coverage: CentOS 5
Only the Mitogen unit tests will run against CentOS 5, providing atleast some
Python 2.4test coverage. There is no version of Ansible that supports Python
2.4 that is also supported by Mitogen 0.3.

The SSH key exchange argument is to persuade newer SSH clients to talk with
such an old SSH server.

See https://www.openssh.org/legacy.html
4 weeks ago
Alex Willmer e0103eb66c CI: Add OS release coverage: AlmaLinux 9 4 weeks ago
Alex Willmer e044893a88 tests: Variabalize virtualenv creation in isssue 152 regression test
Prep for AlamaLinux 9 introduction
4 weeks ago
Alex Willmer 1cbd1777bc tests: Check Mitogen+Ansible discovered interpreter fresh Ansible result
Previously this test used a manually compiled list of results, which is
fragile and an ongoing maintenance burden. New method should 'just work' and
be more transparent.

This technique might be more widely applicable in the test suite.
4 weeks ago
Alex Willmer 0bafbd501c tests: Remove unused distros_* Tox factors 4 weeks ago
Alex Willmer f0a83168bf
Merge pull request #1370 from moreati/ci-macos15
CI: bump macOS 13 runner -> macOS 15
4 weeks ago
Alex Willmer 15b2619fb2 CI: Bump deprecated macOS 13 runner to macOS 15 4 weeks ago
Alex Willmer 5c9abeda94
Merge pull request #1372 from moreati/issue1118-ci-use-2025.02-images
CI: Use 2025.02 test images
4 weeks ago
Alex Willmer 006d497c25 CI: Show details of failed ci_lib.run_batches() commands 4 weeks ago
Alex Willmer 9609437262 CI: Use 2025.02 test images, keeping same OS releases
centos8-test:2025.02 no longer has a /usr/bin/python installed, so use
centos8-py3 target which sets `ansible_python_interpreter=/usr/bin/python3` in
the templated inventory.

Ansible <= 9 (ansible-core <= 2.6) now discover the interpreter as
/usr/bin/python3 on debian11-test:2025.02, as opposed to
/usr/bin/python3.9 on debian11-test:2021. I'm don't know the exact
cause. From manual tests the change in observed behaviour appears to be common to
vanilla Ansible (strategy=linear) and Mitogen flavour
(strategy=mitogen_linear).

```console
(ans9) ➜  mitogen git:(4efb7158) ✗ ANSIBLE_STRATEGY=mitogen_linear ANSIBLE_STRATEGY_PLUGINS=ansible_mitogen/plugins/strategy ans9/bin/ansible -e ansible_python_interpreter=auto -mping d11.lan
d11.lan | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
(ans9) ➜  mitogen git:(4efb7158) ✗ ans9/bin/ansible -e ansible_python_interpreter=auto -mping d11.lan
d11.lan | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
```

Update some tests which assume `/usr/bin/python` exists or that `env python`
will resolve successfully.
4 weeks ago
Alex Willmer 7eabcc61c1 tests: Only test doas on targets with doas binary installed 4 weeks ago
Alex Willmer 017de4c8e1
Merge pull request #1254 from moreati/issue1118-update-containers
CI: Build newer test images
4 weeks ago
Alex Willmer 7996a03a37 ci: Bootstrap Debian like containers with python-apt or python3-apt
The Ansible apt module requires it
1 month ago