Puppet 自动化运维

Puppet是目前互联网主流三大自动化运维工具(Puppet、Ansible、Saltstack)之一,puppet是一种Linux、Unix平台的集中配置管理系统,所谓配置管理系统,就是管理及其里面诸如文件、用户、进程、软件包等资源

一、Puppet入门简介

puppet可以运行在一台服务器端,每个客户端通过SSL证书连接到服务端,得到本机器的配置列表,然后根据列表来完成配置工作,所以如果硬件性能比较高,维护管理上千上万台机器是非常轻松的,前提是客户端的配置、服务器路径、软件需要保持一致

Puppet是开源的基于Ruby的系统配置管理工具,Puppet工作流程为Puppet是一个C/S架构,所有的Puppet客户端同一个服务器端的Puppet通信,每个Puppet客户端每半小时(可以设置)连接一次服务器端,下载最新的配置文件,并且严格按照配置文件来配置服务器,配置完成以后Puppet客户端可以反馈给服务器端一个消息,如果报错会给服务器端反馈一个消息

二、Puppet工作原理

Puppet master与agent完整工作流程图。

1、原理框图

Puppet 自动化运维_第1张图片

2、具体工作流程

Puppet 自动化运维_第2张图片

3、Puppet工作原理详解

  • 客户端Puppetd 调用本地facter,facter会探测出该主机的常用变量,例如主机名、内存大小、IP地址等。然后Puppetd把这些信息发送到Puppet服务端;
  • Puppet服务端检测到客户端的主机名,然后会检测manifest中对应的node配置,并对这段内容进行解析,facter发送过来的信息可以作为变量进行处理;
  • Puppet服务器匹配Puppet客户端相关联的代码才能进行解析,其他的代码不解析,解析分为几个过程,首先是语法检查,然后会生成一个中间的伪代码,之后再把伪代码发给Puppet客户端;
  • Puppet客户端接收到伪代码之后就会执行,执行完后会将执行的结果发送给Puppet服务器;
  • Puppet服务端再把客户端的执行结果写入日志。

三、Puppet安装配置

Puppet工作为C/S模式,构建Puppet平台需安装Puppet Server端和client端,安装之前准备好系统环境。需要联网

版本 IP 主机名 描述
Centos7.5-1804 192.168.100.100 puppet-server Puppet服务端,已关闭防火墙与selinux
Centos7.5-1804 192.168.100.101 puppet-client Puppet客户端,已关闭防火墙与slinux

1、Puppet服务端安装

#更改主机名
[root@linuxli ~]# hostnamectl set-hostname puppet-server

#设置hosts映射
[root@puppet-server ~]# echo -e "192.168.100.100 puppet-server\n192.168.100.101 puppet-client" >>/etc/hosts

#配置yum源
[root@puppet-server ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@puppet-server ~]# yum -y install epel-release

#安装puppet-server
[root@puppet-server ~]# yum -y install puppet-server

#启动puppet-server服务
[root@puppet-server ~]# systemctl enable puppetmaster.service

[root@puppet-server ~]# systemctl start puppetmaster.service

2、Puppet客户端安装

#更改主机名
[root@linuxli ~]# hostnamectl set-hostname puppet-client

#设置hosts映射
[root@puppet-client ~]# echo -e "192.168.100.100 puppet-server" >>/etc/hosts

