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


12

我已经在ubuntu 11.04中安装了puppetmaster,并且已经在所有客户端中安装了puppet。我已经与所有的木偶客户一起加入了木偶大师。可以将文件从人偶母版复制到所有这些人偶客户端吗?

例如:

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

更新:

  • 您好,该文件没有被共享。
  • 如何修改此行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/

新更新:

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


...但是你不是已经问过这个问题了吗?askubuntu.com/questions/61080/…–
fossfreedom

是的,但是该解决方案不再起作用。
karthick87

同样不是很清楚,用户只是从某些网站复制了内容。
karthick87

仍然不是一个提出新问题的理由(?),顺便说一句,我从Jorge给我的链接中复制了一个,他告诉我c / p;)afaik该答案中的内容仍然有效!
Rinzwind

这里的另一个参考:serverfault.com/questions/200101/...
Rinzwind

Answers:


24

木偶有点像个怪物,可以带头走,所以通过榜样学习并不是坏事。在下面,我假设您正在使用模块-如果您不使用模块,或者是否需要有关如何将模块组装在一起的更多详细信息,请在评论中说。

假设您启动了一个名为的新模块mymodule。在puppet主目录的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
}

确保所有节点都从base继承,这应该是您需要做的所有事情。从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。如果您遇到密钥错误,则可能需要继续操作人偶主服务器并签署客户端密钥。要检查你可以做确切的名字sudo puppetca --list,然后sudo puppetca --sign server1.mydomain.com(或任何服务器名称是从列表命令)。

现在开始使用Puppet Service,sudo service puppet start您应该离开了。人偶服务将每小时运行一次,因此,如果您更新人偶配方,那么所有客户也将被更新。

删除文件

我在原始问题中注意到您想知道如何删除文件。您可以将修改manifests/init.pp

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

其他有用的提示

如果您遇到麻烦,可以做一些事情。在安装了木偶的任何计算机上,您可以通过运行以下命令检查语法

puppet --parseonly --ignoreimport myfile.pp

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

sudo puppetd --test

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

sudo puppetd --test --debug

但这通常会产生太多的输出,以至于很难通过,因此只有在您已经尝试了前面的步骤并且受阻并需要查看所有工作完成后,才可以这样做。

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


让我今晚尝试此解决方案,并让您知道更新。非常感谢:)
karthick87

如何修改此行puppet:///modules/module_name/datas.xls要复制的文件是这个位置下/etc/puppet/modules/mymodule/manifests/datas.xls
karthick87

应该将要复制的文件放入/etc/puppet/modules/mymodule/files/datas.xls-我将更新答案以使其更清楚。
Hamish Downer

好的,谢谢。如何运行清单?
karthick87

如何将此模块应用于puppetmaster的所有节点?而不是通过运行将其强行应用于每个节点puppet agent --test
karthick87'1
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.