设为首页 收藏本站
查看: 999|回复: 0

[经验分享] Puppet 3.0资源介绍

[复制链接]

尚未签到

发表于 2018-8-3 06:21:54 | 显示全部楼层 |阅读模式
  Puppet 3.0资源介绍
  一,puppet资源:
  Puppet将软件安装,文件配置,服务管理,用户添加,定时计划配置等抽象成资源。
  二,资源类型:
  1,file管理文件,通过一定的配置也可以管理目录
  2,package管理软件包,会将软件自动安装
  3,service 管理服务,设置服务运行还是停止
  4,cron 设置定时任务
  5,user添加用户
  6,group添加组
  7,exec如果资源不能满足任务时,可以通过与shell 命令交互来完成
  8,notify资源之间通信
  三,资源语法格式:
  Type { “title”:
  Attribute =>a,
  Attribute =>b,
  }
  Type 就是上面的资源类型file……,“title”为了标识这个资源,attribute属性,如果权限,用户之类。
  四,资源使用
  1,应用于class中,完成某一个具体的应用
  2,应用于site.pp中,作为全局配置
  五,资源详解
  1,file
  对文件:有用户,用户组,权限,链接文件,内容
  对目录:用户,用户组,权限,清理目录及子目录。
  2,file资源属性
  File { “absolute path”:
  Ensure => present/absent/file/directory/link ,
  #定义absolute path是否存在及它应该有哪些角色
  #ensure定义资源处于什么状态,present表示如果client不存在则自动创建,absent表示如果client端存在这个文件,则删除,file表示文件,directory表示目录,link表示链接
  User =>”username”,
  Group => “groupname”,
  Mode => 0777,
  #四位八进制
  Path=>”absolute path”,
  #如果在title指定绝对路径了,在这可以省略,提高处理效率。
  Soure => “puppet:///url”,
  #指定到master上文件的路径或者client上本地文件路径
  Content=>”content”,
  #指定文件内容的字符串,也可以是模板或者输出内容的函数,模版常用
  Target =>
  #用于链接文件,创建链接文件时的目标文件
  Recurse =>
  #对应目录,递归
  Purge =>
  #对于没有定义的目录或文件,不让其存在这目录文件中。清理作用
  }
  
  }
  其他的属性
  Backup,checksum,force,igore,links,provider,recurselimit,replace,selrange,selrole,seltype,seltype,seluser,sourceselect,type
  3,flie资源的应用
  /etc/puppet下manifests是client的入口,当client来请求资源来,从manifests请求。在manifests下的site.pp是必须存在的。所有的客户端需要的资源都在这里定义。如果服务器过多,肯定会造成这个文件庞大无比,解决办法是给客户端单独新建一个文件,将资源属性定义到这,然后在site.pp 用import将其文件包括进来就行了。如果一台服务器有许多服务时,可以为这台服务器在manifests下新建一个目录,然后通过import  node/*将node目录的文件都包含进来
  [root@master manifests]# touch site.pp  需要手工创建
  [root@master manifests]# ls
  Site.pp
  [root@master manifests]# touch node.pp
  [root@master manifests]# echo "import ‘node.pp’" >> site.pp
  4,实例
  1)文件
  [root@master manifests]# vim node.pp
  file { "/etc/ssh/sshd_config":
  ensure=> present,
  owner => root,
  group => root,
  mode => 0600,
  }
  [root@client ~]# mv /etc/ssh/sshd_config /root
  [root@client puppet]# puppet agent --verbose --no-daemonize 下面表示成功
  Notice: Starting Puppet client version 3.2.3
  Info: Retrieving plugin
  Info: Caching catalog for client
  Info: Applying configuration version '1375107271'
  Notice: /Stage[main]//File[/etc/ssh/sshd_config]/ensure: created
  Notice: Finished catalog run in 0.04 seconds
  2)目录
  [root@master manifests]# vim node.pp
  file { "/etc/ssh/sshd_config":
  ensure=> directory,
  owner => root,
  group => root,
  mode => 0600,
  recurse =>true,
  purge => true,
  #如果在/test下目录不在资源管理的范围,则会将其删除,必须加下面的force才有效,删除目录需要配合force,删除文件则不需要
  force =>true,
  igore => test.txt #表示test.txt将忽略,不会被删除。
  }
  [root@master manifests]# vim node.pp  对/etc/puppet/puppet.conf创建链接文件,链接名为/test/test。
  file { "/test":
  ensure=> directory,
  owner => root,
  group => root,
  mode => 0600,
  recurse => true,
  purge => true,
  force => true,
  }
  file { "/test/test":
  ensure => link,
  target => "/etc/puppet/puppet.conf",
  }
  ~
  [root@client puppet]# puppet agent --verbose --no-daemonize  查看有没有创建
  [root@master manifests]# vim site.pp  定义不同节点的资源,也可以这样写
  node "client1" {
  file { "/test_client1":
  ensure => present,
  }
  node "client2" {
  file { "/test_client2":
  ensure => present,
  }
  [root@client puppet]# puppet agent --test也可以实现上面--verbose
  
  六,Package资源属性
  Package { “package name”:
  Ensure =>present/absent/latest/{version}/purged,
  #present 只要存在即可
  #absent 无依赖可删除,如果有依赖会报错,并不删除,只能删除没有依赖的软件包
  #lastest 会升级到最新版本
  #version 指定安装具体某个版本
  #purged 删除该包包括有依赖性的包,如果有依赖,则依赖包也会被删除,使用有风险,少使用
  Name => package name,
  #在titile里指定了这里可以省略
  }
  实例
  vim site.pp
  node "client" {
  file { "/test_client":
  ensure => present,
  }
  package { "httpd":
  ensure => present,
  }
  [root@client ~]# puppet agent --test
  Info: Retrieving plugin
  Info: Caching catalog for client
  Info: Applying configuration version '1375177502'
  Notice: /Stage[main]//Node[client]/File[/test_client]/ensure: created
  Notice: /Stage[main]//Node[client]/Package[httpd]/ensure: created
  Notice: Finished catalog run in 42.28 seconds
  vim site.pp
  node "client" {
  file { "/test_client":
  ensure => present,
  }
  package { "openldap":
  ensure => absent,
  }
  [root@client ~]# puppet agent --test
  Info: Retrieving plugin
  Info: Caching catalog for client
  Info: Applying configuration version '1375177769'
  Error: Execution of '/bin/rpm -e openldap-2.4.23-26.el6.x86_64' returned 1: error: Failed dependencies:
  liblber-2.4.so.2()(64bit) is needed by (installed) cyrus-sasl-2.1.23-13.el6.x86_64
  liblber-2.4.so.2()(64bit) is needed by (installed) postfix-2:2.6.6-2.2.el6_1.x86_64
  liblber-2.4.so.2()(64bit) is needed by (installed) sudo-1.7.4p5-11.el6.x86_64
  liblber-2.4.so.2()(64bit) is needed by (installed) apr-util-ldap-1.3.9-3.el6_0.1.x86_64
  七,Service资源
  Service  {“package name”:
  Ensure =>running(true)/stopped(false),
  Enable =>true/false,
  #enable确保资源开机启动还是不启动
  Status,start,stop,restart=>command,
  #如果不支持标准的命令时,如service xxx start,表示标准的,一些编译的软件,不支付标准的,而要查询资源的属性时,需要执行命令,command表示命令行
  Hasrestart => true/false,
  #true表示直接执行restart命令重启服务,false表示先对服务stop,再start
  Hasstatus =>true/false,
  #表示在进程查看服务的状态
  }
  实例
  Vim site.pp
  node "client" {
  file { "/test_client":
  ensure => present,
  }
  package { "openldap":
  ensure => present,
  }
  service { "httpd":
  ensure => running,
  }
  }
  #node 是一个关键字,指定哪台客户端client是客户端主机名,在{}写上需要在client执行的作业
  #由于httpd支持标准启动,所以可以不需要定义start =>command
  [root@client ~]# puppet agent --test
  Info: Retrieving plugin
  Info: Caching catalog for client
  Info: Applying configuration version '1375179204'
  Notice: /Stage[main]//Node[client]/Service[httpd]/ensure: ensure changed 'stopped' to 'running'
  Info: /Stage[main]//Node[client]/Service[httpd]: Unscheduling refresh on Service[httpd]
  Notice: Finished catalog run in 0.42 seconds
  将httpd移到到/root目录下,此时不再支持service来启动,需要指定路径/root/httpd start,那么此时就需要定义start =>command
  [root@client ~]# service  httpd stop
  Stopping httpd:                                            [  OK  ]
  [root@client ~]# mv /etc/init.d/httpd  .
  Vim site.pp
  node "client" {
  file { "/test_client":
  ensure => present,
  }
  package { "openldap":
  ensure => present,
  }
  service { "httpd":
  ensure => running,
  Start => “/root/httpd start”,
  }
  }
  [root@client ~]# puppet agent --test
  Info: Retrieving plugin
  Info: Caching catalog for client
  Info: Applying configuration version '1375179610'
  Notice: /Stage[main]//Node[client]/Service[httpd]/ensure: ensure changed 'stopped' to 'running'
  Info: /Stage[main]//Node[client]/Service[httpd]: Unscheduling refresh on Service[httpd]
  Notice: Finished catalog run in 0.32 seconds
  Vim site.pp
  node "client" {
  file { "/test_client":
  ensure => present,
  }
  package { "openldap":
  ensure => present,
  }
  service { "httpd":
  ensure => running,
  #start => “/root/httpd start”,
  restart => “/root/httpd restart”,
  hasrestart =>”true”,
  #hasrestart 要服务支持标准的启动,如果不能则需要将上面的start改成restart
  }
  }
  
  八,管理ssh服务
  1,ssh相关软件包的安装
  2,配置文件的管理
  3,服务运行管理
  [root@master puppet]# puppet master --configprint modulepath
  /etc/puppet/modules:/usr/share/puppet/modules
  查看模块配置文件的路径,这么两个路径的模块都可以用puppet实现
  
  [root@master modules]# mkdir  -p  ssh/{files,manifests,templates}
  创建ssh模块,需要在modules建立ssh,并在下面建立上面三个文件夹。模块都需要这三个目录。
  
  Files放一些静态文件,如果配置文件之类
  Manifests存放一些代码,必须有init.pp这个文件,就像site.pp文件一样,必须存在。
  Templates 当files存放的文件不能完成要求时,可以在这个目录下定义一些模板,让其引用。
  [root@master modules]# vim ssh/manifests/init.pp
  class ssh {
  package { "openssh-server":
  ensure => present,
  }
  file { "/etc/ssh/sshd_config":
  ensure => present,
  owner => root,
  group => root,
  mode =>0600,
  source =>"puppet:///modules/ssh/sshd_config",
  #class关键字,表示定义ssh模块
  #source的作用是当客户端的sshd_config与source定义的sshd_config内容不一样时,将其下载下来,并覆盖自己的配置文件。
  #puppet://表示采用puppet协议,modules表示连接到modulepath 下的路径中找,而modulespath,有两个路径,如果在/etc/puppet/modules中找不到则到/usr/share/puppet/modules下找。如果两个目录都找不到,则会报错。
  [root@master puppet]# puppet master --configprint modulepath
  /etc/puppet/modules:/usr/share/puppet/modules
  #ssh表示模块名字,不需要再指定files,因为模块下面这三个目录是固定的。
  #sshd_config表示到files下找这个文件。
  
  notify => service ['sshd'],
  #如果files资源有什么变动则通知下面的service资源。
  }
  service { "sshd":
  ensure =>running,
  enables => true,
  hasrestart =>true,
  hasstatus =>true,
  }
  }
  [root@master modules]# cp /etc/ssh/sshd_config  ssh/files/
  [root@master puppet]# echo > manifests/site.pp
  [root@client ~]# puppet agent --test

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545544-1-1.html 上篇帖子: Suse 11 sp1下puppet安装配置文档 下篇帖子: puppet 手册之puppet rsync 模块应用完整版
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表