#配置yum源
[root@puppet-client ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

[root@puppet-client ~]# yum -y install epel-release

#安装puppet客户端
[root@puppet-client ~]# yum -y install puppet

#启动puppet服务
[root@puppet-client ~]# systemctl enable puppetagent.service

[root@puppet-client ~]# systemctl start puppetagent.service

3、Puppet客户端申请证书

Puppet客户端与Puppet服务端是通过SSL隧道通信的,客户端安装完成后,首次使用需向服务器端申请Puppet通信证书,Puppet客户端第一次连接服务器端会发起证书申请。

[root@puppet-client ~]# puppet agent --server puppet-server --test

Info: Caching certificate for ca
Info: csr_attributes file loading from /etc/puppet/csr_attributes.yaml
Info: Creating a new SSL certificate request for puppet-client
Info: Certificate Request fingerprint (SHA256): 09:D3:71:C8:64:5B:C2:92:70:48:16:E2:97:4E:4E:AD:CD:4D:03:81:57:41:FD:C1:55:A8:1E:C9:95:D3:F4:42
Info: Caching certificate for ca
Exiting; no certificate found and waitforcert is disabled

4、Puppet服务端颁发证书

Puppet客户端向服务器发起证书申请,服务器必须审核证书,如果不审核,客户端与服务器端无法进行后续正常通信。

[root@puppet-server ~]# puppet cert --list
 
  "puppet-client" (SHA256) 09:D3:71:C8:64:5B:C2:92:70:48:16:E2:97:4E:4E:AD:CD:4D:03:81:57:41:FD:C1:55:A8:1E:C9:95:D3:F4:42
  
[root@puppet-server ~]# puppet cert -s puppet-client

Notice: Signed certificate request for puppet-client
Notice: Removing file Puppet::SSL::CertificateRequest puppet-client at '/var/lib/puppet/ssl/ca/requests/puppet-client.pem'

[root@puppet-server ~]# puppet cert --list --all

+ "puppet-client" (SHA256) 3B:EC:D3:3D:98:5C:40:8E:AF:89:BE:05:AF:F3:C5:26:03:67:36:AC:80:11:C5:B9:8C:3A:0E:E5:78:10:E0:ED
+ "puppet-server" (SHA256) F2:37:44:C5:01:A6:F1:6D:F1:42:0A:C4:72:2B:5C:92:FA:27:F6:68:03:30:0B:0B:28:A2:CD:A3:42:9F:38:C5

  • puppet cert –list:查看申请证书的客户端主机名;
  • puppet cert -s puppet-client:颁发证书给客户端;
  • puppet cert -s:为特定的主机颁发证书
  • puppet cert -s and -a:给所有的主机颁发证书;
  • puppet cert –list –all:查看已经颁发的所有证书。

四、Puppet企业案例演示

Puppet 是基于C/S架构,服务器端保存着所有客户端服务器的配置代码,在Puppet服务端该配置文件叫manifest,客户端下载manifest之后,可以根据manifest对客户端进行配置,例如软件包管理、用户管理、文件管理、命令管理、脚本管理等,Puppet主要基于各种资源或者模块来管理客户端。 默认puppet服务器端manifest目录在/etc/puppet/manifests/下,只需要在该目录下创建一个site.pp文件,然后写入相应的配置代码,Puppet客户端跟Puppet服务端同步时,会检查客户端node配置文件,匹配之后会将该代码下载至客户端,对代码进行解析,然后再客户端执行

以下为在puppet客户端创建test.txt文件,并在该文件中写入测试内容,操作方法如下。

1、Puppet服务端创建node代码

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
file {
"/tmp/test.txt":
        content => "Hello World! linuxli.com 2019";
     }
}

manifests site.pp配置文件详解

  • node default :新建node节点,default表示所有主机,可修改为特定主机名;
  • file:基于file资源模块管理客户端文件或者目录操作;
  • “/tmp/test.txt”:需在客户端文件创建的文件名:
  • content:客户端服务器文件内容。

2、客户端执行同步命令

[root@puppet-client ~]# puppet agent --server puppet-server --test

Info: Caching certificate for puppet-client
Info: Caching certificate_revocation_list for ca
Info: Caching certificate for puppet-client
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppet-client
Info: Applying configuration version '1561535594'
Notice: /Stage[main]/Main/Node[default]/File[/tmp/test.txt]/ensure: defined content as '{md5}25db3e279675fb8f75fcf87282938e98'
Info: Creating state file /var/lib/puppet/state/state.yaml
Notice: Finished catalog run in 0.02 seconds

  • 如报错:很可能是时间不同步导致,请分别在客户端与服务端执行ntpdate pool.ntp.org

五、Puppet常见资源及模块

Puppet主要基于各种资源模块管理客户端,目前企业主流Puppet管理客户端资源模块如下:

  • file:主要负责管理文件;
  • package:软件包的安装管理;
  • service:系统服务的管理;
  • cron:配置自动计划任务
  • exec:远程执行运行命令。

通过命令puppet describe -l 可以查看puppet支持的所有资源和模块

六、Puppet file资源案例

Puppet资源主要用于管理客户端文件,包括文件的内容,所有权和权限,其可管理的文件类型包括普通文件、目录以及符号链接等

