本文共 3683 字,大约阅读时间需要 12 分钟。
之前讲了puppet中的类,模板(简单的变量替换),包括在定义资源清单的时候,很多资源都回依赖外部文件,(比如rpm包依赖rpm包文件)、 如果安装完提供配置文件,需要一个文本文件或是一个模板文件, 要复制资源到别的主机上运用,就要把清单所依赖的所有文件都复制i过去。但是资源清单的时候很难理清楚, 就需要一个组织结构来包含资源清单和依赖的所有外部 文件 这个功能叫做模块,可以理解为就是一个自包含的资源清单和其所依赖的各外部文件所组成的目录结构 puppet的模块格式 MODULES_NAME: 模块名称,在这目录内至少拥有以下内容 manifests/ 清单 文件 init.pp files/ 清单文件各资源所依赖的静态外部文件 templates/ 依赖的模板文件 lib/ 插件目录,常用于存储自定义的facts以及自定义类型;(一般做非常高级的功能设置才有用) 插件的帮助放在spec目录下 spec/ 类似于tests目录,存储lib/目录下插件的使用帮助和范例 tests/ 当前模块的使用帮助或使用范例文件;
puppet模块: 模块就是一个按约定的、预定义的结构存放了多个文件或子目录的目录, 目录里的这些文件或子目录必须遵循一定格式的命名规范; puppet会在配置的路径下查找所需要的模块; MODULES_NAME: manifests/ init.pp files/ templates/ lib/ spec/ tests/
模块名只能以小写字母开头,可以包含小写字母、数字和下划线;但不能使用”main"和"settings“;
manifests/ init.pp:必须一个类定义,类名称必须与模块名称相同; files/:静态文件;(在访问时,可供puppetURL来访问) puppet URL: puppet:///modules/MODULE_NAME/FILE_NAME templates/: tempate(‘MOD_NAME/TEMPLATE_FILE_NAME’) lib/:插件目录,常用于存储自定义的facts以及自定义类型; spec/:类似于tests目录,存储lib/目录下插件的使用帮助和范例; tests/:当前模块的使用帮助或使用范例文件;
每一个模块必须在manifest下有各叫init.pp,是自举用到的入口文件,必须存在,名字必须是init.pp。必须内部定义类,且类名必须和模块名相同
模块应该都放在master端,模块里的文件最终要复制到agent主机的,agent主机改如何拿到这些文件复制到 本地,在puppet端提供了文件服务器,这个服务器是通过http协议,每一个文件都有一个URL /modules/MODULE_NAME模块名称/文件名FILE_NAME 假如有个模块叫nginx,这个目录就叫nginx,在files目录中有个文件nginx。conf, 访问文件时,http:// /modules/nginx/nginx.conf 指定路径时不用指明file,会直接去目录里找
模板文件要靠内建的函数调用 templates/: tempate(‘MOD_NAME模块名(nginx)/TEMPLATE_FILE_NAME(nginx.conf.erb模板文件)’)(template内部要调用相同的文件名) 模板文件是放在模块下 lib/:插件目录,常用于存储自定义的facts以及自定义类型; spec/:类似于tests目录,存储lib/目录下插件的使用帮助和范例; tests/:当前模块的使用帮助或使用范例文件 要想创建模块直接给出对应的模块格式 可以去定义一个模块,对与puppet讲,是由配置文件的, 、 对于puppet内部而言由很多配置,配置信息可以显示可以设定 print 打印puppet当前设置 set 改某个设定的值 大多数指令都是通过默认值 ** 默认puppet去那里找模块,就靠这个来定义的 重要的配置,模块文件路径** 可以只显示一个指定值 module是管理模块 bulid 构建模块 install 安装模块、、 list 显示模块 search 搜索模块 puppet在线的有一个模块仓库(互联网上有很多别人开发的,可以去使用)显示出所有的模块 查找模块会链接到puppet官方的称为forgeapi,puppet代码托管站点,去以nginx为关键词进行搜索,如果能访问打互联网,应该就能搜索到
想要安装某个模块,用puppet module install即可 如果想自己创建模块,就要按照固定路径来创建,无论centos6,7都可以使用chrony服务,在目录下创建固定格式{manifest,files,templates,lib,spec,tests} 必须创建一个文件,init.pp 需要配置本地文件,修改文件内容 查看服务是否启动 把chrony目录复制到/etc/puppet/modules 下,可以列出模块 在本地应用代码要apply 这就是如何在全局调用某一个类,所以你的类一定示在模块中定义的类,在外部可直接调用,想应用这个类,就去include就可以 有意把文件修改下 提示配置文件内容不一样 在现在对于的目录下再开发一个模块,应该有个git,每一个版本都再git上保存一个版本,版本追踪工具 代码很多的话可以有多个pp文件,但是必须有一个init.pp文件,里面的类必须和模块名一致 先定义一个基类,其他子类,定义再其他文件中,进行导入 分别定义各自的类 现在需要一个配置文件,现在申明子类 nginx自己研发就不会显示版本号 调用的子类示webproxy 找不到nginx::webproxy、 如分散在 了多个文件,只能在init.pp里找 导入进来 文件名要与当前类的子类名保持一致 文件名是other-class ,类名是模块名::other-class子目录下的子清单名
把import删除注意: 1、puppet 3.8及以后的版本中,资源清单文件的文件名要与文件听类名保持一致,例如某子类名为“base_class::child_class”,其文件名应该为child_class.pp;不再支持import指令 2、无需再资源清单文件中使用import语句; 3、manifests目录下可存在多个清单文件,每个清单文件包含一个类,其文件名同类名; (清单文件名和类名相同
定义一个web服务,继承nginx,content生成文件,使用template生成 定义依赖关系 提供模板文件 没有问题可以生成之前workprocess=4的配置文件,此前类里还可以使用参数 定义使用本地rpm包来实现的模块 定义变量,包文件名 把文件复制过去,成为模块 puppet config命令: 获取或设定puppet配置参数; puppet config print [argument]puppet查找模块文件的路径:modulepath mariadb模块中的清单文件示例: class mariadb($datadir='/var/lib/mysql') { package{'mariadb-server': ensure => installed, } file{"$datadir": 创建目录来 ensure => directory, owner => mysql, group => mysql, require => [ Package['mariadb-server'], Exec['createdir'], ], } exec{'createdir': command => "mkdir -pv $datadir", require => Package['mariadb-server'], path => '/bin:/sbin:/usr/bin:/usr/sbin', creates => “$datadir", 如果存在就不再创建 } file{'my.cnf': 配置文件 path => '/etc/my.cnf', content => template('mariadb/my.cnf.erb'), require => Package['mariadb-server'], 模板文件生成(调用类datdadie的值,新创建的目录路径) notify => Service['mariadb'], } service{'mariadb': ensure => running, enable => true, require => [ Exec['createdir'], File["$datadir"], ], } }
转载地址:http://mdkgn.baihongyu.com/