|
类型一、文件
cat file.pp
file{'/etc/nginx/nginx.conf':
ensure => file, #文件类型
source => '/app/nginx.conf', #要复制的原文件
path => '/etc/nginx/nginx.conf', #目标路径,与title重复,所以此处可以省略
owner => root,
group => root,
mode => 0644,
}
#我们将nginx的配置文件监听端口修改为其他值如90,配置文件修改了,应该重启nginx服务,这部分后面会介绍
#以上实现复制文件的方法,下面进行目录的配置实现
类型二、目录
cat directory.pp
file{'yum.repos.d':
ensure => directory,
path => '/tmp/yum.repos.d/',
source => '/etc/yum.repos.d/', #在/tmp下创建目录yum.repos.d,但是此目录下的文件是不会一并复制过来的
recurse => true, #所以需要使用递归参数recurse,将目录中的文件、子目录全复制到path指定路径下
}
#如果将文件复制到目录中,即source是文件而path是目录而且ensure也指定目录,最终复制是有问题的
#上述两个例子都是复制文件和目录,如果创建文件或目录则使用ensure指定present即可
类型三、符号链接
cat link.pp
file{'/tmp/yum.d': #本示例未使用path,则title充当目标路径,即在tmp目录下创建的文件为yum.d
ensure => link, #符号链接,创建的yum.d文件为软链接
target => '/etc/nginx/nginx.conf', #软链接文件指向的原始文件
}
#path或者title指定的是将要创建的对象,不论是文件还是目录
#符号链接文件的权限、属主、属组可以不用考虑
订阅和通知关系,下面通过综合示例说明订阅与通知关系
cat package.pp
package{'nginx':
ensure => latest,
name => 'nginx',
}
#首先,安装软件包
file{'nginx.conf':
ensure => file,
path => '/etc/nginx/nginx.conf',
source => '/app/nginx.conf',
owner => 'root',
group => 'root',
mode => 0644,
require => Package['nginx'], #file资源依赖于package资源
notify => Service['nginx'], #当此配置文件修改时就会通知service资源,触发service的动作
}
#编辑配置文件,将修改后的文件通过file资源复制到目标
service{'nginx':
ensure => running,
name => 'nginx',
hasrestart => true,
restart => 'systemctl restart nginx',
#subscribe => File['nginx.conf'], #此资源订阅file资源,即file资源有改动此资源就会被通知并采取行动
}
#由于notify与subscribe都能感知变动并立即通知,所以二者的功能是重合的,只是放置的位置不同,因此只是用其中一个
#下述示例与本示例效果一样
package{'nginx':
ensure => latest,
name => 'nginx',
} -> #此方法表示package资源先于file资源
file{'nginx.conf':
ensure => file,
path => '/etc/nginx/nginx.conf',
source => '/app/nginx.conf',
owner => 'root',
group => 'root',
mode => 0644,
} ~> #此方法表示file资源通知service资源或者service资源订阅file资源
service{'nginx':
ensure => running,
name => 'nginx',
hasrestart => true,
restart => 'systemctl restart nginx',
}
#本例与上例效果都是一样的,此外还有第三种方法能够达到同样的效果
package{'nginx':
ensure => latest,
name => 'nginx',
}
file{'nginx.conf':
ensure => file,
path => '/etc/nginx/nginx.conf',
source => '/app/nginx.conf',
owner => 'root',
group => 'root',
mode => 0644,
}
service{'nginx':
ensure => running,
name => 'nginx',
hasrestart => true,
restart => 'systemctl restart nginx',
}
Package['nginx'] -> File['nginx.conf'] ~> Service['nginx']
#单独一处,定义依赖及通知关系 |
|