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

[经验分享] linux运维自动化之puppet简单应用(一)

[复制链接]

尚未签到

发表于 2018-8-2 11:46:42 | 显示全部楼层 |阅读模式
  一、pupper概述
  puppet,这是目前运维主流的运维自动化工具,大多数运维管理人员都听说过,或者在使用以及在正在考虑使用中。puppet可以配合cobbler,puppet也可以配合func实现运维自动化,简单化,化繁杂为简单。
  1.什么是puppet
  puppet是一种Linux、Unix平台的集中配置管理系统,使用ruby语言,可管理配置文件、用户、cron任务、软件包、系统服务等。puppet把这些系统实体称之为资源,puppet的设计目标是简化对这些资源的管理以及妥善处理资源间的依赖关系。
  2.puppet的语法
  由于puppet是由ruby写的,因此如ruby语法非常相近,关于ruby的介绍:请参阅http://ruby-lang.org
  3.puppet能管理哪些资源:
  能管理file(文件),user(用户),group(组),package(软件包),mount(挂载),schedule和cron(计划任务),service(服务),tidy(清理),yumrepo(yum仓库),sshkey(ssh认证)等常用资源。
  4.Puppet的工作模式
  Puppet是一个C/S架构的配置管理工具,在中央服务器上安装puppet-server软件包(被称作Puppetmaster)。在需要管理的目标主机上安装puppet客户端软件(被称作PuppetClient)。
  当客户端连接上Puppetmaster后,定义在Puppetmaster上的配置文件会被编译,然后在客户端上运行。每个客户端默认每半个小时和服务器进行一次通信,确认配置信息的更新情况。如果有新的配置信息或者配置信息已经改变,配置将会被重新编译并发布到各客户端执行。也可以在服务器上主动触发一个配置信息的更新,强制各客户端进行配置。如果客户端的配置信息被改变了,它可以从服务器获得原始配置进行校正。
  二、puppet的单机应用
  1、安装puppet
  下载此安装包文件夹
  puppet安装包
[root@mariadb ~]# cd 2.7.25/  
[root@mariadb 2.7.25]# yum -y install facter-1.7.3-1.el6.x86_64.rpm puppet-2.7.25-1.el6.noarch.rpm
  2、puppet常用资源
  
  2.1如何定义资源
  资源是puppet用于模型化系统配置的基础单元,每个资源都从某个角度描述了系统属性,如某程序包必须安装或某用户必须移除等,在puppet,用于完成此类功能的代码也即“资源申报”
  格式:
  type { ‘title’:
  atttibue    => value,
  }
  注:资源的文件统一以.pp结尾
  在定义时,资源类型必须使用小写字母,而资源名称仅是一个字符串,但要求在同一类型中期必须唯一
  
  2.2、package资源:puppet管理软件包
  
  puppet支持使用的软件包管理器:yum,rpm,apt,prots,gem,msi,dpkg,pkg
  常用的参数:

  •   ensure:程序包的目标状态,值有present(installed)、absent(不存在)、purged、held、latest
  •   name:资源的名称,即软件包的名字,可以省略,如果省略,将继承title的值
  •   provide:软件包管理器
  •   source:指定程序包文件路径
  •   install_options:安装选项,最常用的是通过INATALLDIR来制定安装目录
  
  2.3、service资源:用于定义服务的状态
  
  常用的参数

  •   ensure:服务的额目标状态,值有true(running)和false(stopped)
  •   enable:是否开机自动启动,值有true和false
  •   name:服务名称,可以省略,如果省略,将继承title的值
  •   path:服务脚本路径,默认为/etc/init.d/下
  •   start:定制启动命令
  •   stop:定制关闭命令
  •   restart:定制重启命令
  •   status:定制状态
  
  示例:
  
[root@localhost tmp]# vim test1.pp  
//添加如下:
  
package {'nginx':
  ensure  => present,
  
}
  
service {'nginx':
  ensure => true,
  enable => true,
  
}
  注:此资源会自动安装nginx,并且使之立即启动,开机启动
  可以使用此命令检查语法:
