zoukankan      html  css  js  c++  java
  • puppet(2)-资源介绍

    puppet- 资源介绍:

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

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

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

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

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

    1. group的常用属性:

       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的常用属性:
      管理文件从属关系、权限及其内容。

      管理的类型有:

       普通文件
       目录
       符号连接等(通过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:是否替换已经存在的文件;
    
    1. 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: 超时时长
      
    2. notify 最简单的资源,就是显示信息

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

       ensure: present, absent
       command: 周期性执行的命令;
       environment: 定义PATH环境变量;
       hour:
       minute:
       month:
       monthday:
       weekday:
      
    4. 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:mysqlmysql-5.5.45.msi",
            install_options => 	{'INSTALLDIR' => 'C:mysql'},
        }
    
    1. 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呢?就是当前资源接收到通知 或者 当前资源订阅的主题有新信息了。
  • 相关阅读:
    Largest Rectangle in Histogram
    Valid Sudoku
    Set Matrix Zeroes
    Unique Paths
    Binary Tree Level Order Traversal II
    Binary Tree Level Order Traversal
    Path Sum II
    Path Sum
    Validate Binary Search Tree
    新手程序员 e
  • 原文地址:https://www.cnblogs.com/zhming26/p/8629946.html
Copyright © 2011-2022 走看看