From f2e3f37201b7b4a5a8574bfac9ab818f6f23f43e Mon Sep 17 00:00:00 2001
From: Adrien Waksberg <git@waks.be>
Date: Tue, 10 May 2022 10:40:42 +0200
Subject: [PATCH] feat: add environment variables

---
 README.md                              |  6 ++++++
 defaults/main.yml                      |  1 +
 handlers/main.yml                      |  5 +++++
 molecule/default/converge.yml          |  2 ++
 molecule/default/tests/test_default.py |  9 +++++++++
 tasks/main.yml                         | 19 +++++++++++++++++++
 templates/environment.conf.j2          |  6 ++++++
 7 files changed, 48 insertions(+)
 create mode 100644 handlers/main.yml
 create mode 100644 templates/environment.conf.j2

diff --git a/README.md b/README.md
index 36a21cf..b265d7f 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,12 @@ Install and configure a Gitlab runner
       locked: false
 ```
 
+- `gitlab_runner_env_variables` - dict with environment variables
+
+```
+  HTTP_PROXY: https://127.0.0.1:3218
+```
+
 ## How to use
 
 ```
diff --git a/defaults/main.yml b/defaults/main.yml
index c79a873..81b4048 100644
--- a/defaults/main.yml
+++ b/defaults/main.yml
@@ -2,3 +2,4 @@
 gitlab_runner_repository: >
   deb https://packages.gitlab.com/runner/gitlab-runner/debian/ {{ ansible_distribution_release }} main
 gitlab_runner_runners: []
+gitlab_runner_env_variables: {}
diff --git a/handlers/main.yml b/handlers/main.yml
new file mode 100644
index 0000000..c9debff
--- /dev/null
+++ b/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+- name: restart gitlab-runner
+  ansible.builtin.service:
+    name: gitlab-runner
+    state: restarted
diff --git a/molecule/default/converge.yml b/molecule/default/converge.yml
index 8428f49..352b52c 100644
--- a/molecule/default/converge.yml
+++ b/molecule/default/converge.yml
@@ -4,6 +4,8 @@
   roles:
     - ansible-role-gitlab_runner
   vars:
+    gitlab_runner_env_variables:
+      TEST: toto
     gitlab_runner_runners:
       - name: test
         url: https://gitlab.example.com
diff --git a/molecule/default/tests/test_default.py b/molecule/default/tests/test_default.py
index 54bbe9e..847de11 100644
--- a/molecule/default/tests/test_default.py
+++ b/molecule/default/tests/test_default.py
@@ -4,6 +4,15 @@ def test_packages(host):
   package = host.package('gitlab-runner')
   assert package.is_installed
 
+def test_env_file(host):
+  path = host.file('/etc/systemd/system/gitlab-runner.service.d/ansible.conf')
+  assert path.exists
+  assert path.is_file
+  assert path.user == 'root'
+  assert path.group == 'root'
+  assert path.mode == 0o644
+  assert path.contains('Environment="TEST=toto"')
+
 def test_config_file(host):
   config = host.file('/etc/gitlab-runner/config.toml')
   assert config.exists
diff --git a/tasks/main.yml b/tasks/main.yml
index b98dc53..a9dfcce 100644
--- a/tasks/main.yml
+++ b/tasks/main.yml
@@ -17,6 +17,25 @@
     GITLAB_RUNNER_DISABLE_SKEL: 'true'
   tags: gitlab-runner
 
+- name: create system directory
+  ansible.builtin.file:
+    path: /etc/systemd/system/gitlab-runner.service.d
+    owner: root
+    group: root
+    mode: 0755
+    state: directory
+  tags: gitlab-runner
+
+- name: add environment variables
+  ansible.builtin.template:
+    src: environment.conf.j2
+    dest: /etc/systemd/system/gitlab-runner.service.d/ansible.conf
+    owner: root
+    group: root
+    mode: 0644
+  notify: restart gitlab-runner
+  tags: gitlab-runner
+
 - name: register runners
   gitlab_runner:
     name: '{{ item.name }}'
diff --git a/templates/environment.conf.j2 b/templates/environment.conf.j2
new file mode 100644
index 0000000..121af2f
--- /dev/null
+++ b/templates/environment.conf.j2
@@ -0,0 +1,6 @@
+# {{ ansible_managed }}
+
+[Service]
+{% for env, value in gitlab_runner_env_variables.items()  %}
+Environment="{{ env }}={{ value }}"
+{% endfor %}