vcsrepo puppet 模块不使用 mercurial 的用户参数

vcsrepo puppet 模块不使用 mercurial 的用户参数

我有一个依靠 puppet vcsrepo 根据标签更新本地 mercurial 存储库中的代码的服务器。

当我使用 vcsrepo“revision”参数更改所需标签时,vcsrepo 应该对 repo 执行 hg pull 和 hg update。

一切运行良好。

但是,我创建了该服务器的克隆来测试其他东西,现在当我运行 puppet 更新时出现错误:

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'
  }

IE

hg 命令应该运行为用户这样就满足了 mercurial 中的信任要求。

但它不起作用。克隆服务器只是对原始服务器逐个进行复制。

答案1

我明白了。

Puppet 以 root 身份运行。这意味着对于使用 mercurial 的 vcsrepo,root 用户需要信任正在更新的 repo 中拥有 .hgrc 文件的用户。

为了建立这种信任,您添加

[trusted]
user = 'user'

到 /root/.hgrc

当执行 mercurial 时,它会在 $HOME/.hgrc 中寻找信任关系。

在我现有的服务器上,puppet 代理是通过 cron 执行的,因此 cron 会将 $HOME 视为 /root/.hgrc

在克隆的服务器上,我以交互方式运行 puppet update,并使用以下命令打开 root shell:

sudo bash

但是,这会保留我的 $HOME 变量,其值与我的初始用户的值相同,因此 mercurial 无法在 /root/.hgrc 中找到所需的受信任信息

当我使用以下命令建立 root shell 时

sudo -i

已设置正确的 $HOME 变量并且 puppet 更新有效。

vcsrepo 中的 'user' 参数指的是用于向 mercurial 远程服务器进行身份验证的用户,而不是在本地服务器上运行该进程的用户。

相关内容