puppet定义资源,配置语言(2)

定义资源:

type {‘title‘:
   attribute1 => value1,
   attribute2 => value2,
  }

要点:type表示资源类型必须小写;title是定义资源名称,在同一类型下必须惟一;

常用资源类型:

user, group, file, package, service, exec, cron, notify

资源的3类特殊属性:

NameVar:名称变量,值必须唯一(如果NameVar类型的属性未指定值会使用item定义的值);

ensure:用于控制资源的存在性

ensure =>file 存在且为一个普通文件

ensure =>directory 存在且为一个目录

ensure =>present 存在,可通用于描述上述三种(默认为present)

ensure =>absent 不存在

metaparameters:元参数,通常是所有类型都支持的属性。

group:

管理组资源

常用属性:

name: 组名,NameVar

gid:GID

system: true|false    #是否为系统组

ensure: present, absent

members:组内成员

user:

管理用户

常用属性:

commet:注释信息

ensure:present, absent

expiry:账号过期期限;

gid:基本组id

groups:附加组

home:家目录

shell:默认shell

name: NameVar

system:是否为系统用户,true|false

uid: UID

password:

file:

管理文件及其内容、从属关系以及权限;内容可通过content属性直接给出,也可通过source属性根据远程服务器路径下载生成;

指明文件内容来源:

content:直接给出文件内容,支持\n(换行), \t(制表符);

source:从指定位置下载文件;

recurse:true|false   递归下载目录下的文件;

ensure:file, directory, link, present, absent  #前3个用于区别文件类型;

常用属性:

force:强制运行,可用值yes, no, true, false(如创建一个文件与目录重名了,默认是不会覆盖的,如果要强制创建会删除目录只保留文件);

group:属组

owner:属主

mode:权限,支持八进制格式权限,以及u,g,o的赋权方式

path:目标路径;

source:源文件路径;可以是本地文件路径(单机模型),也可以使用puppet:///modules/module_name/file_name;

target:当ensure为“link”时,target表示path指向的文件是一个符号链接文件,其目标为此target属性所指向的路径;此时content及source属性自动失效;

#mkdir /manifests
     #vim test1.pp
     group{‘distro‘:
      gid => 2000,
      ensure => present,
   
     }
     user{‘centos‘:
      uid => 2000,
      gid => 2000,
      shell => ‘/bin/bash‘
      home => ‘/home/centos‘
      ensure => present,
   
     }
     file{‘/tmp/mydir‘:
             ensure  => directory,
     }   #创建空目录/tmp/mydir

file{‘/tmp/puppet.file‘:
             content => ‘puppet testing\nsecond line.‘,
             ensure  => file,
             owner   => ‘centos‘,
             group   => ‘distro‘,
             mode    => ‘0400‘,
     }   #创建文件/tmp/puppet.file

file{‘/tmp/fstab.puppet‘:
             source  => ‘/etc/fstab‘,
             ensure  => file,
     }    #复制

file{‘/tmp/puppet.link‘:
             ensure  => link,
             target  => ‘/tmp/puppet.file‘,
     } #创建链接文件,名称为/tmp/puppet.link,链接至/tmp/puppet.file文件
     #puppet apply -v test1.pp

exec:

运行一外部命令;命令应该具有“幂等性”;

幂等性:命令可以运行多次(如创建文件,第一次可以创建,第二次运行后文件已经存在);

1、命令本身具有 幂等性;

2、资源有onlyif, unless,creates等属性以实现命令的条件式运行;

3、资源有refreshonly属性,以实现只有订阅的资源发生变化时才执行;

command:运行的命令;NameVar;(如果command未指定会使用item定义的值)

creates:此属性指定的文件不存在时才执行此命令;

cwd:在此属性指定的路径下运行命令即先cd至该目录下再执行命令;

user: 以指定的用户身份运行命令;

group: 指定组身份运行命令;

onlyif:给定一个测试命令;仅在此命令执行成功(返回状态码为0)时才运行command指定的命令;

unless:给定一个测试命令;仅在此命令执行失败(返回状态码不为0)时才运行command指定的命令;

