ansible: hijack lxd connections too.

pull/220/head
David Wilson 7 years ago
parent 131bc768c7
commit b1563cd8c1

@ -117,6 +117,7 @@ CONNECTION_METHOD = {
'docker': _connect_docker, 'docker': _connect_docker,
'local': _connect_local, 'local': _connect_local,
'lxc': _connect_lxc, 'lxc': _connect_lxc,
'lxd': _connect_lxc,
'ssh': _connect_ssh, 'ssh': _connect_ssh,
'sudo': _connect_sudo, 'sudo': _connect_sudo,
} }
@ -510,3 +511,7 @@ class DockerConnection(Connection):
class LxcConnection(Connection): class LxcConnection(Connection):
transport = 'lxc' transport = 'lxc'
class LxdConnection(Connection):
transport = 'lxd'

@ -0,0 +1,56 @@
# Copyright 2017, David Wilson
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# 1. Redistributions of source code must retain the above copyright notice,
# this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above copyright notice,
# this list of conditions and the following disclaimer in the documentation
# and/or other materials provided with the distribution.
#
# 3. Neither the name of the copyright holder nor the names of its contributors
# may be used to endorse or promote products derived from this software without
# specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
import os.path
import sys
#
# This is not the real Connection implementation module, it simply exists as a
# proxy to the real module, which is loaded using Python's regular import
# mechanism, to prevent Ansible's PluginLoader from making up a fake name that
# results in ansible_mitogen plugin modules being loaded twice: once by
# PluginLoader with a name like "ansible.plugins.connection.mitogen", which is
# stuffed into sys.modules even though attempting to import it will trigger an
# ImportError, and once under its canonical name, "ansible_mitogen.connection".
#
# Therefore we have a proxy module that imports it under the real name, and
# sets up the duff PluginLoader-imported module to just contain objects from
# the real module, so duplicate types don't exist in memory, and things like
# debuggers and isinstance() work predictably.
#
try:
import ansible_mitogen
except ImportError:
base_dir = os.path.dirname(__file__)
sys.path.insert(0, os.path.abspath(os.path.join(base_dir, '../../..')))
del base_dir
from ansible_mitogen.connection import LxdConnection as Connection
del os
del sys

@ -68,7 +68,7 @@ def wrap_connection_loader__get(name, play_context, new_stdin, **kwargs):
'mitogen' connection type, passing the original transport name into it as 'mitogen' connection type, passing the original transport name into it as
an argument, so that it can emulate the original type. an argument, so that it can emulate the original type.
""" """
if name in ('ssh', 'local', 'docker', 'lxc'): if name in ('ssh', 'local', 'docker', 'lxc', 'lxd'):
name = 'mitogen_' + name name = 'mitogen_' + name
return connection_loader__get(name, play_context, new_stdin, **kwargs) return connection_loader__get(name, play_context, new_stdin, **kwargs)

@ -476,8 +476,13 @@ Docker support is fairly new, expect increased surprises for now.
LXC LXC
~~~ ~~~
LXC support is fairly new, expect increased surprises for now. The LXC support is fairly new, expect increased surprises for now. Both ``lxc`` and
``lxc-attach`` command is required to be available on the host machine. ``lxd`` connection plug-ins are hijacked, however the resulting implementation
always uses the ``lxc-attach`` command line tool rather than th LXC Python
bindings.
Consequently the ``lxc-attach`` command is required to be available on the host
machine.
* ``ansible_host``: Name of LXC container. * ``ansible_host``: Name of LXC container.

Loading…
Cancel
Save