0

I have an Ansible task where I set the version of Ruby used globally on my system.

- name: Set Ruby global version
  shell: /usr/local/bin/rbenv global 2.2.1

The problem is that this task always has the status of changed. I want it to show changed only if it actually has changed, otherwise ok. This is the best solution I could come up with:

- name: Get current global version Ruby
  shell: /usr/local/bin/rbenv global"
  register: current_ruby_version
  changed_when: False

- name: Set Ruby global version
  shell: /usr/local/bin/rbenv global 2.2.1
  changed_when: current_ruby_version.stdout != 2.2.1

This is going to be a pattern that I'm going to use a lot (check existing value, set value, see if it changed) so this is a bit onerous.

Is there a better way to do this?

Dean
  • 143
  • 1
  • 1
  • 6

1 Answers1

4

You could combine it into one task:

- name: Set global version Ruby
  shell: /usr/local/bin/rbenv global; /usr/local/bin/rbenv global 2.2.1
  register: old_ruby_version
  changed_when: old_ruby_version.stdout != 2.2.1
wurtel
  • 3,864
  • 12
  • 15