zoukankan      html  css  js  c++  java
  • 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    => '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

          这里只修改了一行,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 

  • 相关阅读:
    2020学习 04 python 爬取某政府网站信件
    2020学习03
    2020学习02
    阅读笔记--《一线架构师实践指南》--Pre-architecture阶段
    重构“信息领域热词分析”,实现六种质量属性战术
    pycharm错误:Error updating package list: connect timed out解决
    python连接mysql数据库——编码问题
    阅读笔记--《大型网站技术架构》—02架构
    python查询MySQL数据库的表以及所有字段
    python连接mysql数据库——版本问题
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/10743387.html
Copyright © 2011-2022 走看看