Commit Graph

611 Commits (0a908d76dad880e78336c228d37f5b6626cf8290)

Author SHA1 Message Date
David Wilson 6940b23013 issue #150: ansible: mark worker/child sock as CLOEXEC. 7 years ago
David Wilson 7a394dc73e ansible: allow establishment of duplicate SSH connections 7 years ago
David Wilson 86ede62241 issue #150: introduce separate connection multiplexer process
This is a work in progress.
7 years ago
David Wilson 4691ce0b95 issue #150: ansible: add basic Docker support. 7 years ago
David Wilson cd455e8c58 ansible: minor tidy up 7 years ago
David Wilson 3584084be6 issue #140: explicit Broker management, and guard against crap plug-ins.
Implement Connection.__del__, which is almost certainly going to trigger
more bugs down the line, because the state of the Connection instance is
not guranteed during __del__. Meanwhile, it is temporarily needed for
deployed-today Ansibles that have a buggy synchronize action that does
not call Connection.close().

A better approach to this would be to virtualize the guts of Connection,
and move its management to one central place where we can guarantee
resource destruction happens reliably, but that may entail another
Ansible monkey-patch to give us such a reliable hook.
7 years ago
David Wilson 88c198ea05 issue #141: copy Ansible's connect_timeout for sudo too. 7 years ago
Alex Willmer 1c20c61605 docs: Convert all URLs that support https://
Excluded: graphml XML namespaces, links to e.g. Fabric homepage