refresh:接受到其它资源发来的refresh通知时,默认是重新执行exec定义的command,refresh属性可改变这种行为,即可指定仅在refresh时运行的命令;

refreshonly:仅在收到refresh通知,才运行此资源;true|false

returns:期望的状态返回值,返回非此值时表示命令执行失败;

tries:尝试执行的次数;

timeout:超时时长;

path:指明命令搜索路径,其功能类型PATH环境变量;其值通常为列表[‘path1‘, ‘path2‘, ...];如果不定义此属性,则必须给定命令的绝对路径;

#vim test2.pp
    exec{‘/usr/sbin/modprobe ext4‘:
     user => root,
     group => root,
     refresh => ‘/usr/sbin/modprobe -r ext4 && /usr/sbin/modprobe ext4‘,
     timeout => 5,
     tries => 2,
    }

exec{‘/bin/echo mageedu > /tmp/hello.txt‘:
     user => root,
     group => root,
     creates => ‘/tmp/hello.txt‘,
    }

exec{‘/bin/echo mageedu > /tmp/hello2.txt‘:
     user => root,
     group => root,
     unless => ‘/usr/bin/test -e /tmp/hello2.txt‘,
    }

notify:

用于显示信息

核心属性:

message:要发送的消息的内容;NameVar

#vim test3.pp
    notify:{"hello there":}
    #puppet apply -v test3.pp  #会显示信息

cron:

管理cron任务计划;

常用属性:

ensure:present, absent

command:要运行的job;

hour:

minute:

month:

monthday:

weekday:

name:

user:运行的用户

environment:运行时的环境变量;

#vim test4.pp
    cron{"sync time":
     command => ‘/usr/sbin/ntpdate 172.16.0.1 &> /dev/null‘,
     minute => ‘*/10‘,   #每10分钟运行一次
     ensure => present,  #默认为present
    }
    #crontab -l  #查看生成了计划任务

#vim test5.pp
    cron{"sync time":
     command => ‘/usr/sbin/ntpdate 172.16.0.1 &> /dev/null‘,
     minute => ‘*/10‘,   #每10分钟运行一次
     ensure => absent,  
    }
    #crontab -l  #查看计划任务已被删除

package:

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

常用属性:

ensure: installed, latest, VERSION(2.3.1-2.el7),present, absent

name:程序包名称;

source:程序包来源;可以本地文件路径或URL;

provider:指明通过何种方式来安装程序包,如rpm还是yum。(默认是yum安装)

package{‘zsh‘:
    ensure => latest,
   }

package{‘jdk‘:
    ensure => installed,
    source => ‘/usr/local/src/jdk-8u25-linux-x64.rpm‘,
    provider => rpm,
   }

service:

管理运行的服务;

常用属性:

enable:是否开机自动启动,true|false;

特殊属性:Metaparameters

主要有两类:定义依赖关系和定义通知关系;Metaparameters使用4种元参数来确保资源之间的相关性(before,require,notify,subscribe);

这4个元参数都以另外的其它资源或资源数组作为其值,这也称作资源引用;资源引用要通过“Type[‘title‘]”的方式进行,如User[‘magedu‘],资源引用时,其类型名的首字母要大写。

定义依赖关系:

被依赖的资源中使用:before;

依赖其它资源的资源:require;

->:链式依赖

以下例子:创建suse用户时要确保附加组linux要事先存在,使用可以在group资源中引用user资源,表明要创建user资源group资源要事先存在。

被依赖的资源中使用:before:

      依赖其它资源的资源:require:

依赖多个资源:

定义通知关系:

被依赖的资源中使用:notify

监听其它资源的资源:subscribe

~>:链式通知

1.被依赖的资源中使用:notify:

定义资源:

修改了file资源,将配置文件中监听的端口修改为808,file资源会通知service[nginx]资源做refresh操作。

2.监听其它资源的资源:subscribe

puppet变量及其作用域

变量名均以$开头,赋值符号为=; 任何非正则表达式类型的数据均可赋值给变量;

作用域:定义代码的生效范围,以实现代码间隔离;

仅能隔离:变量,资源的默认属性;

