如何使用 Puppet Master 将文件复制到所有机器?

如何使用 Puppet Master 将文件复制到所有机器?

我在 ubuntu 11.04 中安装了 puppetmaster,并在所有客户端中安装了 puppet。我已将所有 puppet 客户端与 puppet master 连接起来。是否可以从 puppet master 将文件复制到所有这些 puppet 客户端?

例如:

我的桌面 (Puppet Master) 中有一个名为 datas.xls 的文件。如何将此文件复制到以下位置 (/home/operator1/Desktop/Backup/) 的所有 Puppet 客户端?

更新:

  • 您好,该文件仍然无法共享。
  • 如何修改此行puppet:///modules/module_name/datas.xls以使得要复制的文件位于此位置下/etc/puppet/modules/mymodule/manifests/datas.xls

客户端错误:(已解决)

root@testing:~# puppetd --test 
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Could not find class sudo at /etc/puppet/manifests/site.pp:2 on node testing.chn.jd.com
warning: Not using cache on failed catalog
err: Could not retrieve catalog; skipping run

客户端上的错误 2:

root@tme13:~# puppetd --test
err: Could not run Puppet configuration client: Could not retrieve local facts: bad URI(is not URI?): http://169.254.169.254/2008-02-01/meta-data/<HTML><HEAD><TITLE>HTTP access denied</TITLE></HEAD><BODY><img src/

新更新:

如何将此模块应用于所有节点?这样文件将被复制到所有节点。

答案1

Puppet 有点难以理解,所以通过示例学习并不是坏事。下面我假设你正在使用模块 - 如果你没有使用模块,或者你需要有关如何组合模块的更多详细信息,请在评论中说明。

假设你启动了一个名为 的新模块mymodule。在 Puppet Master 上的 Puppet 主目录(通常为/etc/puppet)中,你应该创建模块清单和文件目录:

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files

然后在该目录中创建一个名为的文件init.pp并输入:

class myfile {
    file { '/home/operator1/Desktop/Backup':
        ensure => directory,
        mode => '0755',
        owner => 'operator1',
        group => 'operator1',
    }

    file { "/home/operator1/Desktop/Backup/datas.xls":
        mode => "0644",
        owner => 'operator1',
        group => 'operator1',
        source => 'puppet:///modules/module_name/datas.xls',
    }
}

然后将datas.xls文件放入模块的files目录中 - 在此示例中为modules/mymodule/files/。(注意,也可以有一个templates目录用于模板)。

manifests/site.pp文件中,您需要导入模块并通过执行以下操作来包含类:

import 'mymodule'

node base {
    include myfile
}

node server1 inherits base {}
node server2 inherits base {
    # extra config here
}

确保所有节点都从基础节点继承,这就是您需要做的全部工作。从 puppet 0.25 开始,您可以在节点名称中使用正则表达式,例如:

node server[0-9] inherits base {}

如果您需要进一步说明,请在评论中告诉我。

设置客户端与傀儡大师对话

在客户端,您需要执行以下操作:

sudo apt-get install puppet

然后编辑/etc/default/puppet并更改START=noSTART=yes

还要编辑/etc/puppet/puppet.conf并向该部分添加一行[main],告诉它在哪里可以找到木偶大师:

server=puppet.mydomain.com

然后我们可以使用 进行测试运行sudo puppetd --test。如果出现密钥错误,您可能需要继续访问 Puppet Master 服务器并签署客户端密钥。要检查确切的名称,您可以执行sudo puppetca --list然后sudo puppetca --sign server1.mydomain.com(或从 list 命令中获取服务器名称)。

现在使用 启动 puppet 服务sudo service puppet start,然后您就可以离开了。puppet 服务将每小时运行一次,因此如果您更新 puppet 配方,那么您的所有客户端也将更新。

删除文件

我注意到在最初的问题中你想知道如何删除文件。你可以manifests/init.pp编辑

file { "/home/operator1/Desktop/Backup/datas.xls":
    ensure => absent,
}

其他实用技巧

如果你遇到问题,可以采取一些措施。在任何安装了 puppet 的机器上,你都可以通过运行以下命令来检查语法

puppet --parseonly --ignoreimport myfile.pp

或者通过删除标志来检查所有内容--ignoreimport,尽管这可能会导致一些有趣的错误消息,但我发现这些消息并不是真正的错误。您还可以通过执行以下操作在 puppet 客户端计算机上运行 puppet live:

sudo puppetd --test

它显示了各种有用的输出,错误和警告以不同的颜色突出显示。如果您想要更多详细信息,可以运行:

sudo puppetd --test --debug

但这通常会产生太多的输出而难以浏览,因此只有当您已经尝试了前面的步骤并且遇到困难并且需要查看所有操作时才可以这样做。

注意,这是基于 puppet 0.25.x 的,这是我目前在工作中使用的版本,也是 Ubuntu 10.04 中的版本。主要部分中的 puppet 代码肯定仍会起作用,但 puppet 的更高版本有新的标志,可以帮助调试输出。

相关内容