Fixes #128
7 years ago
David Wilson 7d12154a92 ansible: fix formatting 7 years ago
David Wilson 12c6e574fb ansible: disable host key checking for now
Need a better story (perhaps a callback function?) for handling this.
7 years ago
David Wilson 037bed895b issue #110: _transfer_data() must handle dicts and Unicode(!) 7 years ago
David Wilson e36c1763bd issue #110: split process state out of strategy state
The strategy is reconstructed for every playbook that is included or
specified on the command line, therefore we can't store the global
Router there without losing all our SSH connections across playbooks.
7 years ago
David Wilson d34025fae9 ansible: _transfer_data() must return remote_path.
Fixes DebOps bug.
7 years ago
David Wilson a9db27d424 ansible: instrument every ActionMixin override. 7 years ago
David Wilson 9b7991cd45 issue #118: log exceptions for emulated commands, fix AttributeError in helpers.py
Turns out Ansible can't be trusted to actually check the result
dictionary everywhere it expects one, so put the real exception text
into -vvv output too.
7 years ago
David Wilson 59dab72e29 ansible: log ansible_mitogen.* to -v too. 7 years ago
David Wilson 6bd4c5ead5 docs: Ansible logging update (#111) 7 years ago
David Wilson 016d47aa91 Log and track PIDs everywhere for Ansible. 7 years ago
David Wilson b63af1de85 ansible: implement _transfer_data for <2.4 template action 7 years ago
David Wilson 7ab1af043e ansible: redirect logging into display 'framework'. closes #111 7 years ago
David Wilson b527628b17 issue #109: do exactly what Ansible does
Could it be that some empty dict magically gets populated from somewhere
invisible?
7 years ago
David Wilson 485e489aa2 ansible: correct sys.path fixup. 7 years ago
David Wilson 3ddbf1a503 ansible: basic support for ssh_args 7 years ago
David Wilson da00437f1e ansible: Support ansible_ssh_private_key_file 7 years ago
David Wilson a87b665099 ansible: limited support for become_flags, more docs. 7 years ago
David Wilson e0382ab2db ansible: teach ActionModule to disappear for non-Mitogen Connections
Closes #103.
7 years ago
David Wilson bde6f888a0 ansible: restructure package to avoid yet more madness
Ansible's PluginLoader makes up bullshit when it imports a module
(mostly because it has to make up something), therefore we ended up with
duplicate copies of ansible_mitogen loaded: one under
ansible.plugins.*.mitogen, and one under the canonical namespace.

Which broke isinstance().
7 years ago
David Wilson 734fb75203 ansible: mixins.py docstrings. 7 years ago
David Wilson 7080751f13 ansible: support environment: too. 7 years ago
David Wilson 7cf2edc3a8 ansible: Support many more common playbook variables. 7 years ago
David Wilson eca7805cba ansible: one more cast() call.
Need a more general solution to littering the code with this crap.
7 years ago
David Wilson 3183dd4147 ansible: initial support for async jobs
Running in a thread to begin with, but this must change.
7 years ago
David Wilson f6d87faf37 tests: import ansible_helpers_test. 7 years ago
David Wilson 207159cf1a ansible: fix bug in apply_mode_spec(). 7 years ago
David Wilson ff617824a1 ansible: fix some flake8 errors
* Unused imports
* Undefined names in helpers.py
* Copyright header wrapping
7 years ago
David Wilson 76e739a0ba ansible: inverted sense of execute paramter 7 years ago
David Wilson 1b090a6c0a ansible: fix become:true with sudo:true 7 years ago
David Wilson 83f2862431 ansible: _remote_chmod() / _fixup_perms2() can be called sometimes.
It's used at least by the copy module, even though the result is still
mostly a no-op. _remote_chmod() doesn't accept octal mode, it accepts
symbolic mode. So implement a symbolic parser in helpers.py.
7 years ago
David Wilson f3315fc172 ansible: better emulate _low_level_execute_command()
Still needs a ton of work to emulate argument handling, shell selection,
and output emulation in every case. Unsurprisingly, Ansible documents
none of this.
7 years ago
David Wilson cccfebec74 ansible: correct temp file cleanup for template action. 7 years ago
David Wilson 5dc2cc0726 ansible: don't enable_debug_logging() for sudo 7 years ago
David Wilson b221eaaa10 ansible: log call timings 7 years ago
David Wilson 1e9fd63343 ansible: Ansible 2.4 compatibility. 7 years ago
David Wilson 03221ee9ab ansible: gracefully shut down the service thread at exit. 7 years ago
David Wilson 91116810a1 ansible: delete utils.py and promote cast() to mitogen.utils 7 years ago
David Wilson a075cc0242 ansible: document Strategy's implementation 7 years ago
David Wilson 18eaf14dca ansible: migrate logging variables into utils. 7 years ago
David Wilson 5d8cb0f5fb ansible: document the connection class. 7 years ago
David Wilson b7f563a6f0 ansible: remove old action subdirectory. 7 years ago
David Wilson 5f45c2d49a ansible: clean up, structure and document strategy module. 7 years ago
David Wilson 84e9d42e71 ansible: handle local connections and synchronize module too. 7 years ago
David Wilson 74468abf0a ansible: fix syntax error 7 years ago
David Wilson 6e7bb4fd13 ansible: support local connections too 7 years ago
David Wilson 57894b18e0 ansible: support class_only=True in wrapped loader 7 years ago
David Wilson 54a3777ff3 ansible: blacklist everything except our own namespaces
Farewell, pointless roundtrips, we hardly knew ye.
7 years ago
David Wilson 331f77ee2b ansible: generalized action module wrapping. 7 years ago
David Wilson d13ab9a022 ansible: remove hard-wired UNIX socket path. 7 years ago
David Wilson e6a107c5aa core: replace Queue with Latch
On Python 2.x, operations on pthread objects with a timeout set actually
cause internal polling. When polling fails to yield a positive result,
it quickly backs off to a 50ms loop, which results in a huge amount of
latency throughout.

Instead, give up using Queue.Queue.get(timeout=...) and replace it with
the UNIX self-pipe trick. Knocks another 45% off my.yml in the Ansible
examples directory against a local VM.

This has the potential to burn a *lot* of file descriptors, but hell,
it's not the 1940s any more, RAM is all but infinite. I can live with
that.

This gets things down to around 75ms per playbook step, still hunting
for additional sources of latency.
7 years ago
David Wilson 6059e0c1db ansible: support become:True and become_user 7 years ago
David Wilson ed09076bdd ansible: automatically configure connection plug-in. 7 years ago
David Wilson a35fcf44cc ansible: restructure to avoid intermediate imports 7 years ago