From 8e20ed3714b7a43279ecfd38a7812b28e1533f03 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Tue, 6 Mar 2012 21:13:50 -0500 Subject: [PATCH] src= parameters for template and copy operations can be relative to the playbook (for /usr/bin/ansible-playbook) or current directory (for /usr/bin/ansible) --- examples/playbook.yml | 4 ++-- lib/ansible/playbook.py | 4 +++- lib/ansible/runner.py | 11 ++++++++--- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/examples/playbook.yml b/examples/playbook.yml index 9fe7cefdd9..2f40598e2d 100644 --- a/examples/playbook.yml +++ b/examples/playbook.yml @@ -6,8 +6,8 @@ max_clients: 200 tasks: - include: base.yml favcolor=blue - - name: write the apache config file using vars set above - action: template src=/srv/httpd.j2 dest=/etc/httpd.conf + - name: write the foo config file using vars set above + action: template src=foo.j2 dest=/etc/some_random_foo.conf notify: - restart apache - name: ensure apache is running diff --git a/lib/ansible/playbook.py b/lib/ansible/playbook.py index 57966ffda3..8e1888a670 100755 --- a/lib/ansible/playbook.py +++ b/lib/ansible/playbook.py @@ -81,6 +81,7 @@ class PlayBook(object): # playbook file can be passed in as a path or # as file contents (to support API usage) + self.basedir = os.path.dirname(playbook) self.playbook = self._parse_playbook(playbook) def _include_tasks(self, play, task, dirname, new_tasks): @@ -178,7 +179,8 @@ class PlayBook(object): module_path=self.module_path, timeout=self.timeout, remote_user=remote_user, - setup_cache=SETUP_CACHE + setup_cache=SETUP_CACHE, + basedir=self.basedir ).run() def _run_task(self, pattern=None, task=None, host_list=None, diff --git a/lib/ansible/runner.py b/lib/ansible/runner.py index 143822e12d..f0b6c596c8 100755 --- a/lib/ansible/runner.py +++ b/lib/ansible/runner.py @@ -32,7 +32,8 @@ import Queue import random import paramiko import jinja2 - +from ansible.utils import * + ################################################ def noop(*args, **kwargs): @@ -63,6 +64,7 @@ class Runner(object): remote_user=C.DEFAULT_REMOTE_USER, remote_pass=C.DEFAULT_REMOTE_PASS, background=0, + basedir=None, setup_cache={}, verbose=False): @@ -94,6 +96,9 @@ class Runner(object): self.remote_pass = remote_pass self.background = background + if basedir is None: + basedir = os.getcwd() + self.basedir = basedir # hosts in each group name in the inventory file self._tmp_paths = {} @@ -287,7 +292,7 @@ class Runner(object): # transfer the file to a remote tmp location tmp_path = tmp tmp_src = tmp_path + source.split('/')[-1] - self._transfer_file(conn, source, tmp_src) + self._transfer_file(conn, path_dwim(self.basedir, source), tmp_src) # install the copy module self.module_name = 'copy' @@ -318,7 +323,7 @@ class Runner(object): tpath = tmp tempname = os.path.split(source)[-1] temppath = tpath + tempname - self._transfer_file(conn, source, temppath) + self._transfer_file(conn, path_dwim(self.basedir, source), temppath) # install the template module template_module = self._transfer_module(conn, tmp, 'template')