ansible-roles/roles/nomad/templates/nomad.hcl.j2

319 lines
9.4 KiB
Plaintext
Raw Normal View History

2022-07-29 15:00:16 +02:00
data_dir = "{{ nomad_root_dir }}/data"
2022-08-03 16:00:16 +02:00
plugin_dir = "{{ nomad_root_dir }}/plugins"
2022-07-29 15:00:16 +02:00
bind_addr = "0.0.0.0"
2022-07-31 23:00:15 +02:00
2022-08-01 16:00:18 +02:00
{% if nomad_conf.datacenter is defined %}
datacenter = "{{ nomad_conf.datacenter }}"
{% endif %}
2022-08-05 10:00:16 +02:00
{% if nomad_conf.region is defined %}
region = "{{ nomad_conf.region }}"
{% endif %}
2022-08-01 16:00:18 +02:00
{% if nomad_conf.name is defined %}
name = {{ nomad_conf.name }}
{% endif %}
disable_update_check = true
2022-07-29 15:00:16 +02:00
advertise {
2022-08-06 13:00:16 +02:00
{% for service in ['http', 'rpc', 'serf' ] %}
2022-07-29 15:00:16 +02:00
{% if nomad_services[service].advertise is defined %}
{{ service }} = {{ nomad_services[service].advertise }}
{% endif %}
{% endfor %}
}
2022-07-31 23:00:15 +02:00
2022-07-29 15:00:16 +02:00
ports {
2022-08-06 13:00:16 +02:00
{% for service in ['http', 'rpc', 'serf' ] %}
2022-07-29 15:00:16 +02:00
{{ service }} = {{ nomad_services[service].port }}
{% endfor %}
}
2022-07-31 23:00:15 +02:00
2022-08-05 10:00:16 +02:00
acl {
enabled = {{ nomad_conf.acl.enabled | ternary('true', 'false') }}
{% if nomad_conf.acl.replication_token is defined and nomad_conf.region is defined and nomad_conf.server.authoritative_region is defined and nomad_conf.region != nomad_conf.server.authoritative_region %}
replication_token = "{{ nomad_conf.acl.replication_token }}"
{% endif %}
}
2022-07-29 15:00:16 +02:00
server {
2022-08-01 12:00:18 +02:00
enabled = {{ nomad_conf.server.enabled | ternary('true', 'false') }}
bootstrap_expect = {{ nomad_conf.server.bootstrap_expect }}
2022-07-29 15:00:16 +02:00
server_join {
retry_join = [
2022-07-31 23:00:15 +02:00
{% for server in nomad_servers %}
2022-07-29 15:00:16 +02:00
"{{ server }}",
{% endfor %}
]
}
2023-09-14 17:00:20 +02:00
{% for setting in [
'authoritative_region',
'encrypt',
'node_gc_threshold',
'job_gc_interval',
'job_gc_threshold',
'eval_gc_threshold',
'batch_eval_gc_threshold',
'deployment_gc_threshold',
'csi_volume_claim_gc_interval',
'csi_volume_claim_gc_threshold',
'csi_plugin_gc_threshold',
'acl_token_gc_threshold',
'heartbeat_grace',
'min_heartbeat_ttl',
'failover_heartbeat_ttl',
'license_path',
'root_key_gc_interval',
'root_key_gc_threshold',
'root_key_rotation_threshold',
'job_max_source_size'
] %}
{% if nomad_conf.server[setting] is defined %}
{{ setting }} = "{{ nomad_conf.server[setting] }}"
2022-08-05 10:00:16 +02:00
{% endif %}
2023-09-14 17:00:20 +02:00
{% endfor %}
2022-08-08 10:00:16 +02:00
default_scheduler_config {
scheduler_algorithm = "{{ nomad_conf.server.default_scheduler_config.scheduler_algorithm }}"
memory_oversubscription_enabled = {{ nomad_conf.server.default_scheduler_config.memory_oversubscription_enabled | ternary('true', 'false') }}
preemption_config {
{% for type in ['batch', 'system', 'sysbatch', 'service'] %}
{{ type }}_scheduler_enabled = {{ nomad_conf.server.default_scheduler_config.preemption_config[type ~ '_scheduler_enabled'] | ternary('true', 'false') }}
{% endfor %}
}
}
2022-07-29 15:00:16 +02:00
}
2022-07-31 23:00:15 +02:00
2022-08-03 16:00:16 +02:00
{% if nomad_conf.client.enabled %}
2022-07-29 15:00:16 +02:00
client {
2022-08-03 16:00:16 +02:00
enabled = true
2023-07-20 15:00:19 +02:00
2022-07-29 15:00:16 +02:00
servers = [
2022-07-31 23:00:15 +02:00
{% for server in nomad_servers %}
2022-07-29 15:00:16 +02:00
"{{ server }}",
{% endfor %}
]
2023-07-20 15:00:19 +02:00
2023-07-19 12:00:08 +02:00
{% if nomad_conf.client.node_pool is defined %}
node_pool = "{{ nomad_conf.client.node_pool }}"
{% endif %}
2023-07-20 15:00:19 +02:00
{% if nomad_conf.client.drain_on_shutdown is defined %}
drain_on_shutdown {
{% if nomad_conf.client.drain_on_shutdown.deadline is defined %}
deadline = "{{ nomad_conf.client.drain_on_shutdown.deadline }}"
{% endif %}
{% for param in ['force', 'ignore_system_jobs'] %}
{% if nomad_conf.client.drain_on_shutdown[param] is defined %}
{{ param }} = {{ nomad_conf.client.drain_on_shutdown[param] | ternary('true', 'false') }}
{% endif %}
{% endfor %}
}
{% endif %}
2022-08-01 12:00:18 +02:00
{% for volume in nomad_conf.client.host_volumes %}
2022-07-31 23:00:15 +02:00
host_volume "{{ volume.name }}" {
path = "{{ volume.path }}"
{% if volume.read_only is defined %}
2022-08-01 12:00:18 +02:00
read_only = "{{ volume.read_only | ternary('true', 'false') }}"
2022-07-31 23:00:15 +02:00
{% endif %}
}
{% endfor %}
2022-08-02 11:00:18 +02:00
reserved {
cpu = {{ nomad_conf.client.reserved.cpu }}
memory = {{ (nomad_conf.client.reserved.memory is search('%$')) | ternary([((nomad_conf.client.reserved.memory | regex_replace('%$', '') | int) * ansible_memtotal_mb * 0.01), nomad_conf.client.reserved.memory_min] | max | int, nomad_conf.client.reserved.memory) }}
disk = {{ nomad_conf.client.reserved.disk }}
reserved_ports = "{{ nomad_conf.client.reserved.reserved_ports | join(',') }}"
}
meta {
{% for meta in nomad_conf.client.meta.keys() | list %}
{{ meta }} = "{{ nomad_conf.client.meta[meta] }}"
{% endfor %}
}
{% if nomad_conf.client.node_class is defined %}
node_class = "{{ nomad_conf.client.node_class }}"
{% endif %}
2022-08-03 01:00:22 +02:00
options {
"driver.allowlist" = "{{ nomad_enabled_task_drivers | join(',') }}"
}
2023-01-30 17:00:13 +01:00
max_kill_timeout = "{{ nomad_conf.client.max_kill_timeout }}"
2022-08-03 01:00:22 +02:00
}
{% if 'docker' in nomad_enabled_task_drivers %}
plugin "docker" {
config {
allow_privileged = {{ nomad_conf.client.task_drivers.docker.allow_privileged | ternary('true', 'false') }}
2022-11-08 12:00:08 +01:00
auth {
config = "{{ nomad_root_dir }}/docker/auth.json"
}
2022-08-18 19:00:16 +02:00
{% if nomad_conf.client.task_drivers.docker.volumes.enabled %}
volumes {
enabled = true
}
{% endif %}
2022-08-04 14:00:17 +02:00
{% if nomad_conf.client.task_drivers.docker.allow_caps is defined %}
allow_caps = [
{% for cap in nomad_conf.client.task_drivers.docker.allow_caps %}
"{{ cap }}",
{% endfor %}
]
{% endif %}
2022-10-11 13:00:08 +02:00
extra_labels = [
{% for label in nomad_conf.client.task_drivers.docker.extra_labels %}
"{{ label }}",
{% endfor %}
]
2023-08-17 16:00:21 +02:00
gc {
{% for gc in ['image_delay'] %}
{% if nomad_conf.client.task_drivers.docker.gc[gc] is defined %}
{{ gc }} = "{{ nomad_conf.client.task_drivers.docker.gc[gc] }}"
{% endif %}
{% endfor %}
}
2022-08-03 01:00:22 +02:00
}
}
2023-07-09 23:00:09 +02:00
{% if 'podman' in nomad_enabled_task_drivers %}
plugin "podman-driver-podman" {
config {
recover_stopped = {{ nomad_conf.client.task_drivers.podman.recover_stopped | ternary('true', 'false') }}
{% if nomad_conf.client.task_drivers.podman.socket_path is defined %}
socket_path = "{{ nomad_conf.client.task_drivers.podman.socket_path }}"
{% endif %}
{% if nomad_conf.client.task_drivers.podman.volumes.enabled %}
volumes {
enabled = true
}
{% endif %}
extra_labels = [
{% for label in nomad_conf.client.task_drivers.podman.extra_labels %}
"{{ label }}",
{% endfor %}
]
}
}
{% endif %}
2022-08-03 01:00:22 +02:00
plugin "raw_exec" {
config {
2022-08-18 19:00:16 +02:00
enabled = {{ ('raw_exec' in nomad_enabled_task_drivers) | ternary('true', 'false') }}
2022-08-03 01:00:22 +02:00
}
2022-07-29 15:00:16 +02:00
}
2022-08-06 13:00:16 +02:00
plugin "containerd-driver" {
config {
2022-08-18 19:00:16 +02:00
enabled = {{ ('containerd-driver' in nomad_enabled_task_drivers) | ternary('true', 'false') }}
2022-08-06 13:00:16 +02:00
containerd_runtime = "{{ nomad_conf.client.task_drivers['containerd-driver'].containerd_runtime }}"
allow_privileged = {{ nomad_conf.client.task_drivers['containerd-driver'].allow_privileged | ternary('true', 'false') }}
}
}
2022-08-03 01:00:22 +02:00
{% endif %}
2022-08-03 16:00:16 +02:00
{% else %}
client {
enabled = false
}
{% endif %}
2022-07-31 23:00:15 +02:00
ui {
2022-08-01 12:00:18 +02:00
enabled = {{ nomad_conf.ui.enabled | ternary('true', 'false') }}
{% if nomad_conf.ui.consul_ui is defined %}
2022-07-31 23:00:15 +02:00
consul {
2022-08-01 12:00:18 +02:00
ui_url = "{{ nomad_conf.ui.consul_ui }}"
2022-07-31 23:00:15 +02:00
}
{% endif %}
2022-08-01 12:00:18 +02:00
{% if nomad_conf.ui.vault_ui is defined %}
2022-07-31 23:00:15 +02:00
vault {
2022-08-01 12:00:18 +02:00
ui_url = "{{ nomad_conf.ui.vault_ui }}"
2022-07-31 23:00:15 +02:00
}
{% endif %}
}
2022-08-02 11:00:18 +02:00
2022-08-06 12:00:17 +02:00
telemetry {
prometheus_metrics = {{ nomad_conf.telemetry.prometheus_metrics | ternary('true', 'false') }}
disable_hostname = {{ nomad_conf.telemetry.disable_hostname | ternary('true', 'false') }}
publish_allocation_metrics = {{ nomad_conf.telemetry.publish_allocation_metrics | ternary('true', 'false') }}
publish_node_metrics = {{ nomad_conf.telemetry.publish_node_metrics | ternary('true', 'false') }}
}
2022-08-11 11:00:17 +02:00
consul {
2022-09-04 18:00:17 +02:00
{% for key in ['address', 'auth', 'client_service_name', 'server_service_name', 'grpc_address', 'token'] %}
{% if nomad_conf.consul[key] is defined %}
{{ key }} = "{{ nomad_conf.consul[key] }}"
2022-08-11 11:00:17 +02:00
{% endif %}
2022-09-04 18:00:17 +02:00
{% endfor %}
{% for key in ['allow_unauthenticated', 'auto_advertise', 'checks_use_advertise', 'server_auto_join'] %}
{% if nomad_conf.consul[key] is defined %}
{{ key }} = {{ nomad_conf.consul[key] | ternary('true', 'false') }}
2022-08-11 11:00:17 +02:00
{% endif %}
2022-09-04 18:00:17 +02:00
{% endfor %}
2022-08-11 11:00:17 +02:00
{% if nomad_conf.consul.tags is defined and nomad_conf.consul.tags is iterable %}
tags = [
{% for tag in nomad_conf.consul.tags %}
2022-09-04 18:00:17 +02:00
"{{ tag }}",
{% endfor %}
2022-08-11 11:00:17 +02:00
]
2022-09-04 18:00:17 +02:00
{% endif %}
{% if nomad_conf.consul.ssl %}
ssl = true
{% for key in ['ca_file', 'cert_file', 'key_file'] %}
{% if nomad_conf.consul[key] is defined %}
{{ key }} = "{{ nomad_conf.consul[key] }}"
{% endif %}
{% endfor %}
{% for key in ['verify_ssl', 'share_ssl'] %}
{% if nomad_conf.consul[key] is defined %}
{{ key }} = {{ nomad_conf.consul[key] | ternary('true', 'false') }}
{% endif %}
2022-08-11 11:00:17 +02:00
{% endfor %}
2022-09-04 18:00:17 +02:00
2022-08-11 11:00:17 +02:00
{% endif %}
}
2022-09-02 18:00:22 +02:00
vault {
{% for key in ['enabled', 'tls_skip_verify', 'allow_unauthenticated'] %}
{% if nomad_conf.vault[key] is defined %}
{{ key }} = {{ nomad_conf.vault[key] | ternary('true', 'false') }}
{% endif %}
{% endfor %}
2022-09-06 18:00:22 +02:00
{% if nomad_conf.server.enabled %}
2022-09-02 18:00:22 +02:00
{% for key in ['address', 'create_from_role', 'task_token_ttl', 'ca_file', 'ca_path', 'cert_file', 'key_file', 'namespace', 'tls_server_name', 'token'] %}
{% if nomad_conf.vault[key] is defined %}
{{ key }} = "{{ nomad_conf.vault[key] }}"
{% endif %}
{% endfor %}
2022-09-06 18:00:22 +02:00
{% elif nomad_conf.client.enabled and not nomad_conf.server.enabled %}
{% for key in ['address', 'ca_file', 'ca_path', 'cert_file', 'key_file', 'namespace', 'tls_server_name'] %}
{% if nomad_conf.vault[key] is defined %}
{{ key }} = "{{ nomad_conf.vault[key] }}"
{% endif %}
{% endfor %}
{% endif %}
2022-09-02 18:00:22 +02:00
}
tls {
{% for key in ['ca_file', 'cert_file', 'key_file', 'tls_min_version', 'tls_cipher_suites'] %}
{% if nomad_conf.tls[key] is defined %}
{{ key }} = "{{ nomad_conf.tls[key] }}"
{% endif %}
{% endfor %}
{% for key in ['http', 'rpc', 'rpc_upgrade_mode', 'tls_prefer_server_cipher_suites', 'verify_https_client', 'verify_server_hostname'] %}
{% if nomad_conf.tls[key] is defined %}
{{ key }} = {{ nomad_conf.tls[key] | ternary('true', 'false') }}
{% endif %}
{% endfor %}
}