1、Puppet file资源支持参数详解:

  • parameters:backup,checksum,content,ctime,ensure,force,group,ignore,links,mode,mtime,owner,path,purge,recurse,recurselimit,replace,selinux_ignore_defaults,selrange,selrole,seltype,seluser,show_diff,source,source_permissions,sourceselect,target,type,validate_cmd,validate_replacement。
  • providers:posix,windows.

  • ensure:默认为文件或目录
  • backup:通过filebucket备份文件。
  • checksum:检查文件是否被修改的方法。
  • ctime:只读属性,文件的更新时间。
  • mtime:只读属性,文件的修改时间。
  • content:文件的内容,与source和target互斥
  • force:强制执行删除文件、软链接及目录的操作
  • owner:用户名或用户ID
  • group:指定文件名的用户组或组ID
  • link:软链接
  • mode:文件权限配置,通常采用数字符号
  • path:文件路径

2、从Puppet服务器下载nginx.conf文件至客户端/tmp目录

首先需要将nginx.conf文件cp至/etc/puppet/files目录,然后在/etc/puppet/fileserver.conf中添加以下三行代码,并重启Puppet master即可

#创建存放文件的目录
[root@puppet-server ~]# mkdir /etc/puppet/files

#模拟拷贝nginx.conf文件
[root@puppet-server ~]# touch /etc/puppet/files/nginx.conf

#编辑fileserver配置文件
[root@puppet-server ~]# vim /etc/puppet/fileserver.conf

...

[files]
path /etc/puppet/files/
allow *

...

#创建site.pp文件
[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
file {
"/tmp/nginx.conf":
        mode => 644,
        owner => 'root',
        group => 'root',
        source => 'puppet://puppet-server/files/nginx.conf';
     }
}

#客户端同步配置
[root@puppet-client ~]# puppet agent --server puppet-server --test

Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Caching catalog for puppet-client
Info: Applying configuration version '1561536955'
Notice: /Stage[main]/Main/Node[default]/File[/tmp/nginx.conf]/ensure: defined content as '{md5}d41d8cd98f00b204e9800998ecf8427e'
Notice: Finished catalog run in 0.09 seconds

[root@puppet-client ~]# ls -l /tmp/nginx.conf
-rw-r--r-- 1 root root 0 6月  26 16:15 /tmp/nginx.conf

3、在agent上创建/export/docker的软链接为/var/lib/docker/

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
file {
"/var/lib/docker/":
        ensure => link,
        target => "/export/docker";
     }
}

4、在agent上创建目录/tmp/20501212

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
file {
"/tmp/20501212":
		ensure => directory;
     }
}

七、Puppet package资源案例

Puppet package 资源主要用于管理客户端服务器的软件包,YUM源为/etc/yum.repos.d/安装和升级操作,通过Puppet基于YUM自动安装软件包,所以需要先配置好YUM源。 常见的操作可以对软件进行安装、卸载以及升级操作。

1、Puppet package资源支持参数详解:

  • parameters:adminfile,allow_virtual,allowcdrom,category,configfiles,description,ensure,flavor,install_options,instance,name,package_settings,platform,responsefile,root,source,status,uninstall_options,vender.
  • providers:aix,appdmg,appke,apt,aptitude,aptrpm,blaswave,dpkg,fink,freebsd,gem,hpux,macports,msi,nim,openbsd,opkg,pacmain,pip,pkg,pkgdmg,pkgin,pkgutil,portage,ports,portupgrade,rpm,rug,sun,sunfreeware,up2date,urpmi,windows,yum,zipper.
  • present:检查软件是否存在,不存在则安装。
  • installed:表示安装软件。
  • absent:删除(无依赖),当别的软件包依赖时,不可删除。
  • pureged:删除所有配置文件和依赖包,有潜在风险,慎用。
  • latest:升级到最新版本。
  • version:指定安装具体的某个版本号。

2、客户端安装ntpdate及screen软件

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
package {
["screen","ntp"]:
        ensure => "installed";
        }
}

3、客户端卸载ntpdate及screen软件

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
package {
["screen","ntp"]:
			ensure => "absent";
        }
}

#八、Puppet service 资源案例

Puppet service 资源主要用于启动、重启和关闭客户端的守护进程,同时可以监控进程的状态,还可以将守护进程加入到自启动中。

