Puppet 详细使用(1) Class类与module模块

分析 /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


你可能感兴趣的:(Class,puppet)