Puppet之基础篇

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Puppet之基础篇相关的知识,希望对你有一定的参考价值。


一、基本概念

  • 资源:是Puppet最基础的元素。资源可以是文件、服务、软件包、自定义脚本等。Puppet主要的特色就是处理资源与资源之间的依赖与关系

  • 属性:资源需要定义的相关属性值,通过属性的定义才知道资源在做什么

  • 类:将多个资源组织起来进行重新定义。

  • 模块:多个类的集合。

  • 变量:与其他语言类似,同样支持变量。

  • 参数:通常把传递给变量的值称为参数

  • 节点:Puppet的每一个客户端,即主机。Puppet在管理主机时要求与计算机配置的主机名保持一致,并建议采用DNS来管理主机名。

 

 

 

二、语法与命令

1、语法基础

    Puppet语法规则是以括号{}分类,以冒号 : 声明,以逗号 , 属性结束

    例: file {‘nginx’:

            ensure=> file,

            }

 

注释

  • #这是一个注释

  • /*这是一个注释*/

  • //这是一个注释,不建议使用这种

 

变量的引用

不包含变量的字符串应该使用单引号(’’)括起来。

包含变量的字符串应该使用双引号(””)括起来,字符串中的所有变量应该使用花括号{}括起来

例:“${::operatingsystem}is not supported by ${module_name}”

 

对变量本身的引用最好不用花括号

例:mode => $my_mode

 

资源

1)资源名

资源名采用单引号(’’)引起来,采用冒号:结尾。如果有变量的时候就用双引号引起来。

例:package { ‘nginx’:

                            ensure=> present

                            }

 

2)对齐

资源名称和各个符号之间都有一个空格

 

3)属性的顺序

当声明一个资源时,应该先指定它的ensure属性,方便阅读

 

4)文件权限

设置一个文件的权限时,需要将权限用单引号引起来

例:

file {‘/var/log/syslog’:

         ensure=> present,

         mode=> ‘0644’,

         }

 

5)资源默认值

通常需要设置一些资源默认值,为一组资源指定一个默认的参数值,减少重复定义。资源默认值类似于全局变量。设置资源默认值时应将资源类型的第一个字母大写。最常见的用法是使用exec资源指定path变量目录,避免在以后使用命令时找不到操作系统的环境变量

例:

vim /etc/puppet/manifests/site.pp

Exec { PATH => “/usr/bin:/usr/sbin:/usr/local/bin”}

 

定义一个文件资源的用户默认值

vim /etc/puppet/manifests/site.pp

file {

         mode=> ‘0644’,

         owner=> ‘root’,

         group=> ‘root’,

         }

 

1)文件名的命名方式

在一个模块中,如果定义了一个类,且它还有子类,那么它的文件命名方式就是子类名.pp“。比如定义一个apache的类,包含sslvirtual_host两个类。那么在manifests目录同时有3个文件:init.ppssl.ppvirtual_host.pp。配置方法如下:

 

# /etc/puppet/modules/apache/manifests

#init.pp

class apache {}

#ssl.pp

class apache::ssl {}

#virtual_host.pp

define apache::virtual_host () {}

 

2)关系声明

声明两个资源之间的关系时,必须是从左到右的顺序进行,不能从右到左

例: Package[‘httpd’]-> Service[‘httpd’]

 

3)类的继承

表达方式如下:

class ssh {}

class ssh::client inherits ssh {...}#client 子类继承ssh

class ssh::server inherits ssh {...}#server子类继承ssh

 

2.语法检查

puppet parservalidate init.pp #init.pp做语法检查

 

一次检查多个文件

方法一:

$ for file in $(find . -iname ‘*.pp’); dopuppet parser validate --color false --render-ass --modulepath=modules $file ;done;

#通过find命令查找当前目录下pp结尾的文件,然后采用for循环执行puppet检查文件语法

方法二:

$ find -name ‘*.pp’ | xargs -n 1 -t puppetparser validate

#通过find命令查找当前目录下以pp结尾的文件,通过管道传给xargs命令

#-n 参数指定一次只处理一个变量,-t参数启用跟踪方式执行puppet检查文件语法

 

代码的调试

方法一:

logoutput输出更详细的信息

例:

$ vim test_output.pp

exec { ‘test_logoutput’:

         command=> “/bin/ls linuxtone.org”,

         logoutput=> on_failure,

         }

如果你想不管命令执行成功或者失败都输出错误信息,可以这样做:

 logoutput => true,

 

方法二:

notify输出需要的信息

例:

notify { “i am running on node $fqdn” }

 

 

 

 

 

 

 

 

 

 

二、资源

 

 

 

 

三、模块

 

四、类

 

五、模板

 

六、节点

 

七、Facter

 

八、标签


以上是关于Puppet之基础篇的主要内容,如果未能解决你的问题,请参考以下文章

puppet入门与掌握之puppet工作原理(原理篇)

puppet 基础篇

自动化运维Saltstack系列之基础功能篇

Puppet之原理篇

puppet入门与掌握之puppet介绍(介绍篇)

SaltStack入门篇之远程执行和配置管理