一、模块介绍

  1、什么是模块

    通常情况把manifest文件分解成易于理解得结构,例如类文件,配置文件分类存放,并通过某种机制整合使用,这种机制就是模块,有助于结构化、层次化的方式使用puppet,puppet则基于模块自动装载器

    从另一个角度来说,模块实际就是按约定的预约定的结构存放了多个我呢见或子目录,目录里的这些文件或子目录必须遵循命令规范

  2、模块的命令规范,如下范例

[root@web1 redis]# tree
.
├── files
│ ├── redis-master.conf
│ └── redis-sentinel.conf
├── lib
├── manifests
│ ├── init.pp
│ ├── master.pp
│ └── slave.pp
├── spec
├── templates
│ └── redis-slave.conf.erb
└── test

    MODULE NAME

    manifests/:必须存在

      init.pp 必须一个类定义,类名称必须与模块名称相同

    files/:静态文件

      每个文件的访问路径遵循:puppet:///modules/MODULE_NAME/FILE_NAME;

    templates

      每个文件的访问路径遵循:tempate('MOD_NAME/TEMPLATE_FILE_NAME');

    lib/:插件目录,常用于存储自定义的facts以及自定义类型;

    spec/:类似于tests目录,存储lib/目录下插件的使用帮助和范例;

    tests/:当前模块的使用帮助或使用范例;

二、制作redis模块

  1、创建目录结构

    cd /etc/puppet/modoules

    mkdir -pv redis/{manifests,files,templates,tests,lib,spec}

  2、创建父类子类文件

    父类文件

[root@web1 manifests]# pwd
/etc/puppet/modules/redis/manifests
[root@web1 manifests]# cat init.pp
class redis {
package{'redis':
ensure => installed,
} -> service{'redis':
ensure => running,
enable => true,
hasrestart => true,
hasstatus => true,
require => Package['redis'],
}
}
[root@web1 manifests]#

    创建子类master.pp/slave.pp

[root@web1 manifests]# cat master.pp
class redis::master inherits redis {
file {'/etc/redis.conf':
ensure => file,
source => 'puppet:///modules/redis/redis-master.conf',
owner => 'redis',
group => 'root',
mode => '',
} Package['redis'] -> File['/etc/redis.conf'] ~> Service['redis']
}
[root@web1 manifests]# cat slave.pp
class redis::slave($master_ip,$master_port='') inherits redis {
file {'/etc/redis.conf':
ensure => file,
content => template('redis/redis-slave.conf.erb'),
owner => 'redis',
group => 'root',
mode => '',
} Package['redis'] -> File['/etc/redis.conf'] ~> Service['redis']
}
[root@web1 manifests]#

  3、准备文件

    模板文件(模板文件就是redis.conf文件加个后缀名,里面可以写一些erb变量)

      erb方法请参考官方

  cp redis-slave.conf.erb /etc/puppet/modules/redis/templates/redis-slave.conf.erb

      这里只修改了一行,redis主从的ip及端口

  slaveof <%= @master_ip %> <%= @master_port %>

    静态文件

  cp redis.conf  /etc/puppet/modules/redis/files/redis-master.conf

    这里只注销了

  #bind 127.0.0.1 

  4、结构已经完成,看看模块结构

[root@web1 modules]# tree
.
└── redis
├── files
│   ├── redis-master.conf
│   └── redis-sentinel.conf
├── lib
├── manifests
│   ├── init.pp
│   ├── master.pp
│   └── slave.pp
├── spec
├── templates
│   └── redis-slave.conf.erb
└── test

  5、测试可以传参的方式调用准备好的模块,也可以类赋值在.pp文件种运行该文件

  第一种,puppet apply -v --noop -e "class{'redis::slave': master_ip => '192.168.216.52'}"  #多个参数使用逗号隔开

  第二种 ,vim  redis-test.pp

    class {'redis::slave':

      master_ip => '192.168.216.52' ,

    }

     puppet apply -e --noop redis-test.pp

参考学习:自动化运维工具——puppet详解(二)

转载请注明出处:https://www.cnblogs.com/zhangxingeng/p/10743387.html

