puppet- 资源介绍:

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

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

    1. puppet describe -l
    2. puppet describe -s TYPE
    3. puppet describe TYPE
  • 定义资源的要点:

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

    1. package {'nginx':
    2. ensure => present,
    3. name => nginx,
    4. }
    5. 命名变量:namevar,可省略,默认为title
  • 常用类型:package, user, group, file, service, exec, cron, notify

  1. group的常用属性:

    1. ensure: present, absent
    2. name: 组名
    3. gid: GID
    4. system: 是否为系统组;true, yes; false, no
  2. user的常用属性:

    1. ensure: present, absent
    2. name: 用户名
    3. uid: UID
    4. system: 是否为系统用户;
    5. gid: 基本组;
    6. groups: 附加组;
    7. home: 家目录;
    8. password: 密码;
    9. shell: 默认shell
    10. comment: 注释信息;
    11. expiry: 账号过期期限 不常用
  3. file的常用属性:

    管理文件从属关系、权限及其内容。

    管理的类型有:

    1. 普通文件
    2. 目录
    3. 符号连接等(通过ensure属性指定)

如果管理普通文件,文件内容可以:

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

如果是目录:resource属性+recurse属性可以递归下载目录

核心属性:

  1. resource: 可以递归下载目录同时要配合另外一个recurse属性定义是否递归下载构造目录。
  2. recurse: 属性是布尔型。因此recurse属性 只有在ensure 属性为directory时才有意义。
  3. content:直接生成的文件内容;
  4. source: 通过指定的URL下载文件至目标位置;愿文件路径,可以是本地文件路径(单机模型),也可以使用puppet:///modules/module_name/file_name modules指的是模块路径,modele_name是模块名称
  5. ensure: file, directory, link, absent, present
  6. target: 符号链接文件的链接目标;一般当ensure属性为link时才需要指定此属性,表示从哪里链接,一旦定义target,那么contentsource就没有用了,没有任何意义。
  7. owner: 属主
  8. group: 属组
  9. mode: 权限,支持八进制个石泉县,以及u,g,o的赋权方式
  10. path:目标路径,指定文件放哪建议使用绝对路径
  11. force: 强制删除;仅用于ensureabsent时; 不是必须属性
  12. purge: 清除指定目录中存在的,但是在puppet中未定义的文件;
  13. replace:是否替换已经存在的文件;
  1. exec的常用属性:

    运行一外部命令,命令应该具有“幂等性” (可以多次运行,不会损坏结果)

    1. 幂等性:
    2. 1. 命令本身具有 “幂等性”。 yum update ,apt-get update
    3. 2. 资源有onlyif,unless,creates 等属性以实现命令的条件式运行。
    4. onlyif 仅在什么时候执行
    5. unless 除非什么条件下执行
    6. creates 刚刚创建时执行比如创建目录/创建文件
    7. 3. 资源有refreshonly 属性,实现只有订阅的资源发生变化时才执行。只有在刷新时运行:只有这个资源依赖的其他资源改变了,这个命令才运行.用于执行命令;但通常仅应该用于必须执行命令才能完成操作时(puppet本身无法完成此功能);

    核心属性

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

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

    1. ensure: present, absent
    2. command: 周期性执行的命令;
    3. environment: 定义PATH环境变量;
    4. hour:
    5. minute:
    6. month:
    7. monthday:
    8. weekday:
  4. package的常用属性:

    管理程序包: 卸载,安装,升级

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

范例:

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

    1. service的常用属性:
    2. binary: 指定执行文件
    3. ensure:
    4. true, running 启动
    5. false, stopped 停止
    6. enable: 是否开机自动启动
    7. name:服务名称
    8. path: 服务脚本路径 我们知道,在linux系统下有两种启动方式, 一种是直接调用二进制执行文件,另外一种就是用系统中的服务管理命令,比如centos6中的service。所以当你不指定binary文件时,这个path就是指centos系统中的service命令调用哪个执行文件。我们知道一般service管理的服务命令都在/etc/init.d/目录下。如 /etc/init.d/httpd 文件。另外还有当用service进行管理服务时会有restart,statusstart ,stop等选项。但是 puppet 并不知道你有没有这些命令所以才会有 hasrestart ,hasstop,hasstart, hasstatus属性,都是布尔值型。当你把这些值设置为false时,服务又有需求接受refresh 刷新后进行restart,那你怎么办呢。所以又需要我们自己在资源中定义startstop, restart, status等属性,属性值为命令
    9. hasrestart: 是否支持restart参数
    10. hasstatus: 是否支持status参数
    11. pattern: 指明用于搜索此服务相关进程的模式,当脚本不支持restart/status时,用于确定服务是否处于运行状态。如果你的服务不支持stop,那就需要kill掉进程,那kill 的时候我们知道有的服务启动的进程有好几个,就需要匹配需要kill 掉的每个进程的,这个应该也是用pattern
    12. start:
    13. stop:
    14. restart: reload
    15. status:
  • 资源的特殊属性:

    元参数:以下四个参数都以其他定义过的的资源作为属性值,但是写法必须时Type['title'] 资源类型首字母要大写

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

    1. before => Type['title']
    2. require => Type['title']

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

    1. notify
    2. subscribe

    before/require使用举例

    1. before代表 当前资源要在某个资源执行之前执行
    2. require 当前资源执行需要某一个资源已经执行了
    3. 还有一种链式表示的方法,用 ->表示

