On 07.08.2014 17:47, Alberto Berti wrote:
Hi,

sorry for the confusing precendence of my latter message, but seems that
this  message had some problems with gmane, so i'm resending it....
"Tomasz" == Tomasz Kontusz <[email protected]> writes:
     Tomasz> On 04.08.2014 12:14, Filias Heidt wrote:
     >> I thought the more generic "nesting" would be a good thing, because
     >> the next guy might want to control Docker instances or Containers on
     >> a remote host without them having a public IP. Maybe I'll try to
     >> write a connection plugin.
     Tomasz> The way connection plugins work, it's not going to be possible to 
nest
     Tomasz> existing ones.
     Tomasz> But what you can do is, create a new API for "connection plugin
     Tomasz> layers" that can be put on top of an existing "base" connection
     Tomasz> plugin.
     Tomasz> Something like:

     Tomasz> class ConnectionLayer(object):
     Tomasz>     def __init__(self, target_address):
     Tomasz>         """target_address is a part of ansible_ssh_host for this
     Tomasz> plugin, like jail's path"""

     Tomasz>     def wrap_command(self, command):
     Tomasz>         """Wraps the command in chroot/jail/etc."""

     Tomasz>     def unwrap_result(self, rc, stdout, stderr):
     Tomasz>         """Takes whatever the wrapped command returned after being 
run
     Tomasz> by the base connection plugin,
     Tomasz>         and returns a new tuple of (rc, stdout, stderr)"""

     Tomasz>     def wrap_path(self, path):
     Tomasz>         """Takes a path inside container/chroot/jail and 
translates it
     Tomasz> into host path."""

any update on this? I would like to use nsenter [1]_ to run commands
inside the container (how to transfer files is a detail i have yet to
analyze) to work on docker containers either locally or on a remote
host, and i would really like to contribute to and use a layer like
this. Unfortunately i'm quite new to ansible and not all the details
involving connections are clear to me.
I'll see what I can do, but I wouldn't hold my breath about opening the one I wrote at work.
And hey, it's always a good time to rewrite something :-)

Tomasz> I would actually like to see something like this, as I've written a
     Tomasz> OpenVZ-over-SSH connection plugin at work (and I can already give 
you
     Tomasz> a hint: don't try to put host address anywhere but 
ansible_ssh_host,
     Tomasz> this variable gets special treatment. I've tried to have separate
     Tomasz> ansible_vzenter_ctid, and in the end had to rewrite that part).

Nice! openvz is the other virtualization system i use :-)

So, where you store the ctid? in to so other host related variable? Can
you say more about having something like a variable ansible_vzenter_ctid
is not feasible?
I'm putting it in ansible_ssh_host like this:
some_container ansible_connection=vzenter ansible_ssh_host=<SSH host>|<CTID>

Using variable other than ansible_ssh_host is not feasible, as they are not provided to connection plugins. You can extract them from runner (as connection plugins do get access to runner), but you can't support the delegate_to: '{{ item }}' pattern this way (as you don't get access to loop items).
Cheers,

Alberto


--
You received this message because you are subscribed to the Google Groups "Ansible 
Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/53E3DA41.7050904%40gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to