puppet配置详解

主程序:

facter-2.4.6-1.el7.x86_64.rpm
puppet-3.8.7-1.el7.noarch.rpm #agent主机上用的包
puppet-server-3.8.7-1.el7.noarch.rpm
注:yum仓库中不是最新版的,可能会有些差别,最好到ftp上下载最新版的

配置文件:

            /etc/puppet/
            ├── auth.conf
            ├── environments
            │   └── example_env
            │   ├── manifests
            │   ├── modules
            │   └── README.environment
            ├── fileserver.conf
            ├── manifests
            ├── modules
            └── puppet.conf

目录:

1.puppet命令

2.资源类型
3.流控制语句
4.类class_类继承
5.puppet模块
6.多环境配置

1.puppet命令:

puppet apply -verbose XXXX.pp
    -noop #测试执行
    -debug #检查显示过程
puppet describe #查看资源
    -l:列出所有资源类型;
    -s:显示指定类型的简要帮助信息;
    -m:显示指定类型的元参数,一般与-s一同使用;
facter -p #查看主机信息,可以算是看内建变量
puppet module install 模块名 #安装模块
puppet module search 模块名 #互联网查找模块
puppet module list #查看模块列表

2.资源类型:

_group_创建和管理组_ :
示例:
group{‘nginx’:
name => nginx,
ensure => present,
system => true,
}
name : 组名
gid : 组ID
ensure : 状态[present | absent]
system : 是否为用户组 [true | false]
members : 成员用户
_user_管理用户:
示例:
user{‘nginx’:
    uid => 3000,
    name => nginx,
    ensure => present,
    password => mageedu,
}
name : 用户名
uid : UID
gid : 基于组ID
groups : 附加组
comment : 注释
expiry : 过期时间
home : 家目录
shell : 默认shell 类型
system : 是否为系统用户
ensure : present | absent
password : 加密后的密码串
_package_管理软件包 :
示例:
package{‘httpd’:
    ensure => installed,
}
name : 软件包名
ensure : [ installed | present | absent]
source : 程序包来源 [rpm | yum]
require: Package[“$webpkg”],
_service_服务管理:
示例:
service{‘httpd’:
    ensure => running,
    enable => true,
    restart => ‘systemctl restart httpd.service’,
# subscribe => File[‘httpd.conf’],
}
ensure : [ installed | present | latest | ]
path : 启动服务的脚本
name : 服务名称
enable : 是否开机启动
restart : 通常用于重定义为 reload
hasrestart : 有重启命令 [true | false]
hasstatus : 有状态查询命令
require: Package[“$webpkg”],
_file_管理文件 :
示例:
file{‘httpd.conf’:
    path => ‘/etc/httpd/conf/httpd.conf’,
    source => ‘/root/manifests/httpd.conf’,
    ensure => file,
    notify => Service[‘httpd’],
}
Package[‘httpd’] -> File[‘httpd.conf’] -> Service[‘httpd’]
ensure : 文件类型的确认 [file | directory | link | present | absent ]
path : 文件路径
source : 源文件
content : 文件内容
target : 符号连接的目标文件
owner : 属主
group : 属组
mode : 权限
atime/ctime/mtime : 时间戳
_exec_执行命令 :
示例:
exec { “unzip tgz packget”:
command => “tar -xvf /tmp/mysql_test/mysql_test.tgz”, ###所有命令必须为全路径或者path参数指定命令搜索路径
path => “/usr/bin:/usr/sbin:/bin:/sbin”,
cwd => “/tmp/mysql_test”, ##命令执行的路径为: /tmp/mysql_test/
creates => “/etc/my.cnf”, #当/etc/my.cnf不存在的时候,才会执行该命令
tries => 2, #重试次数
try_sleep => 3, #重试间隔 s为单位
}
cwd : 命令执行的目录
command : 要运行的程序
creates : 文件路径不存在即创建
user/group : 运行命令的用户身份
onlyif : 此属性指定一个命令, 此命令正常(退出码为0)运行时, 当前command 才会运行
unless : 此属性指定一个命令, 此命令非正常(退出码为0)运行时, 当前command 才会运行
refresh : 重新执行当前command 的替代命令
refreshonly : 仅接收到订阅资源的通知时方才运行
_cron_设置定时任务 :
示例:
cron{‘timesync’:
    command => ‘/usr/sbin/ntpdate 10.1.0.1 &> /dev/null’,
    ensure => present,
    minute => ‘*/3’,
    user => ‘root’,
}
command:要执行的任务;
ensure:present/absent;
hour:
minute:
monthday:
month:
weekday:
user:添加在哪个用户之上;
name:cron job的名称;
_notify_在日志中追加记录信息 :
示例:
notify {“hello”
    message => ‘hello guys’
    name => ‘hello message’
}
message : 信息内容
name : 信息名称

3.流控制语句:

if语句:
if CONDITION {
} else {
}
示例:
if $osfamily =~ /(?i-mx:debian)/ {
    $webserver = ‘apache2’
} else {
    $webserver = ‘httpd’
}
    package{“$webserver”:
    ensure => installed,
}
case语句:
case CONTROL_EXPRESSION {
case1: { … }
case2: { … }
case3: { … }
default: { … }
}
示例:
case $osfamily {
    “RedHat”: { $webserver=’httpd’ }
    /(?i-mx:debian)/: { $webserver=’apache2′ }
    default: { $webserver=’httpd’ }
}
    package{“$webserver”:
    ensure => installed,
}
selector语句:
#当变量符合case中的其中一个时,直接返回指定值
CONTROL_VARIABLE ? {
case1 => value1,
case2 => value2,
default => valueN,
}
示例:
$pkgname = $operatingsystem ? {
    /(?i-mx:(ubuntu|debian))/ => ‘apache2’,
    /(?i-mx:(redhat|fedora|centos))/ => ‘httpd’,
    default => ‘httpd’,
}
    package{“$pkgname”:
    ensure => installed,
}

