据我所知,木偶就像根一样。作为根,我启动
puppetd --onetime --no-daemonize --verbose所以我不明白为什么这不管用
exec { "useradd -m testuser":
path => "/bin:/usr/bin",
}我只得到:
...Exec[useradd -m testuser]/returns: change from notrun to 0 failed:useradd -m testuser returned 1 instead of one of [0] at...如果我直接执行这个命令,它就能正常工作。
有什么想法吗?
PS: exec { "touch / root /a.test":}是成功的,因此它实际上是作为root执行的。
PS2:我在执行"apt-get自动删除“时遇到了同样的问题。
发布于 2011-11-29 12:19:41
在大多数系统中,useradd将位于一个sbin文件夹中,而不是/bin或/usr/bin。您的路径应该是"/bin:/usr/bin:/sbin:/usr/sbin",。虽然这个解决方案相当麻烦,但我会使用用户类型而不是执行程序,它将使您更好地管理主机上的用户(检查-和存在需要等等)。
@user {
"testuser":
uid => ,
gid =>,
password => #hash of password,
home => ,
groups => ,
}这是一个虚拟资源,可以通过realize ( User[testuser])添加到主机上,允许多次引用它。
这是一个很好的简单的解决方案
发布于 2011-11-29 12:26:54
尝试使用以下命令运行该命令:
exec { "useradd -m testuser":
path => "/bin:/usr/bin",
logoutput => true,
}看看上面写了什么。它现在应该会在命令行上出现错误。另外,“on_failure”也是另一个选项,它只在命令失败时输出。我通常会:
Exec {
logoutput => on_failure,
}默认情况下,如果这些命令失败,那么我的所有命令都会在全局上输出有意义的内容。
但通常情况下,您可以使用“用户”资源,而不是:
user { "myusername":
ensure => present,
managehome => true,
}这里仅记录了与其他资源类型有关的详细文档:
发布于 2011-11-29 12:16:12
它可以工作,但是它返回1而不是0吗?尝试在该echo $?命令之后运行useradd。
通过使用内置的木偶类型来获得更好的错误消息,而不是像这样使用exec:
user { "foo":
ensure => present,
uid => 1001,
password => '<some password hash>',
shell => "/bin/bash",
home => "/home/foo",
groups => ["foogroup"],
managehome => true,
}你有什么理由不这么做而用exec吗?
https://serverfault.com/questions/335742
复制相似问题