Puppet 开始

  1. 安装

    aptitude install puppet puppetmaster

  2. 工作机制

    puppet是通过ssl方式进行安全通信的,在正常同步前,需要进行证书的获取和认证 puppet运行机制大概是这样:

    客户端向服务端发送facts信息,请求返回catalog, 服务端检查类文件等的关于客户端的信息打包catalog返回给客户端, 客户端按照catalog进行一系列检查同步操作。

  3. puppet资源类型及属性

    3.1 资源

    资源是puppet处理主机而分解的基本元素,资源的属性控制资源的形态

    e1. puppet resource file {'/root/':ensure  =>  'directory',group   =>  '0',owner   =>  '0',mode    =>  '700',}

    资源type为file,title为/root/, 其余是属性部分,一个资源的所有属性和帮助可以通过puppet describe RESOURCE_TYPE来查看,常见的资源类型有user,group,file,package,service,cron,exec,notify等。

    3.2 资源类型详细书写

    3.2.1 用户资源user

    用户:

    user {'liuliancao':ensure  =>  present,     # 是否允许uid重复allowdupe   =>  true,uid     =>  '503',     # 指定过期时间expiry  =>  '2016-8-13',     # 用户家目录managehome  =>  true,home    =>  '/home/liuliancao',shell   =>  '/bin/bash',}

    用户组:

    group {'system':ensure  =>  present,name    =>  'system',allowdupe   =>  false,gid     =>  '15',members =>  ['liuliancao','luqixue'],}

    3.2.3 包资源package

    # 这里是一个判断与选择$ssl = $operatingsystem  ?   {solaris =>  SMCossl,     default =>  openssl,}package {$ssl:ensure  =>  installed,     # 别名功能,引用的时候可以Package['openssl']alias   =>  openssl,provider    =>  apt-get,}

    3.2.4 文件资源file

    file {'/tmp/llc_test.txt':ensure  =>  file,owner   =>  liuliancao,group   =>  system,     # 文件权限mode    =>  '644',     # 文件内容content =>  'This is a puppet test.',} file {'/tmp/llc_test2.txt':ensure  =>  file,owner   =>  liuliancao,group   =>  system,     # 指定文件来源位置source  =>  'puppet://$fileserver/modules/test/test.txt'}

    3.2.5 服务管理service

    service {'sshd':     # true也可以的ensure  =>  running,     # 是否加入开机启动enable  =>  true,subscribe   =>  File['/etc/sshd/ssh_config'],hasrestart  =>  true,     # sshd检查重启的时候,使用restart的参数(如果有),否则检查是否hasrestart为true,如果为true则尝试restart,否则就尝试start/stop操作restart =>  '/etc/init.d sshd restart',}

    3.2.6 定时脚本cron

    cron {'ntpdate':command =>  "/usr/sbin/ntpdate ntpserver.domain.com",user    =>  root,     # 23点到次日7点每2个小时执行一次,8点也执行一次hour    =>  '23-7/2,8'',minute  =>  0,}

    3.2.7 命令执行exec

    exec {'tar xf /tmp/nginx-1.3.8.tar.gz':     # 工作目录cwd =>  '/tmp',     # 仅当该文件不存的时候才执行这个execcreates =>  '/tmp/myfile',     # 定义环境变量path    =>  ['/usr/bin', '/usr/sbin', '/bin'],} file {'/etc/aliases':source  => 'puppet://server/module/aliases'} exec {'newaliases':path    =>  ['/usr/sbin','/usr/bin','/bin'],subscribe   =>  File['/etc/aliases'],     # refreshonly指仅当依赖的对象被改变才会触发,需要和subscribe和notify结合使用才有意义refreshonly =>  True,}

    3.3 资源依赖与触发关系

    因为puppet读取清单中内容并不一定是按顺序读取,此时就需要定义先后和依赖关系

    依赖关系require、before:

    file {'/etc/sshd/ssh_config':ensure  =>  file,require =>  Package['sshd'],}

    require:此时表示该文件的资源实现需要先满足sshd这个package资源,这里首字母要大写。 package {'sshd': ensure => installed, before => File['/etc/sshd/ssh_config], }

    before:表示pack befores file只需要写一个就可以确定先后顺序,符合自己的逻辑习惯即可

    触发关系notify、subscribe:

    file {'/etc/sshd/ssh_config':ensure  =>   file,require =>   Package['sshd'],notify  =>   Service['sshd'],} service {'sshd':ensure  =>  running,subscribe   =>  File['/etc/sshd/ssh_config'],}

    notify:主动通知,当事件发生通知依赖的服务,当ssh_config这个文件修改会通知到service变化

    subscribe:订阅关系,当依赖的资源变动会引起自己的变动

    符号:

    ->符号表示require依赖关系 ~>符号表示notify触发动作

    Package['sshd'] -> File['/etc/sshd/ssh_config'] ~> Service['sshd']

3.4 package,file,service

# ssh service为例package {'openssh-server':ensure  =>  present,before  =>  File['/etc/ssh/sshd_config'],
}
file {'/etc/ssh/ssh_config':ensure  =>  file,source  => 'puppet://modules/ssh/sshd_config',
}service {'sshd':ensure  =>  running,enable  =>  true,subscribe   =>  File['/etc/ssh/sshd_config'],
}
  1. puppet的语法结构

4.1 条件判断

if $operatingsystem in  ['Ubuntu','debian'] {notify('Ubuntu system detected!')}elsif   $operatingsystem in ['Centos','Redhat','Fedora','SuSE'] {notify('Centos type system detected!')}    else {notify('Some other system detected!')}    case $operatingsystem {        'Solaris': { include role::solaris }        'RedHat','Centos': { include role::redhat },/^(debian|Ubuntu)$/: { include role::debian },default: { include role::generic }}    $rootgroup = $osfamily ? {        'Solaris'  =>   'wheel',/(Darwin|FreeBSD)/  =>  'wheel',default =>  'root',}

4.2 变量和作用域

puppet继续

一个类定义文件内容 来源于Learning puppet文件p41
# Class:  ntp# # This class installs/configures/manages NTP. It can optionaly disable NTP# on virtual machines. Only supported on Debian-derived and Red Hat-derivedOSes.## Parameters:#   - $servers:An array of NTP servers, with or without +iburst+ and+dynamic+ statements appended. Defaults to the OS's defaults.#   - $enableWhether to start the NTP service on boot. Defaults to true. Validvalues: true and false.#   - $ensureWhether to run the NTP service. Defaults to running. Valid values:ruuning and stopped.## Requires:#   Nothing.## Sample Usage:#   class {'ntp':#       servers =>  ['ntp1.puppetlabs.lan dynamic",#                   'ntp2.puppetlabs.lan dynamic",],#   }#   class {'ntp':#       enable  =>  false,#       ensure  =>  stopped,#   }class ntp ($servers = undef, $enable = true, $ensure = running) {    case $operatingsystem {centos, redhat: {            $service_name   =   'ntpd'$conf_template  =   'ntp.conf.e1.erb'$default_servers= [ "0.centos.pool.ntp.org",                                "1.centos.pool.ntp.org",                                "2.centos.pool.ntp.org",]}debian, ubuntu: {            $service_name   =   'ntp'$conf_template  =   'ntp.conf.debian.erb'$default_servers= [ "0.debian.pool.ntp.org",                                "1.debian.pool.ntp.org",                                "2.debian.pool.ntp.org",]}}if $servers ==  undef {        $servers_real   =   $default_servers}else {        $servers_real   =   $servers}package { 'ntp':ensure  =>  installed,}service { 'ntp':name    =>  $service_name,        ensure  =>  $ensure,enable  =>  $enable,subscribe   =>  File['ntp.conf'],}file { 'ntp.conf':path    =>  '/etc/ntp.conf',        ensure  =>  file,require =>  Package['ntp'],content =>  template("ntp/${conf_template}"),}
}
template ERB语法

1 常规变量

如facter获取到operatingsystem

<%= @operatingsystem %> 是对其的值引用,@不用也可以,用了可以防止变量名冲突

对于超过本地作用域范围的变量,可以通过scope对象查找

<%= scope.lookupvar('apache::user') %>

2 判断

<% if @myvar %>my var has <%= @myvar %> value<% end %>

3 数组迭代

如$arr = ['1','2','a','b']<% arr.each do | val | -%>        array has value <%= val %><% end -%>

这里<% -%>表示不解释后面跟着的换行,否则会多出两个换行

4 模板整合 pp文件中template(a,b)就行了

5 语法检查 erb文件可以通过如下方式检查语法规则

root@debian:/etc/puppet/modules# cat test/templates/test.erb%First hostname <%=  fqdn  %>%Second<% if @operatingsystem %>the system is <%= @operatingsystem %>
<% end %>%Third$arr = ['1','2','3']
<% arr.each do |val| -%>arr has value <%= val %>!
<% end -%>root@debian:/etc/puppet/modules# erb -P -x -T '-' test/templates/test.erb | ruby -cSyntax OK# -P:忽略%开头的行 -x:打印出ruby script -T 指定trim mode,指定是否输出换行的模式
hiera

当manifest里面的pp文件中夹杂了太多判断,这个时候就需要通过定义变量的方式来自定义我们的配置文件,puppet的hiera机制实现最常用的几次匹配过滤,比如根据域名,比如根据操作系统,比如根据调用的模块等等。 这样,一个典型的catalog查询就开始比较复杂,具体过程如下: 建立连接后,puppet的一个agent开始向服务端请求自己的catalog,master开始做查询。首先检查对应的manifests的nodes节点下面的pp文件,按次序解释返回。当有hiera参与时,会首先在/etc/puppet/manifests/site.pp中加入hiera_include('classes')类似信息,来表示这个时候加入的类。 如果没有hiera,在nodes文件夹下对应的pp文件也可能是包含相应的模块和类,这都是一个追加的过程。在/etc/puppet/hiera.yaml文件中定义了几个过滤模块,具体可以参考官方文档的hiera部分,这里面其实是定义了过滤器和文件的对应关系。过滤器是并集,满足1的会执行,满足2的也会执行,是classes相加。最终这些文件yaml或json格式的内容会被读取,这些文件和nodes文件夹下的pp文件最终效果一样。大部分是对已有模块的参数说明。

以上可能有点虚,具体参考puppet结合nginx结合hiera的例子。

转载于:https://blog.51cto.com/qixue/1906783

puppet知识简记相关推荐

  1. 达梦DM数据库—线上培训学习简记

    达梦DM数据库-线上培训学习简记 (20200812) 有幸参加国内领先的达梦数据库(自主研发)的线上学习,达梦的老师都非常的NICE, 遇到问题会非常耐心的线上解答.现将这次的学习中的一些知识点做了 ...

  2. TripleO (openstack)

    TripleO 一.TripleO简介 TripleO 又叫 OpenStack on OpenStack,是一个用OpenStack来部署.升级和管理OpenStack的工具. TripleO里面有 ...

  3. puppet自动化运维之puppet的资源基础知识

    2019独角兽企业重金招聘Python工程师标准>>> puppet自动化运维之puppet的资源基础知识 此篇文章,主要是让读者提前了解puppet资源的一些知识. 变量和数组会经 ...

  4. 知识图谱构建流程与技术简记

    文章目录 零.图谱类型 一.模式定义 1.1 实体类别和概念分级 1.2 关系和属性 二.信息抽取 1.1 命名实体识别 1.2 关系抽取 1.3 属性抽取 1.4 实体对齐 1.5 实体链接 三.图 ...

  5. 简记_ LDO基础知识

    一.LDO的典型应用 低压降稳压器,简称LDO,对比于传统线性稳压器的特点就是压降低,一百至几百mV,甚至更低.图1.1是其典型的应用电路图. 图1.1 二.LDO的关键参数及应用 2.1压降 压降的 ...

  6. 《Java并发编程实践》学习笔记之一:基础知识

    <Java并发编程实践>学习笔记之一:基础知识 1.程序与进程 1.1 程序与进程的概念 (1)程序:一组有序的静态指令,是一种静态概念:  (2)进程:是一种活动,它是由一个动作序列组成 ...

  7. centos6_64位系统安装部署puppet(master、agent)

    在CentOS 6.4上安装Puppet配置管理工具 192.168.1.198 master master.ptmind.com 192.168.1.199 slave1 slave1.ptmind ...

  8. Puppet基础篇9-Puppetmaster多环境配置

    Puppet基础篇9-Puppetmaster多环境配置 零基础学习Puppet自动化配置管理系列文档 扩充现有架构环境是对一个企业成长的见证 将基础环境模块部署到puppetmaster端之后就可以 ...

  9. 【数理知识】《矩阵论》方保镕老师-第7章-几类特殊矩阵与特殊积

    上一章 回到目录 下一章 第7章-几类特殊矩阵与特殊积 7.1 非负矩阵 7.1.1 非负矩阵与正矩阵 定理 7.1.3 (谱半径的单调性) 定理 7.1.4 (佩龙 (Perron) 定理) 7.1 ...

  10. 微积分笔记(一)--预备知识

    文章目录 预备知识 什么是微积分 一. 直线 1.1 增量 1.2 直线的斜率 1.3 平行线和垂直线 1.4 直线的方程 二.函数和图形 2.1 映射 2.2 逆映射与复合映射 2.3 函数 2.4 ...

最新文章

  1. 树梅派配置ad-hoc网络
  2. ming 贪心 NOIP模拟
  3. 【数字信号处理】线性时不变系统 LTI ( 判断某个系统是否是 “ 非时变 “ 系统 | 案例一 | 先变换后移位 | 先移位后变换 )
  4. mysql+表复制+效率_MySQL数据库复制表的几种方式讲解
  5. .NET 5 尝鲜 - 开源项目TerminalMACS WPF管理端支持.NET 5
  6. qopenglwidget 透明_廊坊透明真空袋用途-祺泰包装
  7. kubernetesV1.13.1一键部署脚本(k8s自动部署脚本)
  8. 【空间统计】0 空间统计基础理论
  9. c语言编写成绩管理系统代码,C语言学生成绩管理系统源代码
  10. 62%中国AI毕业生赴美,机器学习人才最高产大学出炉 | 报告
  11. 使用yocs_velocity_smoother对机器人速度进行限制
  12. iOS - 常用的iOS Mac框架和库以及常用的中文开发博客
  13. java 多态的应用——多态数组和多态参数详解
  14. 悦刻打假再添战果 协助深圳警方捣毁华强北一售假窝点
  15. 数据结构学习笔记(5.树与二叉树 6.图)
  16. saas和pass有啥区别
  17. Chrome 谷歌浏览器升级之后自动保存账号名和密码不能用了?
  18. Android studio 动画---补间动画
  19. 神州鲲泰系列产品首发 神州数码携手华为共创产业生态
  20. How Much Is Enough?(测试多少就足够了)

热门文章

  1. leetcode-买卖股票的最佳时机含手续费
  2. 【未来iPhone 手机中将加入卫星通信功能?】
  3. 【每日一题】递增序列中绝对值最小的数
  4. 计算机二级python看什么书好_2021年全国计算机二级Python备考指导
  5. 武汉男人一个月要赚多少钱,老婆才不用上班?心碎成渣……
  6. 伦斯勒理工学院计算机科学专业强吗,伦斯勒理工大学CS专业好吗?
  7. Windows10删除hiberfil.sys
  8. 根据显示屏分辨率调试html 样式
  9. 如何删除剽悍的应用软件
  10. shopnc 设置mysql_shopnc 手机网站配置