From d0591ad98f04debaade184cc30e7d3c3f2b3c3a3 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Thu, 20 Feb 2020 07:33:37 -0800 Subject: [PATCH] Add ensure-bazelisk role This adds a role which installs bazelisk if it is not already present. It also adds a test job which exercises the role; the job will be run on any changes to the new role. Change-Id: I69b28b58338b46ec3fea696f9d97be4271ed6ae4 --- doc/source/general-roles.rst | 1 + roles/ensure-bazelisk/README.rst | 34 ++++++++++++++++++++++++ roles/ensure-bazelisk/defaults/main.yaml | 6 +++++ roles/ensure-bazelisk/tasks/main.yaml | 25 +++++++++++++++++ zuul-tests.d/general-roles-jobs.yaml | 11 ++++++++ 5 files changed, 77 insertions(+) create mode 100644 roles/ensure-bazelisk/README.rst create mode 100644 roles/ensure-bazelisk/defaults/main.yaml create mode 100644 roles/ensure-bazelisk/tasks/main.yaml diff --git a/doc/source/general-roles.rst b/doc/source/general-roles.rst index 83a8d97df..fa928d5a7 100644 --- a/doc/source/general-roles.rst +++ b/doc/source/general-roles.rst @@ -14,6 +14,7 @@ General Purpose Roles .. zuul:autorole:: dstat-graph .. zuul:autorole:: emit-job-header .. zuul:autorole:: enable-netconsole +.. zuul:autorole:: ensure-bazelisk .. zuul:autorole:: ensure-dstat-graph .. zuul:autorole:: ensure-markdownlint .. zuul:autorole:: fetch-markdownlint diff --git a/roles/ensure-bazelisk/README.rst b/roles/ensure-bazelisk/README.rst new file mode 100644 index 000000000..102d8ee4d --- /dev/null +++ b/roles/ensure-bazelisk/README.rst @@ -0,0 +1,34 @@ +Ensure that bazelisk is present. + +If bazelisk is already installed, this role does nothing. Otherwise, +it downloads bazelisk from GitHub and installs it in the user's +home directory by default. + +**Role Variables** + +.. zuul:rolevar:: bazelisk_version + :default: v1.3.0 + + Version of bazelisk to install. + +.. zuul:rolevar:: bazelisk_arch + :default: linux-amd64 + + Architecture to install. + +.. zuul:rolevar:: bazelisk_url + :default: https://github.com/bazelbuild/bazelisk/releases/download/{{ bazelisk_version }}/bazelisk-{{ bazelisk_arch }} + + The URL from which to download bazelisk. + +.. zuul:rolevar:: bazelisk_executable + :default: bazelisk + + The bazelisk executable. If this already exists, the + role will not perform any further actions. + +.. zuul:rolevar:: bazelisk_target + :default: "{{ ansible_user_dir }}/.local/bin/bazelisk" + + Where to install bazelisk. If the role downloads bazelisk, it will + set :zuul:rolevar:`ensure-bazelisk.bazelisk_executable` to this value as well. diff --git a/roles/ensure-bazelisk/defaults/main.yaml b/roles/ensure-bazelisk/defaults/main.yaml new file mode 100644 index 000000000..813baadab --- /dev/null +++ b/roles/ensure-bazelisk/defaults/main.yaml @@ -0,0 +1,6 @@ +bazelisk_version: v1.3.0 +bazelisk_arch: linux-amd64 +bazelisk_url: "https://github.com/bazelbuild/bazelisk/releases/download/{{ bazelisk_version }}/bazelisk-{{ bazelisk_arch }}" +bazelisk_executable: bazelisk +# If we have to download it, store it here: +bazelisk_target: "{{ ansible_user_dir }}/.local/bin/bazelisk" diff --git a/roles/ensure-bazelisk/tasks/main.yaml b/roles/ensure-bazelisk/tasks/main.yaml new file mode 100644 index 000000000..efe48c35a --- /dev/null +++ b/roles/ensure-bazelisk/tasks/main.yaml @@ -0,0 +1,25 @@ +- name: Check if bazelisk is installed + command: bash -c "type -p {{ bazelisk_executable }}" + failed_when: false + register: bazelisk_installed + +- name: Ensure target directory exists + file: + state: directory + path: "{{ bazelisk_target | dirname }}" + when: bazelisk_installed.rc != 0 + +- name: Download bazelisk + get_url: + url: "{{ bazelisk_url }}" + dest: "{{ bazelisk_target }}" + mode: '0755' + when: bazelisk_installed.rc != 0 + register: bazelisk_downloaded + +# This will apply to further plays and playbooks +- name: Set bazelisk_executable fact + set_fact: + bazelisk_executable: "{{ bazelisk_target }}" + cacheable: true + when: bazelisk_downloaded is changed diff --git a/zuul-tests.d/general-roles-jobs.yaml b/zuul-tests.d/general-roles-jobs.yaml index 3fb8b51dd..f6bf14eb0 100644 --- a/zuul-tests.d/general-roles-jobs.yaml +++ b/zuul-tests.d/general-roles-jobs.yaml @@ -233,6 +233,15 @@ vars: role_name: clear-firewall +- job: + name: zuul-jobs-test-ensure-bazelisk + description: Test the ensure-bazelisk role + files: + - roles/ensure-bazelisk/.* + run: test-playbooks/simple-role-test.yaml + vars: + role_name: ensure-bazelisk + - job: name: zuul-jobs-test-netconsole description: Test the netconsole setup role @@ -482,6 +491,7 @@ - zuul-jobs-test-base-roles-ubuntu-xenial - zuul-jobs-test-bindep - zuul-jobs-test-clear-firewall + - zuul-jobs-test-ensure-bazelisk - zuul-jobs-test-netconsole - zuul-jobs-test-dstat-graph - zuul-jobs-test-multinode-roles-centos-7 @@ -510,6 +520,7 @@ - zuul-jobs-test-base-roles-ubuntu-xenial - zuul-jobs-test-bindep - zuul-jobs-test-clear-firewall + - zuul-jobs-test-ensure-bazelisk - zuul-jobs-test-netconsole - zuul-jobs-test-dstat-graph - zuul-jobs-test-multinode-roles-centos-7