linux运维自动化之puppet简单应用(一)

时间:2014-05-20 21:52:46   收藏:0   阅读:643

一、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

常用的参数:


2.3、service资源:用于定义服务的状态

常用的参数



示例:

[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属性来获取目录

常用参数:


示例:

[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自身无法完成的功能

常用的参数:


示例:

[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资源:管理系统上的用户组

常用参数:


2.7、user:管理用户

常用参数:


示例:

[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资源:定义周期性任务

常见属性:


2.9、notify资源: 调试输出

常用参数


示例:

[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的变量可以接受的数据类型:


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

[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的单分支语句和多分支语句,效果是一样的


[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,
}


[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应用!

linux运维自动化之puppet简单应用(一),布布扣,bubuko.com

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!