From 60d64251f8e20e5e6b451ce59466d6a9922be8b8 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Sat, 14 Jul 2012 19:49:42 -0400 Subject: [PATCH] Allow gather_facts: False in a playbook as a way of disabling the fact step if you know you aren't going to need it. --- CHANGELOG.md | 1 + lib/ansible/playbook/__init__.py | 9 +++++--- lib/ansible/playbook/play.py | 36 +++++++++++++++++--------------- 3 files changed, 26 insertions(+), 20 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 837ad67516..0df92c1d6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ Ansible Changes By Release * error reporting if with_items value is unbound * with_items no longer creates lots of tasks, creates one task that makes multiple calls * can use host_specific facts inside with_items (see above) +* at the top level of a playbook, set 'gather_facts: False' to skip fact gathering 0.5 "Amsterdam" ------- July 04, 2012 diff --git a/lib/ansible/playbook/__init__.py b/lib/ansible/playbook/__init__.py index 52dadf9c0c..85ef633c87 100644 --- a/lib/ansible/playbook/__init__.py +++ b/lib/ansible/playbook/__init__.py @@ -273,14 +273,17 @@ class PlayBook(object): def _do_setup_step(self, play): ''' get facts from the remote system ''' + + host_list = [ h for h in self.inventory.list_hosts(play.hosts) + if not (h in self.stats.failures or h in self.stats.dark) ] + + if not play.gather_facts: + return {} setup_args = {} self.callbacks.on_setup() - host_list = [ h for h in self.inventory.list_hosts(play.hosts) - if not (h in self.stats.failures or h in self.stats.dark) ] - self.inventory.restrict_to(host_list) # push any variables down to the system diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index 09462ab5f3..d96473e8bf 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -29,7 +29,7 @@ class Play(object): 'hosts', 'name', 'vars', 'vars_prompt', 'vars_files', 'handlers', 'remote_user', 'remote_port', 'sudo', 'sudo_user', 'transport', 'playbook', - 'tags', '_ds', '_handlers', '_tasks' + 'tags', 'gather_facts', '_ds', '_handlers', '_tasks' ] # ************************************************* @@ -47,22 +47,24 @@ class Play(object): hosts = ';'.join(hosts) hosts = utils.template(hosts, playbook.extra_vars, {}) - self._ds = ds - self.playbook = playbook - self.hosts = hosts - self.name = ds.get('name', self.hosts) - self.vars = ds.get('vars', {}) - self.vars_files = ds.get('vars_files', []) - self.vars_prompt = ds.get('vars_prompt', {}) - self.vars = self._get_vars(self.playbook.basedir) - self._tasks = ds.get('tasks', []) - self._handlers = ds.get('handlers', []) - self.remote_user = ds.get('user', self.playbook.remote_user) - self.remote_port = ds.get('port', self.playbook.remote_port) - self.sudo = ds.get('sudo', self.playbook.sudo) - self.sudo_user = ds.get('sudo_user', self.playbook.sudo_user) - self.transport = ds.get('connection', self.playbook.transport) - self.tags = ds.get('tags', None) + self._ds = ds + self.playbook = playbook + self.hosts = hosts + self.name = ds.get('name', self.hosts) + self.vars = ds.get('vars', {}) + self.vars_files = ds.get('vars_files', []) + self.vars_prompt = ds.get('vars_prompt', {}) + self.vars = self._get_vars(self.playbook.basedir) + self._tasks = ds.get('tasks', []) + self._handlers = ds.get('handlers', []) + self.remote_user = ds.get('user', self.playbook.remote_user) + self.remote_port = ds.get('port', self.playbook.remote_port) + self.sudo = ds.get('sudo', self.playbook.sudo) + self.sudo_user = ds.get('sudo_user', self.playbook.sudo_user) + self.transport = ds.get('connection', self.playbook.transport) + self.tags = ds.get('tags', None) + self.gather_facts = ds.get('gather_facts', True) + print "self.gather_facts: %s" % self.gather_facts self._update_vars_files_for_host(None)