[root@localhost tmp]# puppet parser validate /tmp/test1.pp  如何使用此命令在本地应用:
puppet apply test1.pp  2.4、file资源
  此资源可以管理文件、目录、软链接;生成文件内容;管理文件权限、属性;也可以通过source属性到指定位置下载文件;通过recurse属性来获取目录
  常用参数:

  •   ensuce:目标状态,值有absent, present, file, 和directory.
  •   backup:通过filebacket资源来备份文件,值通常为filebucket资源的名称
  •   content:文件内容,生成方式有三种(content,source,target),三者彼此互斥,
      使用template模板生成属性时为content,如:content   =>template(‘module_name/template_file_name’)
  •   source:通过制定的url下载文件至本地,获取文件格式为:puppet:///modules/MODULE_NAME/file_names
  •   target:为符号链接指定目标
  •   links:文件为符号连接,值为“follow”,“manage”
  •   path:文件路径,必须使用双引号
  •   mode:定义权限,通常为8进制数字
  •   owner: 定义文件的属主
  •   group:定义文件的属组
  •   force:强制执行删除文件、链接或目录、仅用于ensure为absent时
  •   purge:清除指定目录中存在的,但未在资源中定义的文件
  •   resurce:目录递归,值为true,false,inf,remote
  •   replace:替换,本地存在的文件与资源中指定的文件内容不同时是否执行替换,默认为否
  示例:
[root@localhost tmp]# vim test2.pp  
//添加如下:
  
file {'abc.txt':
  ensure  => present,
  content => 'Hello puppet',
  path    => "/tmp/abc2.txt",
  
}
  
file {'fstab.symbolic':
  ensure => present,
  target => "/etc/fstab",
  path   => "/tmp/fstab.symbolic",
  links  => follow,
  
}
  注:此资源会生成abc2.txt文件和fstab.symbolic这个链接文件。
  2.5、exec资源
  执行命令,通常在不得不用时才使用,慎用,通常用于完成puppet自身无法完成的功能
  常用的参数:

  •   command:要执行的命令,通过为命令文件的完整路径
  •   path:命令搜索路径
  •   group:执行命令的组
  •   user:执行命令的用户
  •   onlyif:0,表示仅在命令的状态返回值为0时才执行此命令
  •   refresh:定义接受的其他资源的通知时,则要重新执行此命令
  •   refreshonly:仅被当被依赖的资源发生改变时才被触发
  •   tries:尝试次数,默认为1
  •   try_sleep:多次尝试之间的时间间隔
  示例:
[root@localhost tmp]# vim test3.pp  
//添加如下:
  
exec {'echo command':
  command => 'echo "hello puppet" >> /tmp/command.txt ',
  path    => '/bin:/sbin:/usr/bin:/usr/sbin',
  refreshonly => true,
  
}
  
exec {'mkdir':
  command => 'mktemp /tmp/tmp.XXXX',
  path    => '/bin:/sbin:/usr/bin:/usr/sbin',
  
}
  注:此资源会echo出信息和创建个随机文件
  
[root@localhost tmp]# vim test4.pp  
//添加如下:
  
file {'/tmp/test4.txt':
  ensure  => file,
  content => "hello puppet",
  notify  => Exec['monitor']
  
}
  
exec {'monitor':
  command   => 'echo "/tmp/test4.txt changed" >> /tmp/monitor.txt',
  # subscribe => File['/tmp/test4.txt'],
  path      => '/bin:/sbin:/usr/sbin:/usr/bin',
  refreshonly => true,
  
}
  注:此资源会创建test4.txt文件,并且当此文件内容改变时,输出信息
  
  2.6、group资源:管理系统上的用户组
  
  常用参数:

  •   ensure:目标状态,present,absent
  •   name:组名
  •   gid:GID
  •   system:系统组
  
  2.7、user:管理用户
  
  常用参数:

  •   ensure:目标状态,present,absent
  •   name:用户名
  •   uid:用户uid
  •   system:系统用户
  •   home:用户家目录
  •   shell:用户默认shell
  •   gid:用户的gid
  •   password:密码,使用加密后密码
  •   magagehome: 是否创建家目录,默认为false
  
  示例:
[root@localhost tmp]# vim test5.pp  
//添加如下:
  
group {'testgrp':
  ensure => present,
  gid    => 1001,
  
}
  
user {'testuser':
  ensure => present,
  gid    => 1001,
  uid    => 1001,
  home   => ' /home/test',
  shell  => '/bin/bash',
  password => '$1$a8edbf1f$u4bv1EahJEAfYxWIDyXKn.',
  managehome => true,
  
}
  注:此资源会创建testuser用户,密码可以使用此命令生成:
[root@localhost tmp]# openssl passwd -1 -salt `openssl rand -hex 4`  2.8、cron资源:定义周期性任务
  
  常见属性:

  •   ensure:目标状态,present,absent
  •   command:命令或脚本
  •   environment:运行时的环境变量
  •   hour:小时
  •   mouth:月
  •   monthday:日
  •   weekday:周
  •   minute:分
  •   name:名称
  •   user: 默认为root
  
  2.9、notify资源: 调试输出
  常用参数

  •   message: 信息
  •   name: 信息名称
  示例:
[root@localhost tmp]# vim test6.pp  
//添加如下:
  
