分析 /etc/puppet/manifests 的结构
root@main:/etc/puppet/manifests# tree . ├── classes │ ├── apache.pp │ ├── apt.pp │ ├── dovecot.pp │ ├── dovecot.pp.bak │ ├── icedove.pp │ ├── index.html │ ├── localrepo.pp │ ├── lynx.pp │ ├── osticket.pp │ ├── tcpdump.pp │ ├── toolbox.pp │ └── users.pp ├── nodes.pp └── site.pp
1.site.pp 主文件里include 各个node的配置 和import 各个类
import "classes/*.pp" import "nodes.pp" include vim include tcpdump include lynx include users include startpuppet
2. nodes.pp 具体针对每个node 进行puppet类的分配
node 'aptcache.test.group5.local' { class {'aptcacherng':} } node 'master.test.group5.local' { include puppetmaster } node default{ }
class里的 各个pp可以直接引用,因为再site.pp 里已经 import了
module 也可以直接使用 或者 用 class {‘aptcacherng’:}
class 类 怎么写 举个例子
class tcpdump { package { 'tcpdump': ensure => installed, } }
一个class 可以包含的各种资源
├── classes │ ├── file │ ├── service │ ├── package │ ├── user │ ├── group │ ├── exec │ ├── cron │ ├── notify
分析一个module 结构
root@hai:~/group5/modules/postfix# tree . ├── files │ ├── main.cf │ └── master.cf ├── manifests │ ├── config.pp │ ├── init.pp │ ├── package.pp │ ├── postinstall.pp │ └── service.pp ├── Modulefile ├── propuppet-postfix │ ├── manifests │ │ └── init.pp │ ├── Modulefile │ ├── README │ ├── spec │ │ └── spec_helper.rb │ └── tests │ └── init.pp ├── README ├── spec │ └── spec_helper.rb ├── templates │ └── main.cf.erb └── tests └── init.pp
manifest里 init.pp 为初始文件,里面包含其他 config.pp-service.pp-package.pp 等等
之后 再config.pp 里 可以配置 包含一个类 类里有各种资源 有时config会应用source 指向files 文件
而files 里会有 config 所需要的source 这里的 files的文件 master.cf main.cf 和 apt-get 安装的postfix 一模一样copy就好了 ,可以照此写module
看看config.pp 怎么写
class postfix::config { File { owner => 'postfix', group => 'postfix', mode => 0644, } file { '/etc/postfix/master.cf': ensure => present, source => 'puppet:///modules/postfix/master.cf', require => Class['postfix::package'], notify => Class['postfix::service'], } file { '/etc/postfix/main.cf': ensure => present, source => 'puppet:///modules/postfix/main.cf', #content => template('postfix/main.cf.erb'), require => Class['postfix::package'], notify => Class['postfix::service'], } }
注意到 source 怎么写 source => ‘puppet:///modules/postfix/main.cf’, 文件的位置在 /modules/postfix/files 下
再举个列 看看 模块 ssh结构
root@hai:~/group5/modules/ssh# tree
.
├── files
│ └── sshd_config
└── manifests
├── config.pp
├── init.pp
├── install.pp
└── service.pproot@hai:~/group5/modules/ssh# cd manifests/
root@hai:~/group5/modules/ssh/manifests# cat init.pp
class ssh {
include ssh::install, ssh::config, ssh::service
}
root@hai:~/group5/modules/ssh/manifests# cat config.pp
class ssh::config {
file { “/etc/ssh/sshd_config”:
ensure => present,
owner => ‘root’,
group => ‘root’,
mode => 0600,
source => “puppet:///modules/ssh/sshd_config”,
require => Class[“ssh::install”],
notify => Class[“ssh::service”],
}
}
root@hai:~/group5/modules/ssh/manifests# cat service.pp
class ssh::service {
service { “ssh”:
ensure => running,
hasstatus => true,
hasrestart => true,
enable => true,
require => Class[“ssh::config”],
}
}root@hai:~/group5/modules/ssh/manifests# cat install.pp
class ssh::install {
package { “openssh-server”:
ensure => present,
}
}
发现 init.pp 的class ssh
install.pp class ssh::install 两个::后不一样
service.pp class ssh::service
config.pp class ssh::config