sonyet 发表于 2018-8-1 13:03:54

Puppet--自动化运维工具基本功能介绍

类型一、文件  
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']
  
#单独一处,定义依赖及通知关系
页: [1]
查看完整版本: Puppet--自动化运维工具基本功能介绍