puppet中如果资源比较多的话,定义模块和类是比较方便的方式之一,在使用了模块之后,需要在manifests文件中定义入口文件和节点的清单文件。但是如果想要实现的功能比较简单的话,可以直接将内容定义到site.pp文件中,不过这样会显得site.pp文件会显得过于的冗长。
在实际生产中,我线上的puppet只是用来同步一些文件和账号,下面简明介绍下puppet的设置。
cat site.pp
group {'username':
ensure => present,
}
user { 'username':
ensure => 'present',
home => '/home/username',
managehome => true,
password => ‘******’
password_max_age => '99999',
password_min_age => '0',
shell => '/bin/bash',
require => Group['username'],
}
file_line { 'username':
path => '/etc/sudoers',
line => 'username ALL=(ALL) ALL',
}
file_line这个资源实现的是保证某个配置文件中确定要包含某一行的数据。但是file_line没有默认安装,需要安装一个标准库。puppet module install puppetlabs-stdlib,安装上之后,就可以使用了。
下面创建一个file资源
file { "/etc/yum.repos.d/epel.repo":
ensure => "present",
owner => "root",
group => "root",
source => "puppet:///soft/files/epel.repo",
mode => 755,
}
在使用file资源时,source的属性格式为puppet:///modules/module_name/file_name,但是现在并没有使用模块,这个soft是从何而来呢。
在/etc/puppet目录下,有一个配置文件叫做fileserver.conf,我们可以通过定义这个配置文件来进行文件目录的定义
将下面的代码添加到配置文件中去。
[soft]
path /etc/puppet/manifests
allow *
之后在/etc/puppet/manifests这个目录下面创建files文件,然后将我们所需的文件在此创建。我们就能使用这个路径进行文件资源的引用了,从而不必通过模块的方式。