diff --git a/site-modules/profile/manifests/swh/deploy/worker/loader_opam.pp b/site-modules/profile/manifests/swh/deploy/worker/loader_opam.pp index f6584033..d7820993 100644 --- a/site-modules/profile/manifests/swh/deploy/worker/loader_opam.pp +++ b/site-modules/profile/manifests/swh/deploy/worker/loader_opam.pp @@ -1,74 +1,69 @@ # Deployment for opam loader class profile::swh::deploy::worker::loader_opam { include ::profile::swh::deploy::worker::loader_package $private_tmp = lookup('swh::deploy::worker::loader_opam::private_tmp') $user = lookup('swh::deploy::worker::loader_opam::user') $group = lookup('swh::deploy::worker::loader_opam::group') $packages = ['opam'] package {$packages: ensure => 'present', } ::profile::swh::deploy::worker::instance {'loader_opam': ensure => present, private_tmp => $private_tmp, sentry_name => 'loader_core', require => [ Package[$::profile::swh::deploy::loader_package::packages], Package[$packages], ], } $opam_instances = lookup('swh::deploy::worker::opam::instances') + $template_path = "profile/swh/deploy/loader_opam" $opam_root = lookup('swh::deploy::worker::opam::root_directory') file {$opam_root: ensure => 'directory', owner => $user, group => $group, recurse => true, mode => '0644', } - $binary_cmd = "/usr/bin/opam" + $opam_manage_shared_state = "opam-manage-shared-state" + $opam_manage_state_script = "/usr/local/bin/${opam_manage_shared_state}.sh" + file {$opam_manage_state_script: + ensure => 'file', + owner => $user, + group => $group, + mode => '0755', + content => template("${template_path}/${opam_manage_shared_state}.sh.erb"), + } each ( $opam_instances ) | $instance, $instance_url | { - $opam_manage_shared_state = "opam-manage-shared-state" $opam_manage_service_name = "${$opam_manage_shared_state}-${instance}" $opam_manage_shared_state_timer_name = "${opam_manage_service_name}.timer" - # update the instance repository if present - $update_command = "${binary_cmd} repo --all --root ${opam_root} | grep ${instance_url} && ${binary_cmd} update --root ${opam_root}" - # common suffix command for the opam commands - $command_suffix = "--root ${opam_root} ${instance} ${instance_url}" - if $instance == "opam" { - # Install the default rootdir for the main opam instance - $install_command = "${binary_cmd} init --reinit --bare --no-setup ${command_suffix}" - } else { - # Other instances will just be added to the main opam root directory - $install_command = "${binary_cmd} repository add ${command_suffix}" - } - - # Either update the instance if present or install/add that new instance - $opam_command = "( ${update_command} ) || ${install_command}" - - # Template uses variables + # Templates uses variables # - $user # - $group # - $opam_root # - $opam_manage_service_name # - $command + ::systemd::timer { $opam_manage_shared_state_timer_name: - timer_content => template("profile/swh/deploy/loader_opam/${opam_manage_shared_state}.timer.erb"), - service_content => template("profile/swh/deploy/loader_opam/${opam_manage_shared_state}.service.erb"), + timer_content => template("${template_path}/${opam_manage_shared_state}.timer.erb"), + service_content => template("${template_path}/${opam_manage_shared_state}.service.erb"), enable => true, require => [ Package[$packages], File[$opam_root], + File[$opam_manage_state_script], ], } } } diff --git a/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.service.erb b/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.service.erb index 794ea8d6..8efb37ef 100644 --- a/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.service.erb +++ b/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.service.erb @@ -1,17 +1,17 @@ # Opam manage shared state unit file # Managed by puppet class profile::swh::deploy::worker::loader_opam # Changes will be overwritten [Unit] Description=Software Heritage Manage OPAM shared state (<%= @instance %>) Requires=network.target After=network.target [Service] User=<%= @user %> Group=<%= @group %> Type=simple -ExecStart=<%= @opam_command %> +ExecStart=/usr/local/bin/opam-manage-shared-state.sh <%= @instance %> <%= @instance_url %> [Install] WantedBy=multi-user.target diff --git a/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.sh.erb b/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.sh.erb new file mode 100644 index 00000000..96ac262e --- /dev/null +++ b/site-modules/profile/templates/swh/deploy/loader_opam/opam-manage-shared-state.sh.erb @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Managed by puppet class profile::swh::deploy::worker::loader_opam +# Changes will be overwritten + +CMD=/usr/bin/opam +ROOT_DIR=<%= @opam_root %> +INSTANCE=$1 +INSTANCE_URL=$2 + +if [ $INSTANCE = "opam" ]; then + # Opam instance is considered the main instance so we must initialize the repository + # if not present, otherwise we update it + ( $CMD repo --all --root $ROOT_DIR | grep $INSTANCE_URL && $CMD update --root $ROOT_DIR ) \ + || $CMD init --reinit --bare --no-setup --root $ROOT_DIR $INTSANCE $INSTANCE_URL +else + # Other instances, if present should be updated. If not present, they should be added + # to the main root_dir as extra instances + ( $CMD repo --all --root $ROOT_DIR | grep $INSTANCE_URL && $CMD update --root $ROOT_DIR ) \ + || $CMD repository add --root $ROOT_DIR $INSTANCE $INSTANCE_URL +fi