1、Puppet service资源支持参数详解:

  • paramenters:binary,control,enable,ensure,flags,hasrestart,hasstatus,manifest,name,path,pattern,restart,start,status,stop.
  • providers:base,bsd,daemontools,debian,freebsd,gentoo,init,launchd,openbsd,openrc,openwrt,redhat,runit,service,smf,src,systemd,upstart,windows
  • enable:指定服务在开机的时候是否启动,可以设置true和false。
  • ensure:是否运行服务,running表示运行,stopped表示停止服务。
  • name:守护进程的名字
  • path:启动脚本搜索路径
  • provider:默认为init。
  • hasrestart:管理脚本是否支持restart参数,如果不支持,就用stop和start实现restart效果
  • hasstatus:管理脚本是否支持status参数,Puppet用status参数来判断服务是否已经在运行了,如果不支持status参数,Puppet利用查找运行进程列表里面是否有服务名来判断服务是否在运行。

2、启动agent httpd服务,停止nfs服务(服务需提前安装)

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
service {
"httpd":
			ensure => running;
"nfs":
			ensure => stopped;
        }
}

3、启动agent httpd服务并且开机启动,停止nfs服务,开机不启动

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
service {
"httpd":
			ensure => running,
			enable => true;
"nfs":
			ensure => stopped,
			enable => false;
        }
}


九、Puppet exec 资源案例

Puppet exec 资源主要用于客户端远程执行命令或者软件安装等,相当于shell的调用,exec是一次性执行资源,在不同类里面exec命令可以相同

1、Puppet exec资源参数详解:

  • parameters:command,creates,cwd,environment,group,logoutput,onlyif,path,refresh,refreshonly,returns,timeout,tries,try_sleep,umask,unless,user.

  • providers:posix,shell,windows
  • command:指定要执行的系统命令。
  • creates:指定命令所生成的文件。
  • cwd:指定命令执行目录,如果目录不存在,则命令执行失败。
  • group:执行命令运行的账户组
  • logoutput:是否记录输出。
  • onlyif:exec只会在onlyif设定的命令返回0时才执行。
  • path:命令执行的搜索路径。
  • refresh => true\false:刷新命令执行状态。
  • refreshonly => true\false:该属性可以使命令变成仅刷新触发的。
  • returns:指定返回的代码。
  • timeout:命令运行的最长时间。
  • tries:命令执行重试次数,默认为1
  • try_sleep:设置命令重试的间隔时间,单位为s。
  • user:指定执行命令的账户。
  • provider:shell和windows。
  • environmnet:为命令设定额外的环境变量,要注意的是如果设定path,path的属性会被覆盖。

2、agent服务器执行tar解压Nginx软件包

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
exec {
'Agent tar xvf nginx-1.12.0.tar.gz':
			path => ["/usr/bin","bin"],
			user => 'root',
			group => 'root',
			timeout => '10',
			command => 'tar -xvf /tmp/nginx-1.12.0.tar.gz';
     }
}

3、agent 服务器远程执行auto_install_nginx.sh脚本

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
file {
"/tmp/auto_install_nginx.sh":
			source => 'puppet://puppet-server/files/auto_install_nginx.sh',
			owner => 'root',
			group => 'root',
			mode => 755;
	  }
exec {
"/tmp/auto_install_nginx.sh":
			cwd => "/tmp",
			user => root,
			path => ["/usr/bin","/usr/sbin","/bin/sh"];
	  }
}

  • 脚本需自己提前编写好

4、agent服务器更新sysctl.conf,如果该文件发生变化,则执行命令sysctl -p

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
file {
"/etc/sysctl.conf":
			source =>"puppet://puppet-server/files/sysctl.conf",
			owner => 'root',
			group => 'root',
			mode => 644;
     }
exec {
"systctl refresh kernel config":
			path => ["/usr/bin","/usr/sbin","/bin","/sbin"],
			command => "/usr/sbin/sysctl -p",
			subscribe => File["/etc/sysctl.conf"],
			refreshonly => true;
	  }
}

十、Puppet cron 资源案例

Puppet cron 资源主要用于安装和管理crontab计划任务,每一个cron资源需要一个command属性和user属性以及至少一个周期属性(hour、minute、month、monthday、weekday)。 crontab计划任务的名称不是计划任务的一部分,它是Puppet用来存储和检索该资源,假如用户指定了一个除了名称其他的都和一个已经存在的计划任务相同,那么这俩个计划任务被认为是等效的,并且新名称将会永久地与该计划任务相关联。

