自动化运维工具――puppet详解(二)

匿名 (未验证) 提交于 2019-12-02 23:40:02

一、模块介绍

  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    => '0640',                 }                  Package['redis'] -> File['/etc/redis.conf'] ~> Service['redis']         } [root@web1 manifests]# cat slave.pp  class redis::slave($master_ip,$master_port='6379') inherits redis {                 file {'/etc/redis.conf':                         ensure  => file,                         content => template('redis/redis-slave.conf.erb'),                         owner   => 'redis',                         group   => 'root',                         mode    => '0640',                 }                  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

    静态文件

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

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

 

  5、测试可以传参的方式调用准备好的模块,也可以类赋值在.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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!