Кукольный модуль vcsrepo не использует пользовательский параметр для Mercurial

У меня есть сервер, который использует марионетку vcsrepo для обновления кода в локальном хранилище Mercurial на основе тега.

Когда я изменяю требуемый тег, используя параметр "revision" vcsrepo, vcsrepo должен выполнить hg pull и hg update для репозитория.

Это все работает нормально.

Однако я создал клон этого сервера для проверки чего-то другого, и теперь, когда я запускаю обновление кукол, я получаю сообщение об ошибке:

Not trusting file /var/hg/repo/.hg/hgrc from untrusted user *user*, group *group*

Это происходит потому, что puppet работает от имени пользователя root, а файл hgrc принадлежит пользователю.

Пользовательский параметр в vcsrepo должен иметь дело с этим:

vcsrepo { '/var/hg/repo':
    ensure   => present,
    provider => hg,
    source   =>       'ssh://****',
    user => 'user',
    owner => 'user',
    group => 'group',
    revision => '1.12'
  }

т.е.

Предполагается, что команды hg запускаются как пользователь, так что требование доверия в mercurial выполнено.

Но это не работает. Сервер-клон - это битная копия оригинала.

1 ответ

Я понял это.

Кукольный бежит как корень. Это означает, что для vcsrepo, использующего mercurial, пользователь root должен доверять пользователю, которому принадлежит файл.hgrc в обновляемом репо.

Чтобы установить это доверие, вы добавляете

[trusted]
user = 'user'

В /root/.hgrc

Когда выполняется mercurial, он ищет в $HOME/.hgrc доверительные отношения.

На моем существующем сервере агент puppet выполнялся с помощью cron, поэтому cron увидел бы $ HOME как /root/.hgrc

На клонированном сервере я запустил обновление марионетки в интерактивном режиме, открыв оболочку root с помощью

sudo bash

Однако это сохраняет мою переменную $ HOME с тем же значением, что и у моего первоначального пользователя, поэтому mercurial не может найти необходимую доверенную информацию в /root/.hgrc

Когда я установил корневую оболочку с

sudo -i

Была установлена ​​правильная переменная $ HOME, и обновление куколки сработало.

Параметр 'user' в vcsrepo относится к пользователю, используемому для аутентификации на удаленном сервере Mercurial, а не к пользователю, который запускает процесс на локальном сервере.

Другие вопросы по тегам