1、Puppet cron资源支持参数详解:

  • parameters:command,ensure,environment,hour,minute,month,monthday,name,special,target,user,weekday。
  • providers:crontab。
  • user:加某个用户的crontab任务,默认是运行Puppet的用户。
  • command:要执行的命令或脚本路径,可不写,默认是title名称。
  • ensure:表示该资源是否启用,可设置成true或false。
  • environment:crontab环境里面指定环境变量。
  • hour:设置crontab的小时,可设置成0~23。
  • minute:指定crontab的分钟,可设置成0~59。
  • month:指定crontab运行的月份,可设置成1~12.
  • monthday:指定月的天数可设置成1~31。
  • name:crontab的名字,区分不同的crontab。
  • provider:可用的provider有crontab默认的crontab程序。
  • target:crontab作业存放的位置。
  • weekday:设置crontab的星期数,可设置成0-7,其中周日为0.

2、agent服务器添加ntpdate时间同步任务

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
cron {
"ntpdate":
			command => "/usr/sbin/ntpdate pool.ntp.org",
			user => root,
			hour => 0,
			minute => 0;
     }
}

3、agent服务器删除ntpdate时间同步服务

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp

node default {
cron {
"ntpdate":
			command => "/usr/sbin/ntpdate pool.ntp.org",
			user => root,
			hour => 0,
			minut => 0,
			ensure => absent;
     }
}


十一、Puppet日常管理与配置

Puppet平台构建完毕,能够使用Puppet去管理客户端,对文件、服务、脚本、各种配置的变更,如果要管理批量服务器,还需要进行一些步骤的配置。

1、Puppet 自动认证

企业新服务器通过kickstart自动安装Linux操作系统,安装完毕,可以自动安装Puppet相关软件包,Puppet客户端安装完毕,需向Puppet服务端请求证书,然后Puppet服务端颁发证书给客户端,默认需要手动颁发,可以通过配置让Puppet服务端自动颁发证书。

自动颁发前提是服务器与客户端能ping通彼此的主机名,配置自动颁发证书需在Puppet服务端的puppet.conf配置文件main段加入以下代码

[root@puppet-server ~]# vim /etc/puppet/puppet.conf

[main]

autosign = true

#重启puppet服务
[root@puppet-server ~]# systemctl restart puppetmaster.service

#删除客户端证书
[root@puppet-server ~]# puppet cert --clean puppet-client

Notice: Revoked certificate with serial 3
Notice: Removing file Puppet::SSL::Certificate puppet-client at '/var/lib/puppet/ssl/ca/signed/puppet-client.pem'
Notice: Removing file Puppet::SSL::Certificate puppet-client at '/var/lib/puppet/ssl/certs/puppet-client.pem'

#删除客户端ssl文件。重新生成ssl文件
[root@puppet-client ~]# rm -rf /var/lib/puppet/ssl/

#重新申请证书
[root@puppet-client ~]# puppet agent --server=puppet-server --test

puppet服务端会自动认证,不必手动颁发证书,减轻人工的干预和操作

2、Puppet客户端自动同步

Puppet 客户端安装完,并且认证完之后,如果在puppet服务端配置了node信息,客户端启动服务,默认30min自动与服务端同步信息,如果要修改同步的时间频率,修改puppet配置文件信息即可

[root@puppet-client ~]# vim /etc/puppet/puppet.conf

[agent]
server = server.cbcv.net
listen = true
report = true
runinterval = 60 

重启Puppet客户端服务,客户端会半个小时跟服务器同步一次配置信息

[root@puppet-client ~]# systemctl restart puppet

#修改为60s同步一次配置信息
[root@puppet-client ~]# vim /etc/puppet/puppet.conf

[agent]

runinterval = 60

[root@puppet-client ~]# systemctl restart puppet

[root@puppet-client ~]# systemctl restart puppetagent.service

#验证同步时间
[root@puppet-client ~]# puppet agent --configprint runinterval

[root@puppet-client ~]# puppet agent --test --noop

3、Puppet服务端主动推送

Puppet服务器端使用puppet run命令可以给客户端发送一段信号,告诉客户端立刻跟服务器同步配置信息

#修改客户端配置文件
[root@puppet-client ~]# vim /etc/puppet/puppet.conf

[agent]
listen = true

#修改puppet客户端配置文件,指定puppet master主机名
[root@puppet-client ~]# vim /etc/puppet/puppet.conf

[agent]
server = server.cbcv.net

#创建puppet客户端配置文件
[root@puppet-client ~]# vim /etc/puppet/namespaceauth.conf

[puppetrunner]
allow *

#修改客户端配置文件auth.conf,在path/前添加如下代码
[root@puppet-client ~]# vim /etc/puppet/auth.conf

path /run
method save
allow *

