Puppet的清单文件中如何使用'sudo'命令?

7

我有一个在 Vagrant 中的 CentOS 基础镜像,我正在使用 Puppet 管理清单来创建它。以下是目前清单中的内容:

class base {
    exec { "sudocmd":
        path => ["/usr/bin/","/usr/sbin/","/bin"],
        command => "sudo yum update -y",
    }

    package { "man":
        ensure => present,
    }

    package { "bind":
        ensure => present,
    }

    package { "bind-utils":
        ensure => present,
    }
}

include base

但是当我输入 vagrant up 时,我收到了一个错误消息,提示 sudocmd yum update 返回了1的错误码。我在网上搜索过,但还没有找到解决方法。有人能提供帮助吗?

========编辑========= 我已经阅读了答案,并同意 - 谢谢各位。我只是在开发环境中使用它来瞎搞,所以在开始工作之前,我需要将其更新到最新版。

3个回答

11

使用Puppet,您不应该需要使用sudo命令,直接运行yum命令即可。通常,默认情况下命令将作为root用户运行,但您可以指定其他用户。

exec { "sudocmd":
    path => ["/usr/bin/","/usr/sbin/","/bin"],
    command => "yum update -y",
    user => root,
}

不过,我强烈建议您不要在puppet中使用任何非条件的exec。这将在每次 puppet 运行时都运行。正如Forrest已经说过的,这不是puppet的设计初衷。我不会使用puppet来进行yum update操作,我的exec总是带有createsonlyifrefreshonlyunless以确保它们仅在需要时运行。


3
所以 Puppet 并不是用来执行像 yum update 这样的任务的。它是一个配置管理工具,而不是完全替代这种任务的东西。此外,您会遇到许多问题。如果 Puppet 被守护程序化了,会对我们的生产环境产生负面影响吗?如果用户意外运行 Puppet 并更新破坏我们脚本的软件包(JDK、MySQL、PHP 等),会发生什么?据我所知,这没有解决方案,因为它并不被认为是一个问题。Serverfault 上的 Scott Pack 提供了一个非常详细的答案来回答类似的问题。

0

更新“路径(path)”属性对我很有帮助。sudo和apt-get命令可在/usr/bin/路径中使用。

exec { 'autoclean':
        command   => 'apt-get autoclean',
        path      => '/usr/local/bin/:/bin/:/usr/bin/',
        cwd       => '/home',
} 

我的Puppet版本:5.5.1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接