Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor rubies install and remove tasks #219

Merged
merged 5 commits into from
Aug 18, 2020
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
* Fix boolean values when checking array (#207)
* Fix regression forbidding installation of rubies (#209, fixed via #207)
* Fix conditional logic for detecting and removing versions of Ruby (#212)
* Report when Ruby is removed and don't ignore when version listing fails (#212)
* Refactor rubies install and remove tasks, allow rvm to handle idempotency around this (#219)

#### Changes

Expand Down
30 changes: 8 additions & 22 deletions tasks/rubies.yml
Original file line number Diff line number Diff line change
@@ -1,17 +1,11 @@
---

- name: Detect if rubies are installed
command: '{{ rvm1_rvm }} {{ item }} do true'
changed_when: False
failed_when: False
register: detect_rubies
with_items: '{{ rvm1_rubies }}'
when: rvm1_rubies is defined and rvm1_rubies | length > 0
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we can generally avoid checking if variables are defined in specific cases where the variable is defined in defaults/main.yml. Just my thoughts. If code owners agree, I will probably open a separate PR to clean this up throughout the other tasks. Othewise, I'm happy to continue always checking if a variable is defined before using it.


- name: Install rubies
command: '{{ rvm1_rvm }} install {{ item.item }} {{ rvm1_ruby_install_flags }}'
when: rvm1_rubies is defined and rvm1_rubies | length > 0 and item.rc|default(0) != 0
with_items: '{{ detect_rubies.results }}'
command: '{{ rvm1_rvm }} install {{ item }} {{ rvm1_ruby_install_flags }}'
danochoa marked this conversation as resolved.
Show resolved Hide resolved
when: rvm1_rubies is defined and rvm1_rubies | length > 0
with_items: '{{ rvm1_rubies }}'
register: rvm_install_rubies
changed_when: "'#importing gemset' in rvm_install_rubies.stdout"

- name: Detect default ruby version
command: '{{ rvm1_rvm }} alias list default'
Expand Down Expand Up @@ -62,16 +56,8 @@
when: not '--user-install' in rvm1_install_flags and rvm1_bundler_install
with_items: '{{ rvm1_symlink_bundler_binaries }}'

- name: List installed versions of Ruby (for deletion)
command: '{{ rvm1_rvm }} list strings'
changed_when: False
register: rvm1_list_installed_rubies
when: rvm1_delete_ruby is defined and rvm1_delete_ruby != ''

- name: Delete ruby if relevant
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With rvm1_delete_ruby as a string (single ruby), I think we can leave this alone for now. If this becomes a list we can use the difference from rvm_list_strings similar to the install task.

command: '{{ rvm1_rvm }} remove {{ rvm1_delete_ruby }}'
register: rvm_delete_command_result
changed_when: "'#removing' in rvm_delete_command_result.stdout"
when:
- rvm1_delete_ruby is defined and rvm1_delete_ruby != ''
- rvm1_delete_ruby in rvm1_list_installed_rubies.stdout.splitlines()
register: rvm_delete_command
changed_when: "'#removing' in rvm_delete_command.stdout"
when: rvm1_delete_ruby is defined and rvm1_delete_ruby