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 

  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/zhangxingeng/p/10743387.html
Copyright © 2011-2022 走看看