不能隔离:资源的名称,及引用;

每个变量两种引用路径:

相对路径

绝对路径:$::scope::scope::variable

变量的赋值符号:

=

+=:追加赋值

数据类型:

布尔型:ture, false

undef:未被声明的变量的值类型(也可手动为某变量赋予undef值,即直接使用不加引号的undef字符串)

字符型:可以不用引号,支持单引号(强引用),双引号(弱引用)

数值型:整数和浮点数;

数组:[item1, item2, ...],元素可为任意可用数据类型,包括数组和hash; 索引从0开始,还可以使用负数;

hash:{key => value, key => value,...}, 键为字符串,而值可以是任意数据类型;

正则表达式:

非标准数据类型,不能赋值给变量;

语法结构:

(?<ENABLED OPTION>:<SUBPATTERN>)

(?-<DISABLED OPTION>:<SUBPATTERN>)

OPTION:

i: 忽略字符大小写;

m:把.当换行符;

x:忽略模式中的空白和注释;

operatingsystem变量的值如果是ubuntu或debian,就把packages这个变量的值赋值为apache2

表达式:

比较操作符:==, !=, <, <=, >, >=, =~(能被右侧模式匹配), !~(不能被右侧模式匹配), in

逻辑操作符:and, or, !

算术操作符:+, -, *, /, %, >>(右移位), <<(左移位)

变量的例子:

定义一个全局的软件包名变量,根据安装的软件包不同,直接修改变量值即可:

puppet中变量的种类:

自定义变量

facter变量:可直接引用;(每一个agent都要报告系统的属性以及各种硬件设备等信息给服务器端,服务器端把对应模板中引用的变量名都替换成客户端的属性值)

查看puppet支持的各facts:

facter -p

内置变量:

客户端内置:

$clientcert

$clientversion:客户端puppet版本号

服务器端内置

$servername:服务器名称

$serverip:服务器IP地址

$serverversion:服务器程序文件版本号

$module_name:模块名称

条件判断

if, case, selector, unless

if语句:

单分支:

if CONDITION {
    ...
   }

双分支:

if CONDITION {
    ...
   }
   else {
    ...
   }

CONDITION的用法:

1、比较表达式

2、变量引用

3、有返回值函数调用

if语句例子1:

if $processorcount>1 {
    notice("SMP Host.")   #notice是内置函数,给什么就输出什么
   } else {
    notice("Poor Guy.")
   }

if语句例子2:

case语句:

case CONTROL_EXPRESSION {

case1, case2: { statement }

case3, case4, case5: { statement }

...

default: { statment }

}

CONTROL_EXPRESSION:表达式、变量、函数(有返回值);

case:

字符串,变量,有返回值函数,模式,default

case例子:

selector语句:

类似于case,但分支的作用不在于执行代码片断,而是返回一个直接值;

CONTROL_VARIABLE ? {
    case1 => value1,
    case2 => value2,
    ...
    default => valueN
   }

CONTROL_VARIABLE: 变量、有返回值的函数;但不能是表达式;

case:直接值(需要带引号)、变量、有返回值的函数、正则表达式模式或default

原文地址:https://www.cnblogs.com/lriwu/p/8821518.html

时间: 2024-10-08 21:14:26

puppet定义资源,配置语言(2)的相关文章

45 puppet基础、资源详解、配置语言、puppet类与模板及模块

01 puppet基础 配置: node1:192.168.1.131 CentOS7.2 node2:192.168.1.132 CentOS7.2 [[email protected] ~]# rpm -ivh epel-release-latest-7.noarch.rpm [[email protected] ~]# yum list all | grep -i "puppet" puppet.noarch                           3.6.2-3.e

puppet安装和配置

Puuppet是一个开源的新一代的集中化配置管理工具,它由自己所声明的语言表达系统配置,通过客户端与服务端直接的连接,维护着关系库. Puppet是一个跨平台的集中化配置管理系统,它使用自由的描述语言,可管理配置文件.用户.Cron.软件包,系统服务等,Puppet把这些统称为"资源". Puppet是基于Ruby语言并使用Apache协议授权的开源软件,它既能以客户端-服务端(C/S)的方式运行,也能独立运行.客户端默认每30分钟会与服务端确认一次更新,以确保配置的一致性. Pupp