#重启puppet客户端
[root@puppet-client ~]# systemctl restart puppet

#Puppet服务端执行如下命令,通知客户端来同步配置,也可批量通知其他客户端,只需将客户端的主机名写入hosts.txt文件

[root@puppet-server ~]# puppet kick -d puppet-client

[root@puppet-server ~]# puppet kick -d 'cat hosts.txt'

十二、Puppet批量部署案例

某互联网公司新到100台硬件服务器,要求统一安装Linux系统,并部署上线以及后期的管理配置。对于Linux系统安装,需采用批量安装,批量安装系统主流工具为kickstart和Cobbler,任选其一即可。

如果采用自动安装的话,可以自动初始化系统,内核优化及常见服务、软件客户端等安装。Puppet客户端可以放在Kickstart中安装并配置完毕。

当Linux操作系统安装完成后,需要对服务器进行相应的配置,应对高并发网站,例如修改动态IP为静态IP、安装及创建crontab任务计划、同步操作系统时间、安装Zabbix客户端软件、优化内核参数等,可以基于Puppet统一调整

1、Puppet 批量修改静态IP案例

现需要修改100台Linux服务器原DHCP动态获取的IP为staticIP地址,首先需要修改IP脚本,将脚本推送到客户端,然后执行脚本并重启网卡即可,步骤如下。

#修改IP为静态IP的shell脚本代码

#!/bin/bash
#Auto change ip netmask gateway scripts
#by linuxli.com 2019
#Define Path variables
ETHCONF=/etc/sysconfig/network-scripts/ifcfg-eth0
DIR=/data/backup/'date +%y%m%d'
IPADDR=`ifconfig|grep inet|grep 192|head -1|awk '{print $2}'`
NETMASK=255.255.255.0
grep dhcp $ETHCONF

if [ $? -eq 0 ];then
        sed -i 's/dhcp/static/g' $ETHCONF
        echo -e "IPADDR=$IPADDR\nNETMASK=$NETMASK\nGATEWAY=`echo $IPADDR|awk -F. '{print $1"."$2"."$3"."1}'`\nDNS1=8.8.8.8" >>$ETHCONF
        echo "The IP configuration success.!"
        service network restart
fi

#Puppet master执行kick推送配置至agent服务器远程。Puppet客户端修改IP脚本

node default {
file {
"/tmp/auto_cange_ip.sh":
	source =>"puppet://puppet-server/files/auto_change_ip.sh",
	owner =>"root",
	group => "root",
	mode => 755;
	  }
exec {
"/tmp/auto_change_ip.sh":
			cwd =>"/tmp",
			user => 'root',
			path => ["/usr/bin","/usr/sbin","/bin","/bin/sh"];
     }
}

2、Puppet批量配置NTP同步服务器

在100台Linux服务器上配置crontab任务,修改ntpdate与ntp服务端同步时间,操作步骤如下。

(1)Puppet master上创建客户端node配置,可以编写NTP模块,使用class可以定义模块分组,对不同业务进行分组管理,/etc/puppet/modules/ntp/manifests/init.pp配置文件代码如下,将原ntpdate同步时间从0点0分改成5min同步一次时间,并且修改原pool.ntp.org服务器为本地局域网NTP时间服务器的IP地址。

[root@puppet-server ~]# mkdir -p /etc/puppet/modules/ntp/manifests

[root@puppet-server ~]# vim /etc/puppet/modules/ntp/manifests/init.pp

class ntp {
exec { path => "/bin:/sbin/:/bin/sh:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin"},
exec {
			"auto change crontab ntp config":
			command => "sed -i -e '/ntpdate/s/0/*\/5/2' -e 's/pool.ntp.org/10.1.1.21/' /var/spool/cron/root",
     }
}

(2)在/etc/puppet/manifests目录创建俩个文件,分别是modules.pp和node.pp,模块入口文件以及node配置段。

[root@puppet-server ~]# vim /etc/puppet/manifests/modules.pp

import "ntp"

[root@puppet-server ~]# vim /etc/puppet/manifests/nodes.pp

node default {
        inclide ntp
}

(3)在site.pp中加载导入modules.pp和nodes.pp名称,site.pp配置如下

[root@puppet-server ~]# vim /etc/puppet/manifests/site.pp
import "modules.pp"
import "nodes.pp"

Puppet master执行kick推送配置至agent服务器远程

你可能感兴趣的:(linux,运维,自动化,服务器)