# Copyright (c) 2021 Red Hat, Inc.
#
# Author:
#  Cleber Rosa <crosa@redhat.com>
#
# This work is licensed under the terms of the GNU GPL, version 2 or
# later.  See the COPYING file in the top-level directory.
#
# This is an ansible playbook file.  Run it to set up systems with the
# gitlab-runner agent.
---
- name: Installation of gitlab-runner
  hosts: all
  vars_files:
    - vars.yml
  tasks:
    - debug:
        msg: 'Checking for a valid GitLab registration token'
      failed_when: "gitlab_runner_registration_token == 'PLEASE_PROVIDE_A_VALID_TOKEN'"

    - name: Create a group for the gitlab-runner service
      group:
        name: gitlab-runner

    - name: Create a user for the gitlab-runner service
      user:
        user: gitlab-runner
        group: gitlab-runner
        groups: kvm
        comment: GitLab Runner
        home: /home/gitlab-runner
        shell: /bin/bash

    - name: Remove the .bash_logout file when on Ubuntu systems
      file:
        path: /home/gitlab-runner/.bash_logout
        state: absent
      when: "ansible_facts['distribution'] == 'Ubuntu'"

    - name: Set the Operating System for gitlab-runner
      set_fact:
        gitlab_runner_os: "{{ ansible_facts[\"system\"]|lower }}"
    - debug:
        msg: gitlab-runner OS is {{ gitlab_runner_os }}

    - name: Set the architecture for gitlab-runner
      set_fact:
        gitlab_runner_arch: "{{ ansible_to_gitlab_arch[ansible_facts[\"architecture\"]] }}"
    - debug:
        msg: gitlab-runner arch is {{ gitlab_runner_arch }}

    - name: Download the matching gitlab-runner (DEB)
      get_url:
        dest: "/root/"
        url: "https://gitlab-runner-downloads.s3.amazonaws.com/latest/deb/gitlab-runner_{{ gitlab_runner_arch }}.deb"
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    - name: Download the matching gitlab-runner (RPM)
      get_url:
        dest: "/root/"
        url: "https://gitlab-runner-downloads.s3.amazonaws.com/latest/rpm/gitlab-runner_{{ gitlab_runner_arch }}.rpm"
      when:
        - ansible_facts['distribution'] == 'CentOS'

    - name: Install gitlab-runner via package manager (DEB)
      apt: deb="/root/gitlab-runner_{{ gitlab_runner_arch }}.deb"
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    - name: Install gitlab-runner via package manager (RPM)
      yum: name="/root/gitlab-runner_{{ gitlab_runner_arch }}.rpm"
      when:
        - ansible_facts['distribution'] == 'CentOS'

    - name: Register the gitlab-runner
      command: "/usr/bin/gitlab-runner register --non-interactive --url {{ gitlab_runner_server_url }} --registration-token {{ gitlab_runner_registration_token }} --executor shell --tag-list {{ ansible_facts[\"architecture\"] }},{{ ansible_facts[\"distribution\"]|lower }}_{{ ansible_facts[\"distribution_version\"] }} --description '{{ ansible_facts[\"distribution\"] }} {{ ansible_facts[\"distribution_version\"] }} {{ ansible_facts[\"architecture\"] }} ({{ ansible_facts[\"os_family\"] }})'"

    # The secondary runner will still run under the single gitlab-runner service
    - name: Register secondary gitlab-runner
      command: "/usr/bin/gitlab-runner register --non-interactive --url {{ gitlab_runner_server_url }} --registration-token {{ gitlab_runner_registration_token }} --executor shell --tag-list aarch32,{{ ansible_facts[\"distribution\"]|lower }}_{{ ansible_facts[\"distribution_version\"] }} --description '{{ ansible_facts[\"distribution\"] }} {{ ansible_facts[\"distribution_version\"] }} {{ ansible_facts[\"architecture\"] }} ({{ ansible_facts[\"os_family\"] }})'"
      when:
        - ansible_facts['distribution'] == 'Ubuntu'
        - ansible_facts['architecture'] == 'aarch64'
        - ansible_facts['distribution_version'] == '22.04'

    - name: Install the gitlab-runner service using its own functionality
      command: "/usr/bin/gitlab-runner install --user gitlab-runner --working-directory /home/gitlab-runner"
      register: gitlab_runner_install_service_result
      failed_when: "gitlab_runner_install_service_result.rc != 0 and \"already exists\" not in gitlab_runner_install_service_result.stderr"

    - name: Enable the gitlab-runner service
      service:
        name: gitlab-runner
        state: started
        enabled: yes