puppet yum安装配置,简单证书维护

Puppet学习之puppet的安装和配置 一.Puppet简介 Puppet基于ruby语言开发的自动化系统配置工具,可以C/S模式或独立运行,支持对所有UNIX及类UNIX系统的配置管理,最新版本也开始支持对Windows操作系统有限的一些管理.Puppet适用于服务器管的整个过程 ,比如初始安装.配置更新以及系统下线. 二.Puppet的安装 Puppet的安装方式支持源码安装.yum安装以及ruby的gem安装.官网推荐使用yum来安装puppet,方面以后的升级.管理.维护.Cento

Varnish配置语言之VCL

Varnish配置语言之VCL常用配置 用户请求一个资源的流程 (1)DNS查询 (2)建立连接 (3)服务器接收到请求后构建响应并处理完成 (4)发送至客户端,传输时间 (5)断开连接 缓存优化的意义 所谓的优化就是从以上每个角度去缩短时间,缓存是能够降低服务器的处理时间的 命中率的类型 ·文档命中率,文档命中率高并不能够说明服务器性能增强很明显 比如命中的都是很小的资源,而未命中的都是很大,所以就算命中率达到80%也并不说明传输的内容量小了80%,因此还有字节命中率 ·字节命中率 命中的文档

Linux puppet的安装配置部署

一.puppet简介 puppet是一个为实现数据中心自动化管理而设计的配置管理软件,能够管理IT基础设施的整个生命周期:供应(provisioning)配置(configuration).联动(orchestration)及报告(reporting).puppet基于C/S架构,类似于zabbiz,有master与agent节点之分.它是一个开源的(谈不上真正的开源,因为有商业版与社区版之分).新一代的.集中化的配置管理工具,由ruby语言研发,它拥有自己的配置语言(PCL,puppet co

Varnish的配置语言vcl及其内置变量介绍

一.Varnish的配置语言VCL Varnish的所有配置都是通过VCL(varnish configure language)来配置的.它是一种基于"域"(domain specific)的简单编程语言,它支持有限的算术运算和逻辑运算操作.允许使用正则表达式进行字符串匹配.允许用户使用set自定义变量.支持if判断语句,也有内置的函数和变量等.使用VCL编写的缓存策略通常保存至.vcl文件中,其需要编译成二进制的格式后才能由varnish调用.事实上,整个缓存策略就是由几个特定的子

puppet部署三 &nbsp; &nbsp; &nbsp; 配置puppet

puppetmster  2.配置puppet.conf 注意:这个里面配置了两个certname名称,其中[master]中配置的certname是为所有节点认证用的master名称,[agent]中配置的certname是他本身agent的名称,当然不配置默认是和master的名称是一样的. [[email protected] ~]# cp /etc/puppet/puppet.conf{,.bak}   #备份 [[email protected] ~]# vim /etc/puppet

Puppet默认资源和虚拟资源介绍(三十一)

puppet的默认资源 默认资源可以为资源初始化属性和值,通常默认资源声明在site.pp文件首部,代码如下: [[email protected] ~]# cat site.pp  Exec { path => '/usr/bin:/bin:/usr/sbin:/sbin'} 声明默认资源注意事项如下: 1.声明默认资源时首字母需要大写,如exec声明默认资源Exec.package声明默认资源Package等. 2.如果声明资源有一个名称空间资源"::",它的每个环节都需要首

【logstash】 - logstash配置语言基础

在网上很难找到logstash中文资料,ruby也没了解过,看官方文档太吃力,而我的要求也不高,使用loggstash可以提取想要的字段即可. 以下内容纯粹想当然的理解: logstash配置格式 #官方文档:http://www.logstash.net/docs/1.4.2/ input {   ...#读取数据,logstash已提供非常多的插件,比如可以从file.redis.syslog等读取数据 } filter {   ...#想要从不规则的日志中提取关注的数据,就需要在这里处理.