file {'/tmp/test4.txt':
  ensure  => file,
  content => "hello puppet",
  notify  => Notify['notice'],
  
}
  
notify {'notice': message => '/tmp/test4.txt changed'}
  3、puppet变量
  puppet的变量名称以“$”开头,赋值操作符为“=”,应用变量值为“”,或者什么都不写
  puppet的变量可以接受的数据类型:

  •   布尔型:true和false,不能加引号,if语句的测试条件和比较表达式都会返回布尔型值,另外,其他数据类型也可以自动转换为布尔型,如空字符串为false等
  •   undef:从未声明的变量的值类型即为undef,也可以手动为某变量赋予undef值,即直接使用不加引号的undef字符串
  •   字符型:非结构化的文本字符串,可以使用引号,也可以不用。单引号中的变量不会替换,而双引号中的能够进行变量替换;字符型也支持使用转移符
  •   数值型:可为整数或浮点数,不过,puppe只有在数值上下文才把数值当数值对待,其他清理下一律以字符型处理
  •   数组:数组值为中括号“[]”中的以逗号分隔的项目列表,最后一个项目后面可以有逗号;数组中的袁术可以为任何可用数据类型,包括hash或其他数组,属组索引为从0开始的整数,也可以使用负数索引
  •   hash:即为外键值数据类型,键和值之间使用“=>”分隔,键值对定义在“{ }”中,彼此间以逗号分隔;其键位字符型数据,而值可以为puppet支持的任意数据类型,访hash类型的数据元素要使用“键”当作索引进行
  •   正则表达式:属于puppet的非标准数据类型,不能赋值给变量,仅能用于有限的几个接收正则表达式的地方,即接受使用“=~”及“!~”匹配操作符的位置,通常包括case语句中的selector,已经节点名称匹配的位置,他们不能传递给函数或用于资源属性的定义
  facter变量:可以通过facter查看
  内置变量:
  agent端:$environment,$clientcert,$clentbversion
  server端:$servername,$serverip,$serverversion
  puppet中的正则表达式支持使用(?<ENABLED OPTION>:<SUNPATTERN>)和(?-<DISABLED OPTION>:<SUNPATTERN>)两个特殊的符号,
  如下面的示例,表示做正则表达式匹配时启用选项“i(忽略字符大小写)”,但不支持使用“m(把.当作换行符)”和启用“x(忽略模式中的空白字符和注释)”
$packages = $operatingsystem ? {  /(?i-mx:ubuntu|debian)/        => 'apache2',
  /(?i-mx:centos|fedora|redhat)/ => 'httpd',
  }
  4、puppet的判断语句
  puppet的判断语句主要有三种分别为if,case,selector

  •   if语句示例:
[root@localhost tmp]# vim test8.pp  
//添加如下:
  
if $operatingsystem =='CentOS' {
  notify {'centos': message => "welcome to Centos Linux"}
  
}
  
elsif $operatingsystem =='RedHat' {
  notify {'redhat': message => "welcome to Redhat Linux"}
  
}
  
elsif $operatingsystem =='Fedora' {
  notify {'fedora': message => "welcome to Fedora Linux"}
  
}
  
else {
  notify {'unknow': message => "Unknown operating system"}
  
}
  
if $operatingsystem =~/^(?i-mx:(centos|redhat|fedora))/{
  notice("welcome to $1 linux system")
  
}
  注:此资源包含了if的单分支语句和多分支语句,效果是一样的

  •   selector语句示例:
[root@localhost tmp]# vim test9.pp  
//添加如下:
  
$webserver = $operatingsystem ? {
  /^(?i-mx:centos|fedora|redhat)/ => 'httpd',
  /^(?i-mx:ubuntu|debian)/         => 'apache2',
  
}
  
$webprovider = $operatingsystem ? {
  /^(?i-mx:centos|fedora|redhat)/ => 'yum',
  /^(?i-mx:ubuntu|debian)/         => 'apt',
  
}
  
package {"$webserver":
  ensure =>present,
  provider => $webprovider,
  
}

  •   case语句示例:
[root@localhost tmp]# vim test10.pp  
//添加如下:
  
case $operatingsystem {
  /^(?i-mx:redhat|centos|fedora)/: { package {'httpd': ensure => present, provider => yum, } }
  /^(?i-mx:ubuntu|debian)/: { package {'apache2': ensure => present, provider => apt, } }
  default: { notify {'notice': message => "unknown system.", }}
  }
  好了,到此,puppet的安装与单机应用已经介绍完毕,下次我们来介绍下在C/S模式下的puppet应用!

运维网声明 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-545327-1-1.html 上篇帖子: 一步一步学会puppet(三)--节点和模板 下篇帖子: 一步一步学会puppet(四)--master/agent模型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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