From a5e45f22c62b4a23860b1136b41994712bc35753 Mon Sep 17 00:00:00 2001 From: waewoo Date: Sun, 20 Nov 2022 19:20:48 +0100 Subject: [PATCH] Added idempotency on global versioning --- filter_plugins/asdf_plugin.py | 11 +++++++++++ tasks/plugins.yml | 19 +++++++++++++++++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 filter_plugins/asdf_plugin.py diff --git a/filter_plugins/asdf_plugin.py b/filter_plugins/asdf_plugin.py new file mode 100644 index 0000000..d616f38 --- /dev/null +++ b/filter_plugins/asdf_plugin.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +def get_asdf_global_version(asdf_plugin_item): + return asdf_plugin_item['global'] or asdf_plugin_item['versions'] + #| difference(asdf_plugin_item.delete_versions|default([])) | sort | first) + +class FilterModule(object): + + def filters(self): + return { + 'get_asdf_global_version': get_asdf_global_version + } diff --git a/tasks/plugins.yml b/tasks/plugins.yml index ea768db..9d078f7 100644 --- a/tasks/plugins.yml +++ b/tasks/plugins.yml @@ -75,10 +75,25 @@ become: True become_user: "{{ asdf_user }}" -- name: "set global app versions" - command: "bash -lc 'source /etc/profile.d/asdf.sh && asdf global {{ item.name }} {{ item.global | default(item.versions | difference(item.delete_versions|default([])) | sort | first) }}'" +- name: "check global app versions" + shell: | + source /etc/profile.d/asdf.sh + cat {{ ansible_env.ASDF_DEFAULT_TOOL_VERSIONS_FILENAME }} | grep "^{{ item.name }}\s*{{ item | get_asdf_global_version }}$" | tr -s "[:blank:]" _ + args: + executable: /bin/bash when: item.versions is defined with_items: "{{ asdf_plugins }}" + register: asdf_global + changed_when: false + become: True + become_user: "{{ asdf_user }}" + +- name: "set missing global app versions" + command: "bash -lc 'source /etc/profile.d/asdf.sh && asdf global {{ item.name }} {{ item | get_asdf_global_version }}'" + when: > + item.versions is defined + and '_'.join((item.name, item | get_asdf_global_version | string)) not in (asdf_global.results|map(attribute="stdout_lines") | list | flatten) + with_items: "{{ asdf_plugins }}" become: True become_user: "{{ asdf_user }}"