puppet工作原理之模块使用
一、模块介绍
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工作原理之模块使用的更多相关文章
- puppet工作原理及部署redis主从篇
一.简介 1.国际惯例什么是puppet puppet是一种Linux.Unix.windows平台的集中配置管理系统,使用自有的puppet描述语言,可管理配置文件.用户.cron任务.软件包.系统 ...
- puppet 工作原理
Puppet的工作细节分成如下几个步骤: 1.客户端puppetd调用facter,facter会探测出这台主机的一些变量如主机名.内存大小.IP地址等.然后puppetd把这些信息发送到服务器端. ...
- 【夯实Nginx基础】Nginx工作原理和优化、漏洞
本文地址 原文地址 本文提纲: 1. Nginx的模块与工作原理 2. Nginx的进程模型 3 . NginxFastCGI运行原理 3.1 什么是 FastCGI ...
- Nginx工作原理和优化、漏洞
1. Nginx的模块与工作原理 第三方模块:HTTP Upstream Request Hash模块.Notice模块和HTTP Access Key模块. 图1-1展示了Nginx模块常规的HT ...
- Linux可插拔认证模块(PAM)的配置文件、工作原理与流程
PAM的配置文件: 我们注意到,配置文件也放在了在应用接口层中,他与PAM API配合使用,从而达到了在应用中灵活插入所需鉴别模块的目的.他的作用主要是为应用选定具体的鉴别模块,模块间的组合以及规定模 ...
- Wifi模块的工作原理
http://www.wifitop1.com/news/content-98.html 在无线网络领域里面,无线wifi是最火的名词.对于串口wifi模块的工作是什么呢?串口wifi模块又有什么功能 ...
- 4G模块是什么 4G模块的工作原理
4G模块是什么 4G模块,又叫4G传输模块.4G通信模块.4G LTE模块.它是一种硬件加载到指定频段,软件支持标准的LTE协议,且软硬件高度集成模组化的产品,具有兼容性好.通信速度快.通信数据量大. ...
- 什么是4G模块 4G模块的工作原理及特点
什么是4G模块 4G模块,也被叫做4G通信模块或4G DTU模块,他是物联网行业具有4G通信功能的一种产品,通过4G模块,我们可以实现工业设备数据通过无线4G网络传输到远端控制中心,并从控制中心通过4 ...
- puppet完全攻略(一)puppet应用原理及安装部署
puppet完全攻略(一)puppet应用原理及安装部署 2012-06-06 18:27:56 标签:puppet puppet应用原理 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出 ...
随机推荐
- GROUP_CONCAT 将mysql多条数据合并为一条
实现将多条数据合并为一条数据,在mysql中可以通过 GROUP_CONCAT 函数实现 上面是潇leader发我的和工作不相关的小小小需求描述,很明显是要把id和name相同的数据合并为一条,下面按 ...
- 在shell中判断hive查询记录数大小
用途: 根据查询到结果数量来判断,是否需要再执行下个脚本. 1. 查询语句script.q脚本如下: ) as count from test; 2. shell脚本如下: 这里注意hive语句需要 ...
- ubuntu设置开机启动后命令行界面
author:headsen chen date: 2019-09-19 14:23:31 在字符界面(即命令行界面)输入命令: 设置为字符界面的命令:sudo systemctl set-defa ...
- postgresql 臭氧8小时聚合函数
1.定义数据拼接函数 CREATE OR REPLACE FUNCTION "public"."sfun"("results" _numer ...
- Linux的桌面虚拟化技术KVM(四)——虚拟机镜像格式对比与转换
Linux的桌面虚拟化技术KVM(一)——新建KVM虚拟机 Linux的桌面虚拟化技术KVM(二)——远程桌面管理 Linux的桌面虚拟化技术KVM(三)——KVM虚拟机克隆和快照 (1).常用镜像格 ...
- CentOS6安装MySQL开启远程登录
Centos6安装MySQL 检测下系统有没有自带的mysql:yum list installed | grep mysql 如果已经有的话执行命令 yum -y remove mysql-libs ...
- jvm(1)---java内存结构
jvm主要由三个子系统构成:类加载子系统,运行时数据区,执行引擎 运行时数据区主要包括: 1.本地方法栈:登记native方法,执行时加载本地方法库 2.程序计数器:就是一个指针,用来存储指向下一条执 ...
- Eureka客户端源码流程梳理
前面梳理了Eureka服务端的流程,现在整理下客户端的流程. 1.在这个包(spring-cloud-netflix-eureka-client)里面寻找客户端启动入口相关配置,关键配置文件sprin ...
- etcd学习之安装与命令
ETCD学习 下载etcd #下载 wget https://github.com/etcd-io/etcd/releases/download/v3.3.18/etcd-v3.3.18-linux- ...
- 【ARM-LInux开发】利用scp 远程上传下载文件/文件夹
利用scp 远程上传下载文件/文件夹 scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o s ...