puppet工做原理之模塊使用

1、模塊介紹

  一、什麼是模塊

    一般狀況把manifest文件分解成易於理解得結構,例如類文件,配置文件分類存放,並經過某種機制整合使用,這種機制就是模塊,有助於結構化、層次化的方式使用puppet,puppet則基於模塊自動裝載器html

    從另外一個角度來講,模塊實際就是按約定的預定定的結構存放了多個我呢見或子目錄,目錄裏的這些文件或子目錄必須遵循命令規範web

  二、模塊的命令規範,以下範例

[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 NAMEredis

    manifests/:必須存在vim

      init.pp 必須一個類定義,類名稱必須與模塊名稱相同app

    files/:靜態文件運維

      每一個文件的訪問路徑遵循:puppet:///modules/MODULE_NAME/FILE_NAME;工具

    templatesoop

      每一個文件的訪問路徑遵循:tempate('MOD_NAME/TEMPLATE_FILE_NAME');post

    lib/:插件目錄,經常使用於存儲自定義的facts以及自定義類型;學習

    spec/:相似於tests目錄,存儲lib/目錄下插件的使用幫助和範例;

    tests/:當前模塊的使用幫助或使用範例;

 

2、製做redis模塊

  一、建立目錄結構

    cd /etc/puppet/modoules

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

  二、建立父類子類文件

    父類文件

[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]# 

  三、準備文件

    模板文件(模板文件就是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 

  四、結構已經完成,看看模塊結構

[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

 

  五、測試能夠傳參的方式調用準備好的模塊,也能夠類賦值在.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詳解(二)

轉載請註明出處:http://www.javashuo.com/article/p-qtpljecf-bb.html 

相關文章
相關標籤/搜索