diff --git a/data/common/common.yaml b/data/common/common.yaml --- a/data/common/common.yaml +++ b/data/common/common.yaml @@ -2258,6 +2258,13 @@ swh::deploy::scheduler::packages: - python3-swh.scheduler +# subset limited to the save code now tasks for the runner priority +swh::deploy::scheduler::swh-scheduler-runner-priority::config::task-types: + - load-git + - load-svn + - load-archive-files + - load-hg + swh::deploy::scheduler::remote::sentry_swh_package: swh.scheduler swh::deploy::scheduler::remote::sentry_environment: "%{alias('swh::deploy::environment')}" swh::deploy::scheduler::remote::sentry_dsn: "%{alias('swh::deploy::scheduler::sentry_dsn')}" diff --git a/site-modules/profile/manifests/swh/deploy/scheduler.pp b/site-modules/profile/manifests/swh/deploy/scheduler.pp --- a/site-modules/profile/manifests/swh/deploy/scheduler.pp +++ b/site-modules/profile/manifests/swh/deploy/scheduler.pp @@ -6,25 +6,27 @@ $group = lookup('swh::deploy::scheduler::group') $config = lookup('swh::deploy::scheduler::config') - $listener_log_level = lookup('swh::deploy::scheduler::listener::log_level') - $runner_log_level = lookup('swh::deploy::scheduler::runner::log_level') - - $task_broker = lookup('swh::deploy::scheduler::task_broker') - $sentry_dsn = lookup('swh::deploy::scheduler::sentry_dsn', Optional[String], 'first', undef) $sentry_environment = lookup('swh::deploy::scheduler::sentry_environment', Optional[String], 'first', undef) $sentry_swh_package = lookup('swh::deploy::scheduler::sentry_swh_package', Optional[String], 'first', undef) + $listener_log_level = lookup('swh::deploy::scheduler::listener::log_level') + + $task_broker = lookup('swh::deploy::scheduler::task_broker') + $listener_service_name = 'swh-scheduler-listener' $listener_unit_name = "${listener_service_name}.service" $listener_unit_template = "profile/swh/deploy/scheduler/${listener_service_name}.service.erb" $runner_service_name = 'swh-scheduler-runner' - $runner_unit_name = "${runner_service_name}.service" - $runner_unit_template = "profile/swh/deploy/scheduler/${runner_service_name}.service.erb" + $runner_priority_service_name = 'swh-scheduler-runner-priority' $packages = lookup('swh::deploy::scheduler::packages') - $services = [$listener_service_name, $runner_service_name] + $services = [ + $listener_service_name, + $runner_service_name, + $runner_priority_service_name, + ] include profile::swh::deploy::base_scheduler @@ -59,28 +61,6 @@ notify => Service[$listener_service_name], } - # Template uses variables - # - $user - # - $group - # - $sentry_dsn - # - ::systemd::unit_file {$runner_unit_name: - ensure => present, - content => template($runner_unit_template), - notify => Service[$runner_service_name], - } - - service {$runner_service_name: - ensure => running, - enable => true, - require => [ - Package[$packages], - File[$config_file], - Systemd::Unit_File[$runner_unit_name], - ], - subscribe => Package[$packages], - } - service {$listener_service_name: ensure => running, enable => true, @@ -92,6 +72,27 @@ subscribe => Package[$packages], } + ::profile::swh::deploy::scheduler::runner {$runner_service_name: + user => $user, + group => $group, + packages => $packages, + config_file => $config_file, + sentry_dsn => $sentry_dsn, + sentry_environment => $sentry_environment, + sentry_swh_package => $sentry_swh_package, + } + + ::profile::swh::deploy::scheduler::runner {$runner_priority_service_name: + user => $user, + group => $group, + packages => $packages, + config_file => $config_file, + sentry_dsn => $sentry_dsn, + sentry_environment => $sentry_environment, + sentry_swh_package => $sentry_swh_package, + priority => true, + } + # scheduler rpc server ::profile::swh::deploy::rpc_server {'scheduler': diff --git a/site-modules/profile/manifests/swh/deploy/scheduler/runner.pp b/site-modules/profile/manifests/swh/deploy/scheduler/runner.pp new file mode 100644 --- /dev/null +++ b/site-modules/profile/manifests/swh/deploy/scheduler/runner.pp @@ -0,0 +1,67 @@ +# Instance of scheduler runner +define profile::swh::deploy::scheduler::runner ( + $service_name = $title, + $user = undef, + $group = undef, + $packages = undef, + $config_file = undef, + $priority = false, + $sentry_dsn = undef, + $sentry_environment = undef, + $sentry_swh_package = undef, +) +{ + $runner_log_level = lookup('swh::deploy::scheduler::runner::log_level') + + $task_types = lookup( + "swh::deploy::scheduler::${service_name}::config::task-types", + {default_value => []} + ) + + $runner_unit_name = "swh-scheduler-${service_name}.service" + $runner_unit_template = "profile/swh/deploy/scheduler/swh-scheduler-runner.service.erb" + + $default_command = concat([ + "/usr/bin/swh", + "--log-level ${runner_log_level}", + "scheduler", + "--config-file ${config_file}", + "start-runner", + "--period 10", + ], $priority ? { + true => [ "--with-priority" ], + false => [], + }) + + # complete the command + $runner_command = join( + $task_types.reduce($default_command) | $command, $task_type | { + $command + ["--task-type ${task_type}"] + }, + " " + ) + + # Template uses variables + # - $user + # - $group + # - $sentry_{dsn,environment,swh_package} + # - $runner_command + + ::systemd::unit_file {$runner_unit_name: + ensure => present, + content => template($runner_unit_template), + notify => Service[$service_name], + } + + service {$service_name: + ensure => running, + enable => true, + require => [ + Package[$packages], + File[$config_file], + Systemd::Unit_File[$runner_unit_name], + ], + subscribe => Package[$packages], + } + +} diff --git a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb --- a/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb +++ b/site-modules/profile/templates/swh/deploy/scheduler/swh-scheduler-runner.service.erb @@ -21,7 +21,7 @@ <%- if !@sentry_swh_package.empty? -%> Environment=SWH_MAIN_PACKAGE=<%= @sentry_swh_package %> <%- end -%> -ExecStart=/usr/bin/swh --log-level <%= @runner_log_level %> scheduler --config-file <%= @config_file %> start-runner --period 10 +ExecStart=<%= @runner_command %> Restart=always RestartSec=10