diff --git a/roles/rke2_common/tasks/calculate_rke2_version.yml b/roles/rke2_common/tasks/calculate_rke2_version.yml new file mode 100644 index 00000000..4b8720bb --- /dev/null +++ b/roles/rke2_common/tasks/calculate_rke2_version.yml @@ -0,0 +1,66 @@ +- name: "Calculate rke2 full version " + when: ( install_rke2_version is not defined ) or ( install_rke2_version | length == 0 ) # noqa var-spacing + block: + - name: Stop if the provided is not valid + fail: + msg: "Provided channel is not valid" + when: rke2_channel not in channels + + - name: Get full version name url + uri: + url: https://update.rke2.io/v1-release/channels/{{ rke2_channel }} + follow_redirects: all + register: rke2_version_url + + - name: Set full version name + shell: set -o pipefail && echo {{ rke2_version_url.url }} | sed -e 's|.*/||' + register: rke2_full_version + changed_when: false + args: + executable: /usr/bin/bash + +- name: Set rke2_full_version fact # noqa var-spacing + set_fact: + rke2_full_version: "{{ rke2_full_version.stdout if ((install_rke2_version is not defined) or (install_rke2_version|length == 0)) else install_rke2_version }}" # yamllint disable-line rule:line-length + +- name: Set dot version + shell: set -o pipefail && echo {{ rke2_full_version }} | /usr/bin/cut -d'+' -f1 + register: rke2_version_dot_tmp + changed_when: false + args: + executable: /usr/bin/bash + +- name: Set rke2_version_dot fact + set_fact: + rke2_version_dot: "{{ rke2_version_dot_tmp.stdout }}" + +- name: Set Maj.Min version + shell: set -o pipefail && echo {{ rke2_full_version }} | /bin/awk -F'.' '{ print $1"."$2 }' | sed "s|^v||g" + register: rke2_version_majmin_tmp + changed_when: false + args: + executable: /usr/bin/bash + +- name: Set rke2_version_majmin fact + set_fact: + rke2_version_majmin: "{{ rke2_version_majmin_tmp.stdout }}" + +- name: Set RPM version + shell: set -o pipefail && echo {{ rke2_full_version }} | sed -E -e "s/[\+-]/~/g" | sed -E -e "s/v(.*)/\1/" + register: rke2_version_rpm_tmp + changed_when: false + args: + executable: /usr/bin/bash + +- name: Set rke2_version_rpm fact + set_fact: + rke2_version_rpm: "{{ rke2_version_rpm_tmp.stdout }}" + + +- name: Describe versions + debug: + msg: + - "Full version, with revision indication: {{ rke2_full_version }}" + - "Version without revision indication: {{ rke2_version_dot }}" + - "Major and Minor Only: {{ rke2_version_majmin }}" + - "RPM Version (tilde): {{ rke2_version_rpm }}" \ No newline at end of file diff --git a/roles/rke2_common/tasks/main.yml b/roles/rke2_common/tasks/main.yml index 9cc8999e..3a8a3b70 100644 --- a/roles/rke2_common/tasks/main.yml +++ b/roles/rke2_common/tasks/main.yml @@ -18,28 +18,12 @@ path: "{{ playbook_dir }}/tarball_install/rke2.linux-amd64.tar.gz" register: rke2_binary_tarball_check delegate_to: 127.0.0.1 - become: no - -- name: Check for the rke2 binary - stat: - path: /usr/local/bin/rke2 - register: rke2_binary - -- name: If the rke2 binary exists, determine if the version is changing - when: rke2_binary.stat.exists - block: - - name: Get current RKE2 version - shell: set -o pipefail && /usr/local/bin/rke2 -v | head -n 1 | cut -d ' ' -f 3 - register: installed_rke2_version - changed_when: false - args: - executable: /usr/bin/bash - - - name: Determine if current version differs what what is being installed - set_fact: - rke2_version_changed: true - when: "'stdout' in installed_rke2_version and installed_rke2_version['stdout'] != install_rke2_version" + become: False +- name: Include calculate_rke2_version.yml + include_tasks: calculate_rke2_version.yml + when: not rke2_binary_tarball_check.stat.exists + - name: SLES/Ubuntu/Tarball Installation include_tasks: tarball_install.yml when: diff --git a/roles/rke2_common/tasks/previous_install.yml b/roles/rke2_common/tasks/previous_install.yml index ab87b3a3..e142d536 100644 --- a/roles/rke2_common/tasks/previous_install.yml +++ b/roles/rke2_common/tasks/previous_install.yml @@ -27,3 +27,21 @@ when: > ansible_facts.services["rke2-agent.service"] is defined and not ansible_facts.services["rke2-agent.service"].status == 'disabled' + +- name: Check for the rke2 binary + stat: + path: /usr/local/bin/rke2 + register: rke2_binary + +- name: Get current RKE2 version if already installed + shell: set -o pipefail && /usr/local/bin/rke2 -v | head -n 1 | cut -d ' ' -f 3 + register: installed_rke2_version_tmp + changed_when: false + args: + executable: /usr/bin/bash + when: rke2_binary.stat.exists + +- name: Determine if current version differs what what is being installed + set_fact: + installed_rke2_version: "{{installed_rke2_version_tmp.stdout}}" + when: rke2_binary.stat.exists \ No newline at end of file diff --git a/roles/rke2_common/tasks/rpm_install.yml b/roles/rke2_common/tasks/rpm_install.yml index 0f2f3e1e..5af5056b 100644 --- a/roles/rke2_common/tasks/rpm_install.yml +++ b/roles/rke2_common/tasks/rpm_install.yml @@ -1,69 +1,5 @@ --- -- name: "Calculate rke2 full version " - when: ( install_rke2_version is not defined ) or ( install_rke2_version | length == 0 ) # noqa var-spacing - block: - - name: Stop if the provided is not valid - fail: - msg: "Provided channel is not valid" - when: rke2_channel not in channels - - - name: Get full version name url - uri: - url: https://update.rke2.io/v1-release/channels/{{ rke2_channel }} - follow_redirects: all - register: rke2_version_url - - - name: Set full version name - shell: set -o pipefail && echo {{ rke2_version_url.url }} | sed -e 's|.*/||' - register: rke2_full_version - changed_when: false - args: - executable: /usr/bin/bash - -- name: Set rke2_full_version fact # noqa var-spacing - set_fact: - rke2_full_version: "{{ rke2_full_version.stdout if ((install_rke2_version is not defined) or (install_rke2_version|length == 0)) else install_rke2_version }}" # yamllint disable-line rule:line-length - -- name: Set dot version - shell: set -o pipefail && echo {{ rke2_full_version }} | /usr/bin/cut -d'+' -f1 - register: rke2_version_dot - changed_when: false - args: - executable: /usr/bin/bash - -- name: Set rke2_version_dot fact - set_fact: - rke2_version_dot: "{{ rke2_version_dot.stdout }}" - -- name: Set Maj.Min version - shell: set -o pipefail && echo {{ rke2_full_version }} | /bin/awk -F'.' '{ print $1"."$2 }' | sed "s|^v||g" - register: rke2_version_majmin - changed_when: false - args: - executable: /usr/bin/bash - -- name: Set rke2_version_majmin fact - set_fact: - rke2_version_majmin: "{{ rke2_version_majmin.stdout }}" - -- name: Set RPM version - shell: set -o pipefail && echo {{ rke2_full_version }} | sed -E -e "s/[\+-]/~/g" | sed -E -e "s/v(.*)/\1/" - register: rke2_version_rpm - changed_when: false - args: - executable: /usr/bin/bash - -- name: Set rke2_version_rpm fact - set_fact: - rke2_version_rpm: "{{ rke2_version_rpm.stdout }}" - -- name: Describe versions - debug: - msg: - - "Full version: {{ rke2_full_version }}, dot version: {{ rke2_version_dot }}" - - "Maj.Min version: {{ rke2_version_majmin }}, rpm version: {{ rke2_version_rpm }}" - # Does the Rancher RKE2 Common repo exist already - name: Check to see if rke2-common.repo exists stat: diff --git a/roles/rke2_common/tasks/tarball_install.yml b/roles/rke2_common/tasks/tarball_install.yml index 1c6b53bf..b21e318f 100644 --- a/roles/rke2_common/tasks/tarball_install.yml +++ b/roles/rke2_common/tasks/tarball_install.yml @@ -24,56 +24,54 @@ mode: '0644' when: rke2_binary_tarball_check.stat.exists -- name: Download tarball # noqa var-spacing - when: not rke2_binary_tarball_check.stat.exists +- name: Determine if current version differs what what is being installed + set_fact: + rke2_version_changed: true + when: + - not rke2_binary_tarball_check.stat.exists + - not installed or installed_rke2_version != rke2_full_version + +- name: TARBALL | Download the tarball + get_url: + url: https://github.com/rancher/rke2/releases/download/{{ rke2_full_version }}/rke2.linux-amd64.tar.gz + dest: "{{ temp_dir.path }}/rke2.linux-amd64.tar.gz" + mode: "0644" + when: + - not rke2_binary_tarball_check.stat.exists + - rke2_version_changed + +- name: TARBALL | Install tar package + package: + name: tar + state: present + ignore_errors: true + +- name: Get version of provided tarball + when: + - rke2_binary_tarball_check.stat.exists block: - - name: Stop if the provided channel is not valid - fail: - msg: "Provided channel is not valid" - when: rke2_channel not in channels - - - name: TARBALL | Get full version name url - uri: - url: https://update.rke2.io/v1-release/channels/{{ rke2_channel }} - follow_redirects: all - register: rke2_version_url - - - name: Set full version name - shell: set -o pipefail && echo {{ rke2_version_url.url }} | sed -e 's|.*/||' - register: rke2_full_version - changed_when: false - args: - executable: /bin/bash - - - name: Set dot version - shell: set -o pipefail && echo {{ rke2_full_version.stdout }} | /usr/bin/cut -d'+' -f1 - register: rke2_version_dot - changed_when: false - args: - executable: /bin/bash - - - name: Set Maj.Min version - shell: >- - set -o pipefail && echo {{ rke2_full_version.stdout }} - | awk -F'.' '{ print $1"."$2 }' | sed "s|^v||g" - register: rke2_version - changed_when: false - args: - executable: /bin/bash - - - name: Describe versions - debug: - msg: - - "Full version: {{ rke2_full_version.stdout }}" - - "dot version: {{ rke2_version_dot.stdout }}" - - "Maj.Min version: {{ rke2_version.stdout }}" - run_once: yes - - - name: TARBALL | Download the tarball - get_url: - url: https://github.com/rancher/rke2/releases/download/{{ rke2_full_version.stdout }}/rke2.linux-amd64.tar.gz - dest: "{{ temp_dir.path }}/rke2.linux-amd64.tar.gz" - mode: "0644" + - name: Unarchive tarball into temp location + ansible.builtin.unarchive: + src: "{{ temp_dir.path }}/rke2.linux-amd64.tar.gz" + dest: "{{ temp_dir.path }}" + remote_src: True + + - name: Get tarball RKE2 version from temp location + shell: set -o pipefail && {{ temp_dir.path }}/bin/rke2 -v | head -n 1 | cut -d ' ' -f 3 + register: tarball_rke2_version_tmp + changed_when: false + args: + executable: /usr/bin/bash + + - name: Set tarball RKE2 version var + set_fact: + tarball_rke2_version: "{{tarball_rke2_version_tmp.stdout}}" + + - name: Determine if current version differs what what is being installed + set_fact: + rke2_version_changed: true + when: + - not installed or installed_rke2_version != tarball_rke2_version - name: TARBALL | Check Target Mountpoint command: mountpoint -q {{ tarball_dir }} @@ -98,87 +96,85 @@ recurse: true when: tarball_dir is defined -- name: TARBALL | Install tar package - package: - name: tar - state: present - ignore_errors: true - -- name: TARBALL | Extract the tarball # noqa command-instead-of-module - command: - cmd: tar -xf "{{ temp_dir.path }}/rke2.linux-amd64.tar.gz" -C "{{ tarball_dir }}" - changed_when: false +- name: Final extraction/installation of RKE2 Tar + when: + - rke2_version_changed + block: -- name: TARBALL | Remove the temp_dir + - name: Unarchive rke2 tar + ansible.builtin.unarchive: + src: "{{ temp_dir.path }}/rke2.linux-amd64.tar.gz" + dest: "{{ tarball_dir }}" + remote_src: True + + - name: TARBALL | Updating rke2-server.service + ansible.builtin.replace: + path: "{{ tarball_dir }}/lib/systemd/system/rke2-server.service" + regexp: '/usr/local' + replace: '{{ tarball_dir }}' + + - name: TARBALL | Updating rke2-agent.service + ansible.builtin.replace: + path: "{{ tarball_dir }}/lib/systemd/system/rke2-agent.service" + regexp: '/usr/local' + replace: '{{ tarball_dir }}' + + - name: TARBALL | Updating rke2-uninstall.sh + ansible.builtin.replace: + path: "{{ tarball_dir }}/bin/rke2-uninstall.sh" + regexp: '/usr/local' + replace: '{{ tarball_dir }}' + + - name: TARBALL | Moving Systemd units to /etc/systemd/system + copy: + src: "{{ tarball_dir }}/lib/systemd/system/rke2-server.service" + dest: /etc/systemd/system/rke2-server.service + mode: '0644' + owner: root + group: root + remote_src: yes + when: + - inventory_hostname in groups['rke2_servers'] + + - name: TARBALL | Moving Systemd units to /etc/systemd/system + copy: + src: "{{ tarball_dir }}/lib/systemd/system/rke2-server.env" + dest: /etc/systemd/system/rke2-server.env + mode: '0644' + owner: root + group: root + remote_src: yes + when: + - inventory_hostname in groups['rke2_servers'] + + - name: TARBALL | Moving Systemd units to /etc/systemd/system + copy: + src: "{{ tarball_dir }}/lib/systemd/system/rke2-agent.service" + dest: /etc/systemd/system/rke2-agent.service + mode: '0644' + owner: root + group: root + remote_src: yes + when: + - inventory_hostname in groups.get('rke2_agents', []) + + - name: TARBALL | Moving Systemd units to /etc/systemd/system + copy: + src: "{{ tarball_dir }}/lib/systemd/system/rke2-agent.env" + dest: /etc/systemd/system/rke2-agent.env + mode: '0644' + owner: root + group: root + remote_src: yes + when: + - inventory_hostname in groups.get('rke2_agents', []) + + - name: TARBALL | Refreshing systemd unit files + systemd: + daemon-reload: yes + +- name: Remove the temp_dir file: path: "{{ temp_dir.path }}" state: absent - when: temp_dir.path is defined - -- name: TARBALL | Updating tarball contents to reflect install path - block: - - name: TARBALL | Updating rke2-server.service - ansible.builtin.replace: - path: "{{ tarball_dir }}/lib/systemd/system/rke2-server.service" - regexp: '/usr/local' - replace: '{{ tarball_dir }}' - - - name: TARBALL | Updating rke2-agent.service - ansible.builtin.replace: - path: "{{ tarball_dir }}/lib/systemd/system/rke2-agent.service" - regexp: '/usr/local' - replace: '{{ tarball_dir }}' - - - name: TARBALL | Updating rke2-uninstall.sh - ansible.builtin.replace: - path: "{{ tarball_dir }}/bin/rke2-uninstall.sh" - regexp: '/usr/local' - replace: '{{ tarball_dir }}' - -- name: TARBALL | Moving Systemd units to /etc/systemd/system - copy: - src: "{{ tarball_dir }}/lib/systemd/system/rke2-server.service" - dest: /etc/systemd/system/rke2-server.service - mode: '0644' - owner: root - group: root - remote_src: yes - when: - - inventory_hostname in groups['rke2_servers'] - -- name: TARBALL | Moving Systemd units to /etc/systemd/system - copy: - src: "{{ tarball_dir }}/lib/systemd/system/rke2-server.env" - dest: /etc/systemd/system/rke2-server.env - mode: '0644' - owner: root - group: root - remote_src: yes - when: - - inventory_hostname in groups['rke2_servers'] - -- name: TARBALL | Moving Systemd units to /etc/systemd/system - copy: - src: "{{ tarball_dir }}/lib/systemd/system/rke2-agent.service" - dest: /etc/systemd/system/rke2-agent.service - mode: '0644' - owner: root - group: root - remote_src: yes - when: - - inventory_hostname in groups.get('rke2_agents', []) - -- name: TARBALL | Moving Systemd units to /etc/systemd/system - copy: - src: "{{ tarball_dir }}/lib/systemd/system/rke2-agent.env" - dest: /etc/systemd/system/rke2-agent.env - mode: '0644' - owner: root - group: root - remote_src: yes - when: - - inventory_hostname in groups.get('rke2_agents', []) - -- name: TARBALL | Refreshing systemd unit files - systemd: - daemon-reload: yes + when: temp_dir.path is defined \ No newline at end of file diff --git a/roles/rke2_common/vars/main.yml b/roles/rke2_common/vars/main.yml index 78c915ac..b85bb915 100644 --- a/roles/rke2_common/vars/main.yml +++ b/roles/rke2_common/vars/main.yml @@ -3,7 +3,16 @@ channels: - stable - latest - - v1.19 - v1.18 - + - v1.19 + - v1.20 + - v1.21 + - v1.22 + - v1.23 + - v1.24 + - v1.25 + - v1.26 + - v1.27 + - v1.28 installed: false +rke2_version_changed: false \ No newline at end of file