范例

  1. 方法一 before
  2. group{'linux':
  3. gid => 3000,
  4. ensure => present,
  5. before => User['suse'],
  6. }
  7. user{'suse':
  8. uid => 3000,
  9. gid => 3000,
  10. shell => '/bin/shell',
  11. home => '/home/suse',
  12. ensure => present,
  13. }
  14. 方法二 require
  15. group{'linux':
  16. gid => 3000,
  17. ensure => present,
  18. }
  19. user{'suse':
  20. uid => 3000,
  21. gid => 3000,
  22. shell => '/bin/shell',
  23. home => '/home/suse',
  24. ensure => present,
  25. require => Group['linux'],
  26. }
  27. 方法三 -> :
  28. group{'linux':
  29. gid => 3000,
  30. ensure => present,
  31. } ->
  32. user{'suse':
  33. uid => 3000,
  34. gid => 3000,
  35. shell => '/bin/shell',
  36. home => '/home/suse',
  37. ensure => present,
  38. }

notify/subscribe 通知/订阅举例

  1. 这个用服务举例,我们知道nginx服务,当配置文件发生变化时,服务经常需要重新加载配置文件或者重启。puppet agent每隔一段时间去获取下catelog有无变化,有变化就会将file资源更新,这时service资源就需要执行restart 操作,那么我们首先要知道 puppet service资源什么时间会调用restart ,当资源接收到refresh时就会调用restart,那么什么时候会触发refresh呢?就是当前资源接收到通知 或者 当前资源订阅的主题有新信息了。

puppet(2)-资源介绍的更多相关文章

  1. Puppet自动化运维-资源介绍篇(4)

    1.什么是资源? 资源是Puppet最基础的元素,每个资源的定义都具有标题,类型,以及一系列的属性. 资源定义有如下的特性:   (1) Puppet使用title在编译时区分每个资源,使用命名变量在 ...

  2. Unity编程标准导引-1.2官方资源介绍

    1.2.官方资源介绍 Unity官方提供了丰富的学习和参考资源,有以下类别: Unity手册以及API文档 Unity的官方教程 AssetStore 1.2.1 Unity手册以及API文档 前述文 ...

  3. 自动化运维工具之Puppet常用资源(一)

    前文我们聊到了puppet的架构,单机模型和master/agent模型的工作流程以及puppet的基础使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14 ...

  4. 自动化运维工具之Puppet常用资源(二)

    前文我们了解了部分puppet的资源的使用,以及资源和资源的依赖关系的定义,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14071459.html:今天我们继 ...

  5. Centos 7 Puppet之foreman介绍安装测试

    一.简介 1.前言(引用一下网上的资料) 随着企业的 Linux 系统数量越来越多,管理问题便成为一个相对麻烦并需要急 迫解决的问题,这里有 2 个 Key Message:1)统一管控体系非常重要, ...

  6. Puppet file资源使用

    1.文件管理介绍:          可管理的项目: 支持文件和目录 设置文件及目录的所有者及权限 恢复文件(包括文件的内容.权限及所有者) 清理目录以及子目录 2. 可使用参数: ensure :指 ...

  7. 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍

    这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...

  8. [vue三部曲]第一部:vue脚手架的搭建和目录资源介绍,超详细!

    第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装1.2 如果本机已经安装node的运行换,请更新至最新的node 版本下载地址:https://nod ...

  9. 国外一些好用的UX/UI设计工具和资源介绍

    你今天使用的设计工具也许不再适合以后的网页和APP设计项目了.新的工具不断的推出市场,目标只有一个,让你的工作更快.更容易而且工作成效更好.以下就是各种工具的介绍入口,当您点击标题就会看到各种很好的工 ...

随机推荐

  1. webView加载url,加载指定字符串

    //加载url-(void)addWebView{ UIWebView * webView = [[UIWebView alloc] initWithFrame:CGRectMake(, , zScr ...

  2. Python 数据结构和算法

    阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...

  3. Linux之临时配置网络(ip,网关,dns)+永久配置

    作业一:临时配置网络(ip,网关,dns)+永久配置 配置网络信息 [root@localhost ~]# ifconfig eno16777736: flags=4163<UP,BROADCA ...

  4. leetcode笔记--SUM问题

    引用自 http://blog.csdn.net/wangxiaojun911/article/details/18922337,此处仅作为自己参考 1.Two SUM Given an array ...

  5. nginx -- 单独访问某个页面404

  6. Maven中classifier

    1.classifier概述 classifier通常用于区分从同一POM构建的具有不同内容的构件(artifact).它是可选的,它可以是任意的字符串,附加在版本号之后. 2.使用场景 场景一:区分 ...

  7. 我的第一个 react redux demo

    最近学习react redux,先前看过了几本书和一些博客之类的,感觉还不错,比如<深入浅出react和redux>,<React全栈++Redux+Flux+webpack+Bab ...

  8. SSH方式连接Git服务器需要注意的地方

    如何安装Git?这个我这里就不再多说了,想要了解的可以自行百度,以下文字是基于本地Git安装OK,且Git服务器可用的情况下,我的Git是GitLab 接下来开始操作 1:首先在本地生成私钥和公钥,这 ...

  9. jsp中添加过滤器,实现校验用户身份

    我现在需要实现一个功能,就是用户登录前不允许访问系统,我使用的是jsp的过滤器来实现的. 先把filter过滤器的代码粘出来: package com.day8.filter; import java ...

  10. 通过自己定义MVC的Controller的Json转换器解决日期序列化格式问题

    今日,在MVC框架下使用EasyUI的datagrid载入数据时,服务端返回的Json日期格式为 /Date(1433088000000+0800)/ .须要client进一步转换.并且也不符合Eas ...