puppet(2)-资源介绍

puppet- 资源介绍:mysql

  • 类型、属性与状态同实现方式分离、仅指定目标状态linux

    type {'title':
          attribute   =>  value,
          ...
      }
  • 查看支持的资源类型:nginx

    puppet describe -l
    
      puppet describe -s TYPE
    
      puppet describe TYPE
  • 定义资源的要点:sql

    一、同一种类型中,资源名称必须唯一;
    
      二、资源名称是否区分大小与取决于OS;
  • 独特属性:shell

    package {'nginx':
          ensure  => present,
          name    => nginx,
      }
    
      命名变量:namevar,可省略,默认为title
  • 经常使用类型:package, user, group, file, service, exec, cron, notify
  1. group的经常使用属性:centos

    ensure: present, absent
     name: 组名
     gid: GID
     system: 是否为系统组;true, yes; false, no
  2. user的经常使用属性:服务器

    ensure: present, absent
     name: 用户名
     uid: UID
     system: 是否为系统用户;
     gid: 基本组;
     groups: 附加组;
     home: 家目录;
     password: 密码;
     shell: 默认shell;
     comment: 注释信息;
     expiry: 帐号过时期限 不经常使用
  3. file的经常使用属性:
    管理文件从属关系、权限及其内容。less

    管理的类型有:ide

    普通文件
     目录
     符号链接等(经过ensure属性指定)

    若是管理普通文件,文件内容能够:测试

    直接用content属性直接给出,
     或者用source属性根据远程服务器下载生成

    若是是目录:resource属性+recurse属性能够递归下载目录
    核心属性:

    resource: 能够递归下载目录同时要配合另一个recurse属性定义是否递归下载构造目录。
     recurse: 属性是布尔型。所以recurse属性 只有在ensure 属性为directory时才有意义。
     content:直接生成的文件内容;
     source: 经过指定的URL下载文件至目标位置;愿文件路径,能够是本地文件路径(单机模型),也可使用puppet:///modules/module_name/file_name modules指的是模块路径,modele_name是模块名称
     ensure: file, directory, link, absent, present
     target: 符号连接文件的连接目标;通常当ensure属性为link时才须要指定此属性,表示从哪里连接,一旦定义target,那么content和source就没有用了,没有任何意义。
     owner: 属主
     group: 属组
     mode: 权限,支持八进制个石泉县,以及u,g,o的赋权方式
     path:目标路径,指定文件放哪建议使用绝对路径
     force: 强制删除;仅用于ensure为absent时; 不是必须属性
     purge: 清除指定目录中存在的,可是在puppet中未定义的文件;
     replace:是否替换已经存在的文件;
  4. exec的经常使用属性:
    运行一外部命令,命令应该具备“幂等性” (能够屡次运行,不会损坏结果)

    幂等性:
     1. 命令自己具备 “幂等性”。 (yum  update ,apt-get update)
     2. 资源有onlyif,unless,creates 等属性以实现命令的条件式运行。
         onlyif 仅在何时执行
         unless 除非什么条件下执行
         creates 刚刚建立时执行好比建立目录/建立文件
     3. 资源有refreshonly 属性,实现只有订阅的资源发生变化时才执行。只有在刷新时运行:只有这个资源依赖的其余资源改变了,这个命令才运行.用于执行命令;但一般仅应该用于必须执行命令才能完成操做时(puppet自己没法完成此功能);

    核心属性

    command: 要执行的命令,一般应该使用绝对路径;
     creates:文件。 此属性跟的文件不存在时才执行命令。加入command 是建立 文件,那么执行的条件是这个文件不存在
     onlyif:给定测试命令。仅在此命令执行成功即执行状态码返回为0,才执行command命令
     unless:给定测试命令。 和onlyif相反,仅当测试命令执行状态码不为0时,才执行command命令
     cwd: 目录, 在哪一个目录下运行命令
     path:为非绝对路径的命令指定搜索路径; 相似 环境变量 [path1,path2],若是不定义此属性,则必须给出命令的绝对路径。
     user:
     group:
     refresh: 跟命令,默认为收到依赖的资源的事件时会从新执行此命令;但此属性能够修改此默认行为;(定义命令接收到刷新通知时怎样操做,跟的也是命令,默认命令在执行一次,能够自定义,加入此命令为建立目录,当接收到刷新通知时,你能够先删除在建立。简单点就时 刷新时执行的命令。)
     refreshonly: 此资源不会自动被执行,除非被依赖的资源发生了改变;(仅在收到refresh通知时,才运行此资源,布尔型值)
     returns: 指定状态返回值;指按期望获得的返回值,当返回非此值时表示命令执行失败,默认为0, 通常不须要定义
     tries: 尝试执行次数 ,默认一次 根据returns 判断是否成功
     timeout: 超时时长
  5. notify 最简单的资源,就是显示信息

    核心属性
     message 要发送的消息的内容,仍是name/namevalue 
     notify {'title':
     message     => 'something here',
     }
  6. cron的经常使用属性: 定义任务计划/管理任务计划

    ensure: present, absent
     command: 周期性执行的命令;
     environment: 定义PATH环境变量;
     hour:
     minute:
     month:
     monthday:
     weekday:
  7. package的经常使用属性:
    管理程序包: 卸载,安装,升级

    ensure:installed, latest,version(2.3.1-2.el7) ,present, absent
     name: 程序包名称
     source:包文件的路径,能够是本地文件系统路径,也能够是个url;puppet:///modules/MODULE_NAME/FILENAME
     provider 指定采用哪一种方式安装程序包,如在centos系统中默认采用yum进行安装。如今想经过rpm进行安装,安装的源就是source属性所指定的文件,那么就必须使用provider属性 定义成rpm了。因此说 只有当provider 设置了 ,source属性才有意义。那么又一个实际应用的问题,当你采用rpm进行安装时,须要解决依赖关系,那么怎么解决依赖关系呢。这时候咱们就须要使用exec资源了。yum install指定本地安装文件,那么会使用本地的rpm包进行安装,同时又能解决依赖关系。最后你会发现使用exec资源是万能的。当编译安装的时候 仍是要采用exec资源进行.
    
     其余属性用的都很少了

    范例:

    package{'mysql':
         ensure  => installed,
         provider    => msi,
         source      => "D:\mysql\mysql-5.5.45.msi",
         install_options =>  {'INSTALLDIR' => 'C:\mysql'},
     }
  8. service 管理服务的

    service的经常使用属性:
     binary: 指定执行文件
     ensure:
         true, running 启动
         false, stopped 中止
     enable: 是否开机自动启动
     name:服务名称
     path: 服务脚本路径 咱们知道,在linux系统下有两种启动方式, 一种是直接调用二进制执行文件,另一种就是用系统中的服务管理命令,好比centos6中的service。因此当你不指定binary文件时,这个path就是指centos系统中的service命令调用哪一个执行文件。咱们知道通常service管理的服务命令都在/etc/init.d/目录下。如 /etc/init.d/httpd 文件。另外还有当用service进行管理服务时会有restart,status,start ,stop等选项。可是 puppet 并不知道你有没有这些命令因此才会有 hasrestart ,hasstop,hasstart, hasstatus属性,都是布尔值型。当你把这些值设置为false时,服务又有需求接受refresh 刷新后进行restart,那你怎么办呢。因此又须要咱们本身在资源中定义start,stop, restart, status等属性,属性值为命令
     hasrestart: 是否支持restart参数
     hasstatus: 是否支持status参数
     pattern: 指明用于搜索此服务相关进程的模式,当脚本不支持restart/status时,用于肯定服务是否处于运行状态。若是你的服务不支持stop,那就须要kill掉进程,那kill 的时候咱们知道有的服务启动的进程有好几个,就须要匹配须要kill 掉的每一个进程的,这个应该也是用pattern
     start:
     stop:
     restart: reload
     status:
  • 资源的特殊属性:
    元参数:如下四个参数都以其余定义过的的资源做为属性值,可是写法必须时Type['title'] 资源类型首字母要大写

    用于定义资源间的依赖关系

    before => Type['title']
      require => Type['title']

    用于定义通知通知和订阅的

    notify
      subscribe

    before/require使用举例

    before表明 当前资源要在某个资源执行以前执行
      require 当前资源执行须要某一个资源已经执行了
      还有一种链式表示的方法,用 ->表示

    范例

    方法一 before:

    group{'linux':
              gid => 3000,
              ensure => present,
              before => User['suse'],
          }
    
          user{'suse':
              uid => 3000,
              gid => 3000,
              shell => '/bin/shell',
              home => '/home/suse',
              ensure => present,
          }

    方法二 require:

    group{'linux':
              gid => 3000,
              ensure => present,
          }
    
          user{'suse':
              uid => 3000,
              gid => 3000,
              shell => '/bin/shell',
              home => '/home/suse',
              ensure => present,
              require => Group['linux'],
          }

    方法三 -> :

    group{'linux':
              gid => 3000,
              ensure => present,
          } ->
    
          user{'suse':
              uid => 3000,
              gid => 3000,
              shell => '/bin/shell',
              home => '/home/suse',
              ensure => present,
          }

notify/subscribe 通知/订阅举例

这个用服务举例,咱们知道nginx服务,当配置文件发生变化时,服务常常须要从新加载配置文件或者重启。puppet agent每隔一段时间去获取下catelog有无变化,有变化就会将file资源更新,这时service资源就须要执行restart 操做,那么咱们首先要知道 puppet 里service资源什么时间会调用restart ,当资源接收到refresh时就会调用restart,那么何时会触发refresh呢?就是当前资源接收到通知 或者 当前资源订阅的主题有新信息了。
相关文章
相关标签/搜索