4.类class:

示例:
class nginx {
    package{‘nginx’:
    ensure => installed,
}
#调用才可执行类代码
include nginx
示例:
#给class参数,给定个默认参数
class dbserver($pkgname=‘mariadb-server’) {
    package{“$pkgname”:
    ensure => latest,
}
service{“$pkgname”:
    ensure => running,
    enable => true,
}
}
#条件判断参数,给特定值
if $operatingsystem == “CentOS” {
    $dbpkg = $operatingsystemmajrelease ? {
    7 => ‘mariadb-server’,
    default => ‘mysqld-server’,
}
}
#赋予参数值
class{‘dbserver’:
pkgname => $dbpkg,
}
类继承:
class XXXX:XXXX inherits XXXX {
…puppet code…
}
示例:
class nginx::webproxy inherits nginx {
file{‘nginx.conf’:
    path => ‘/etc/nginx/conf.d/ngx-proxy.conf’,
    source => ‘/root/manifests/ngx-proxy.conf’,
}
#添加或修改属性
Service[‘nginx’] {
    enable => false,
    require +> Flie[‘nginx.conf’],
}
}

puppet模块:

需先创建好目录,对应资源要放在对应目录下
mkdir puppet/module/模块名/
manifests/:
init.pp:必须一个类定义,类名称必须与模块名称相同;
files/:静态文件;
puppet:///modules/MODULE_NAME/FILE_NAME
templates/:
tempate(‘MOD_NAME/TEMPLATE_FILE_NAME’)
lib/:插件目录,常用于存储自定义的facts以及自定义类型;
spec/:类似于tests目录,存储lib/目录下插件的使用帮助和范例;
tests/:当前模块的使用帮助或使用范例文件;
在master主机上:
1.创建好模块
mkdir /etc/puppet/module/nginx/{manitests,files,templates,lib,spec,tests}
vim /etc/puppet/module/nginx/manitests/init.pp
2.写好站点清单
vim /etc/puppet/manitests/site.pp
node 节点名字 {
include 模块名
}
3.启动
systemctl start puppet-master.server
4.签证
puppet cert sign –all
在agent节点机上
5.签证
puppet agent –server node1 –no-daemonize -v –noop
puppet cert list –all

原创文章,作者:z long,如若转载,请注明出处:http://www.178linux.com/84259

(0)
z longz long
上一篇 2017-08-08
下一篇 2017-08-08

相关推荐

  • sed工具的基本用法

    sed -n(不输出模式,不自动打印) sed -d(删除匹配到的内容) sed-e(多点编辑) sed-r(支持扩展正则表达式) sed#,#(地址定界,在此范围中匹配) sed 1~2   sed 2~2 (找奇数行和偶数行) sed =(为打印到的内容编辑行号)  sed!(取反) sed s///(查找替换,支持使用其他…

    Linux干货 2017-05-02
  • 网络23期心得

    1、描述计算机的组成及其功能 计算机系统是由五大部分组成:运算器、控制器、存储器、输入设备、输出设备   运算器(Datapath):运算器的功能是对数据进行各种算术去处和逻辑运算,即对数据进行加工处理。   控制器(Control):控制器是整个计算机的中枢神经,其功能是对程序规定的控制信息进行解释,根据其要求进行控制,调度程序、数据、…

    Linux干货 2016-09-19
  • linux 怎么使用帮助

    linux怎么使用帮助 Which命令 whatis命令 使用手册来获取帮助-man命令 通过info命令查看帮助 使用软件自带的帮助文档来获取帮助 通过在线文档获取帮助 使用网站和搜索 linux 怎么使用帮助 在linux中有很多命令,配置文件,很多命令选项和参数,我们不可能完全记住的,那工作中遇到怎么办,我们可以查看linux自带的帮助文档,或者利用搜…

    Linux干货 2016-09-05
  • MySQL系列之一键安装脚本—-单实例/多实例

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://nolinux.blog.51cto.com/4824967/1440414       最近在搞MySQL,由于经常测试一些东西。因此,就写了一个一键安装脚本。 脚本用途: 用于在…

    Linux干货 2016-08-15
  • 在软raid10上使用LVM,并且进行磁盘配额,最后还原。

    实验环境 1)centos 7.3 2)lvm格式化的文件系统为ext4 3)磁盘为单一磁盘的不同分区 4)使用软件:mdadm,lvm2 tools,quota 软raid10的创建 一,两个raid1的创建 1)对磁盘进行分区,使用工具fdidk,每个大小为1GB,类型改为fd。我的分区情况:/dev/sda{6,7,8,9}将会拿来做为raid的磁盘。…

    Linux干货 2017-03-16
  • 关于rpm及yum的一些感想

    rpm -ivh PACKAGE_FILE  注意: (1) 不要对内核做升级操作;Linux支持多内核版本并存,因此 ,对直接安装新版本内核 v rpm {-q严格–query} [select-options] [query-options] v [se…

    Linux干货 2016-08-24