如何使用 puppet master 将文件复制到所有机器?

kar*_*k87 13 puppet

我已经在 ubuntu 11.04 中安装了 puppetmaster 并且我已经在我的所有客户端中安装了 puppet。我已经和木偶大师一起加入了我所有的木偶客户。是否可以将文件从 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
Run Code Online (Sandbox Code Playgroud)

客户端错误 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/
Run Code Online (Sandbox Code Playgroud)

新更新:

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

Ham*_*ner 26

Puppet 有点让人摸不着头脑,所以以身作则并不是坏事。在下面,我假设您正在使用模块 - 如果您没有使用,或者您需要有关如何将模块组合在一起的更多详细信息,请在评论中说明。

假设您启动了一个名为mymodule. 在/etc/puppetpuppet master 的 puppet 主目录(通常是)中,您应该创建模块清单和文件目录:

mkdir -p modules/mymodule/manifests
mkdir -p modules/mymodule/files
Run Code Online (Sandbox Code Playgroud)

然后在该目录中创建一个名为的文件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',
    }
}
Run Code Online (Sandbox Code Playgroud)

然后将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
}
Run Code Online (Sandbox Code Playgroud)

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

node server[0-9] inherits base {}
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo apt-get install puppet
Run Code Online (Sandbox Code Playgroud)

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

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

server=puppet.mydomain.com
Run Code Online (Sandbox Code Playgroud)

然后我们可以用sudo puppetd --test. 如果您收到密钥错误,您可能需要转到 Puppet 主服务器并签署客户端密钥。要检查您可以执行的确切名称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,
}
Run Code Online (Sandbox Code Playgroud)

其他有用的提示

如果您遇到麻烦,您可以做一些事情。在安装了 puppet 的任何机器上,您都可以通过运行来检查语法

puppet --parseonly --ignoreimport myfile.pp
Run Code Online (Sandbox Code Playgroud)

或者通过取出--ignoreimport标志来检查整个批次,尽管这可能会导致一些有趣的错误消息,而这些消息并不是我发现的真正错误。您还可以通过执行以下操作在 puppet 客户端机器上实时运行 puppet:

sudo puppetd --test
Run Code Online (Sandbox Code Playgroud)

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

sudo puppetd --test --debug
Run Code Online (Sandbox Code Playgroud)

但这通常会产生如此多的输出,以至于很难通过,所以只有在您已经尝试过前面的步骤并且被卡住并且需要看到所有事情都完成时才这样做。

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