puppet工作原理之模块使用的更多相关文章

  1. puppet工作原理及部署redis主从篇

    一.简介 1.国际惯例什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统 ...

  2. puppet 工作原理

    Puppet的工作细节分成如下几个步骤: 1.客户端puppetd调用facter,facter会探测出这台主机的一些变量如主机名.内存大小.IP地址等.然后puppetd把这些信息发送到服务器端. ...

  3. 【夯实Nginx基础】Nginx工作原理和优化、漏洞

    本文地址 原文地址 本文提纲: 1.  Nginx的模块与工作原理    2.  Nginx的进程模型    3 . NginxFastCGI运行原理        3.1 什么是 FastCGI   ...

  4. Nginx工作原理和优化、漏洞

    1.  Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HT ...

  5. Linux可插拔认证模块(PAM)的配置文件、工作原理与流程

    PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...

  6. Wifi模块的工作原理

    http://www.wifitop1.com/news/content-98.html 在无线网络领域里面,无线wifi是最火的名词.对于串口wifi模块的工作是什么呢?串口wifi模块又有什么功能 ...

  7. 4G模块是什么 4G模块的工作原理

    4G模块是什么 4G模块,又叫4G传输模块.4G通信模块.4G LTE模块.它是一种硬件加载到指定频段,软件支持标准的LTE协议,且软硬件高度集成模组化的产品,具有兼容性好.通信速度快.通信数据量大. ...

  8. 什么是4G模块 4G模块的工作原理及特点

    什么是4G模块 4G模块,也被叫做4G通信模块或4G DTU模块,他是物联网行业具有4G通信功能的一种产品,通过4G模块,我们可以实现工业设备数据通过无线4G网络传输到远端控制中心,并从控制中心通过4 ...

  9. puppet完全攻略(一)puppet应用原理及安装部署

    puppet完全攻略(一)puppet应用原理及安装部署 2012-06-06 18:27:56 标签:puppet puppet应用原理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出 ...

随机推荐

  1. Docker 容器日志分析

    查看容器日志 先使用  docker run -it --rm -d -p 80:80 nginx:1.15.8-alpine 命令启动一个nginx容器.如果没有异常,会得到容器ID如  d2408 ...

  2. Springboot配置文件获取系统环境变量的值

    注意,这里说的是获取系统环境变量的值,譬如Windows里配置的JAVA_HOME之类的,可以直接在Springboot的配置文件中获取. 我们经常使用一些docker管理平台,如DaoCloud.r ...

  3. OpenBLAS编译 Debug x64 Win10 vs2015

    OpenBLAS编译  Debug x64  Win10  vs2015 >------ 已启动生成: 项目: ZERO_CHECK, 配置: Debug x64 ------ > Che ...

  4. hppts的理解

    参考: https://www.ruanyifeng.com/blog/2014/02/ssl_tls.html

  5. java中如何使用列表数组

    java中如何使用列表数组 觉得有用的话,欢迎一起讨论相互学习~Follow Me 转载链接 https://blog.csdn.net/hgtjcxy/article/details/8183519 ...

  6. Sq常用操作

    sql创建表实例: CREATE TABLE mytable( id varchar(40) NOT NULL default '', userId varchar(40) NOT NULL defa ...

  7. Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机

    (1).虚拟化产品对比介绍 虚拟化技术有以下三种:仿真虚拟化,这是一种对系统硬件没有要求,但性能最低的虚拟化技术:半虚拟化,这是一种直接使用物理硬件,性能高,但需要修改内核的虚拟化技术:全虚拟化,这是 ...

  8. java使用ffmpeg生成HLS切片文件

    /*** * 将文件切割成片 * @param filename * @param uuid * @param data * @throws IOException */ default void d ...

  9. MySQL学习笔记——MySQL启动过程(一)

    首先去官网或者github下载MySQL5.7的源码. 官网地址:https://dev.mysql.com/downloads/mysql/ github地址:https://github.com/ ...

  10. LODOP关联后眉脚条码的遮挡的一种情况

    前面的博文中,有介绍层级关系,最先输出的打印项在下层,后输出的在上层,但是最近发现了一种例外,就是前面有关联的情况下,后面把一个条码设置为页眉页脚项,眉脚项和前面关联其他的项的那个项位置重合,虽然这个 ...