diff --git a/roles/nomad/defaults/main.yml b/roles/nomad/defaults/main.yml index 3c6208f..908b954 100644 --- a/roles/nomad/defaults/main.yml +++ b/roles/nomad/defaults/main.yml @@ -62,6 +62,19 @@ nomad_base_conf: # cni: macvlan,ipvlan meta: {} + # List of enabled drivers, and their options. Valid ones are + # exec, raw_exec, docker, java. + task_drivers: + exec: + enabled: True + docker: + enabled: True + allow_privileged: True + raw_exec: + enabled: False + java: + enabled: False + # Server related settings server: # Should server be enabled diff --git a/roles/nomad/meta/main.yml b/roles/nomad/meta/main.yml new file mode 100644 index 0000000..8a1f9c4 --- /dev/null +++ b/roles/nomad/meta/main.yml @@ -0,0 +1,5 @@ +--- + +dependencies: + - role: docker + when: nomad_conf.client.enabled and nomad_conf.client.task_drivers.docker.enabled diff --git a/roles/nomad/tasks/directories.yml b/roles/nomad/tasks/directories.yml index bee94c0..1a9612e 100644 --- a/roles/nomad/tasks/directories.yml +++ b/roles/nomad/tasks/directories.yml @@ -1,7 +1,7 @@ --- - name: Create needed directories - file: path={{ nomad_root_dir }}/{{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} recurse={{ item.recurse | default(omit) }} + file: path={{ nomad_root_dir }}/{{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} loop: - dir: / owner: root @@ -23,13 +23,9 @@ - dir: tmp owner: "{{ nomad_user }}" group: "{{ nomad_user }}" - mode: u=rwX,g=-,o=- - recurse: True - dir: data owner: "{{ nomad_user }}" group: "{{ nomad_user }}" - mode: u=rwX,g=-,o=- - recurse: True - dir: etc owner: root group: "{{ nomad_user }}" diff --git a/roles/nomad/tasks/facts.yml b/roles/nomad/tasks/facts.yml index 9b815d3..9969835 100644 --- a/roles/nomad/tasks/facts.yml +++ b/roles/nomad/tasks/facts.yml @@ -1,5 +1,14 @@ --- +# Load distribution specific variables +- include_vars: "{{ item }}" + with_first_found: + - "{{ role_path }}/vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml" + - "{{ role_path }}/vars/{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml" + - "{{ role_path }}/vars/{{ ansible_distribution }}.yml" + - "{{ role_path }}/vars/{{ ansible_os_family }}.yml" + tags: nomad + - set_fact: nomad_install_mode='none' tags: nomad @@ -23,3 +32,10 @@ - when: nomad_bin.stat.exists and nomad_current_version != nomad_version set_fact: nomad_install_mode='upgrade' + +- debug: msg={{ nomad_conf.client.task_drivers | dict2items }} + tags: nomad + +- name: Build a list of enabled task drivers + set_fact: nomad_enabled_task_drivers={{ nomad_conf.client.task_drivers | dict2items | selectattr('value.enabled', 'equalto', True) | map(attribute='key') }} + tags: nomad diff --git a/roles/nomad/tasks/install.yml b/roles/nomad/tasks/install.yml index b3280b4..ff36642 100644 --- a/roles/nomad/tasks/install.yml +++ b/roles/nomad/tasks/install.yml @@ -8,6 +8,13 @@ - unzip tags: nomad +- name: Install task driver packages + package: name={{ nomad_task_driver_packages[item] }} + loop: "{{ nomad_enabled_task_drivers }}" + when: nomad_task_driver_packages[item] is defined and nomad_conf.client.enabled + notify: restart nomad + tags: nomad + - when: nomad_install_mode != 'none' block: - name: Download nomad @@ -59,3 +66,4 @@ - pre - post tags: nomad + diff --git a/roles/nomad/templates/nomad.hcl.j2 b/roles/nomad/templates/nomad.hcl.j2 index c88cd28..31b120c 100644 --- a/roles/nomad/templates/nomad.hcl.j2 +++ b/roles/nomad/templates/nomad.hcl.j2 @@ -74,8 +74,29 @@ client { node_class = "{{ nomad_conf.client.node_class }}" {% endif %} + options { + "driver.allowlist" = "{{ nomad_enabled_task_drivers | join(',') }}" + } } +{% if nomad_conf.client.enabled %} +{% if 'docker' in nomad_enabled_task_drivers %} +plugin "docker" { + config { + allow_privileged = {{ nomad_conf.client.task_drivers.docker.allow_privileged | ternary('true', 'false') }} + } +} +{% endif %} + +{% if 'raw_exec' in nomad_enabled_task_drivers %} +plugin "raw_exec" { + config { + enabled = true + } +} +{% endif %} +{% endif %} + ui { enabled = {{ nomad_conf.ui.enabled | ternary('true', 'false') }} {% if nomad_conf.ui.consul_ui is defined %} diff --git a/roles/nomad/vars/RedHat-8.yml b/roles/nomad/vars/RedHat-8.yml new file mode 100644 index 0000000..286e715 --- /dev/null +++ b/roles/nomad/vars/RedHat-8.yml @@ -0,0 +1,5 @@ +--- + +nomad_task_driver_packages: + java: + - java-17-openjdk-headless diff --git a/roles/nomad/vars/main.yml b/roles/nomad/vars/main.yml new file mode 100644 index 0000000..cd21505 --- /dev/null +++ b/roles/nomad/vars/main.yml @@ -0,0 +1,2 @@ +--- +