这一节学习puppet的资源属性以及使用方法。 node
咱们通常在node.pp文件中为每一台主机设置节点定义,若是有许多节点,node.pp不会变得很大,由于puppet有方法来处理这些问题。若是定义了节点,可是没有配置任何内容,puppet agent链接master时会识别出这个节点但并不进行任何操做。你能够定义个叫作default的默认节点,若是没有其余节点定义存在,这个节点的内容就会被应用到主机上。 shell
puppet有一个节点继承结构,可让一个节点内容继承于另外一个节点,在同一个时刻,每一个节点只能继承于一个节点。可是随着节点数量的增长,当只有部分节点须要调整时,这种结构可能会出现问题,因此最好使用平面的树形节点分类结构而不是节点继承。在puppet中能够设置变量,在同一个做用域中给同一个变量赋值会致使错误,而每个类、定义、节点都会引入一个新的做用域,在不一样的做用域中能够对一个变量进行从新赋值。 apache
模块是包含了资源、类、文件以及配置文件模板的独立容器,咱们能够用模块来定义每台主机配置的不一样部分,模块是puppet清单的结构化集合,puppet会搜索模块路径来寻找模块并加载它们,默认的模块路经是/etc/puppet/modules和/var/lib/puppet/modules,这个路径能够由modulepath选项设置,而每一个模块目录又有特定的目录结构,假如咱们的模块放在/etc/puppet/modules目录下,咱们在modules目录下创建一个apache模块目录,目录结构以下: ssh
apache/ apache/manifests apache/manifests/init.pp apache/templates apache/files
咱们能够在init.pp文件中建立一个和模块同名的类,而后用include函数把这个模块应用到一个节点上面,include函数能够将包含在一个类或者模块中的资源添加到节点。就如上一节的ssh和tree模块同样。函数只能运行在master上。 函数
在init.pp文件中建立一些类和初始资源,模块能够由多个类组成,这样一来init.pp文件中就有愈来愈多的类和资源,管理起来不是很方便,puppet可让设置的每个类都放在相关模块的manifests目录下的一个独立文件中,而不是只能放在init.pp文件中,当puppet载入模块时会自动搜索以.pp做为后缀名的文件而后自动导入它们。 学习
咱们已经了解了建立模块的目录结构,接下来要建立类和资源,咱们知道资源由类型、标题和一系列属性构成,每一个资源的属性当中有一个被做为资源的“名字变量”,用这个属性的值来做为资源的名字,package和service使用name属性做为它们的名字变量file资源使用path属性做为它的名字变量,大多数的时候咱们不须要设置名字变量,由于它们于标题相同,可是有时候若是标题过长,引用麻烦,咱们但愿有一个简单的名字,就能够设置各个资源的名字变量。 spa
前面说过puppet能够识别不一样的平台,那是由于在每一个节点上都安装有facter,每次puppet运行时,facter都会收集agent的数据发送给master,master就根据这些收集来的数据分析agent使用的是那种平台。咱们能够在类中根据facter收集的数据使用case语句进行分析,而后选择合适的平台软件包。 code
官方建议咱们在建立模块时,使用::命名空间语法做为在模块中建立结构和组织的一种方法。前缀告诉puppet该类属于哪一个模块后缀则是类名。 继承
以上是puppet的基础知识,接下来会在实际应用过程当中对用到的知识进行学习。 资源