# 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 }}

    # Debian/Ubuntu setup
    - name: Get gitlab-runner repo setup script (DEB)
      get_url:
        dest: "/root/"
        url: "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh"
        mode: 0755
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    - name: Run gitlab-runner repo setup script (DEB)
      shell: "/root/script.deb.sh"
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    - name: Install gitlab-runner (DEB)
      ansible.builtin.apt:
          name: gitlab-runner
          update_cache: yes
          state: present
      when:
        - ansible_facts['distribution'] == 'Ubuntu'

    # RPM setup
    - name: Get gitlab-runner repo setup script (RPM)
      get_url:
        dest: "/root/"
        url: "https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.rpm.sh"
        mode: 0755
      when:
        - ansible_facts['distribution'] == 'CentOS'

    - name: Run gitlab-runner repo setup script (RPM)
      shell: "/root/script.rpm.sh"
      when:
        - ansible_facts['distribution'] == 'CentOS'

    - name: Install gitlab-runner (RPM)
      yum:
        name: gitlab-runner
        update_cache: yes
        state: present
      when:
        - ansible_facts['distribution'] == 'CentOS'

    # Register Runners
    - 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
