Pre-Conditions for a role to execute tasks

162 views
Skip to first unread message

Rui Yang

unread,
Apr 9, 2014, 7:16:30 PM4/9/14
to ansible...@googlegroups.com
Hi,

Suppose I have a role called Ruby. I will 
1. install build tools
2. download ruby source
3. compile
4. install

Because it takes long time to do all these tings and I don't want to it it the expected Ruby already installed.

How could I do it?

I could do it using the "when" condition on every step. like the following:

- name: check if ruby installed
  shell: ls /opt/rubies
  register: ruby_installed

- name: install dependencies
  apt: name =....
  when: ruby_installed.stdout.find(ruby_full_version) == -1

Wonder if there is any better solution? like a precondition for all the tasks in a role?

Also I found it would be convenient if we have module like Java, Ruby to install various version of the packages. Like Chef they have Java cookbook.

Any suggestion is really appreciated.

Cheers,
Rui

Michael DeHaan

unread,
Apr 15, 2014, 4:49:30 PM4/15/14
to ansible...@googlegroups.com
If you ever want to skip a large number of tasks, usage of "group_by" can easily do this.

- hosts: all
  tasks:
     - stat: path=/path/to/ruby
       register: ruby
     - group_by: key=ruby-{{ ruby.stat.exists }}

- hosts: ruby-False
  tasks:
     - ...
  # or roles, etc

This is untested but that's the general pattern.

Also notice stat is a bit cleaner than "shell" above.




--
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 ansible-proje...@googlegroups.com.
To post to this group, send email to ansible...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/ansible-project/8023f82f-a70e-4c74-935c-a3bef8b5abf8%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply all
Reply to author
Forward
0 new messages