本次实验内容:

1.建立节点文件

2.编写apache模块

3.编写nginx模块

4.模板应用(添加虚拟主机配置)


    1.不同节点的定义

    1.1. 在 puppetmaster(服务器server1端) 编辑 site.pp

# vim  /etc/puppet/manifests/site.pp

    import "nodes/*.pp"

    1.2. 建立节点文件

#mkdir -p /etc/puppet/manifests/nodes

# vi /etc/puppet/manifests/nodes/server2.pp

node 'server2.example.com' {

file { "/var/www/html/index.html":

content => "server2.example.com"

}

}

# vi /etc/puppet/manifests/nodes/server3.pp

node 'server3.example.com' {

file { "/var/www/html/index.html":content => "server3.example.com"

}

}

wKioL1gX3wLCiuF-AAAzJfUXF_0332.png

wKiom1gX3wGA3rvSAAAmCABJmCs423.png

    1.3 在client上测试:

  #puppet agent --server server1.example.com --no-daemonize -vt

wKiom1gX4QnzuFxdAABvF3crQMQ808.png

wKioL1gX4QiifuyyAAASb2CUqDI043.png


2.编写apache模块

#mkdir -p /etc/puppet/modules/httpd/manifests

#mkdir -p /etc/puppet/modules/httpd/files

#cd /etc/puppet/modules/httpd/manifests

#vim install.pp

    class httpd::install {

         package { "httpd" :

         ensure => present

         }

        }

#vim service.pp

    class httpd::service

    {

service {

"httpd":

ensure => running,

require => Class["httpd::install","httpd::config"]

    }

    }

#vim config.pp

        class httpd::config {


file {

"/etc/httpd/conf/httpd.conf":

source => "puppet:///modules/httpd/httpd.conf",

require => Class["httpd::install"],

notify => Class["httpd::service"]

         }

        }

#vim init.pp

        class httpd {

        include httpd::install,httpd::config,httpd::service

        }

wKioL1gX4cCzKP-mAAASspdW0tE928.png

#cd /etc/puppet/modules/httpd/files

#cp /etc/httpd/conf/httpd.conf .

#cd /etc/puppet/manifests/nodes

#vim server2.pp

        node 'server2.example.com' {

        include httpd

        file { "/var/www/html/index.html":

        content => "server2.example.com"

        }

        }

wKiom1gX4kfC84ysAAAsvYhfvPQ852.png

在server2上测试:

#puppet agent --server server1.example.com --no-daemonize -vt

wKiom1gX4w7ANjONAAA5LXKh5jg176.png

wKioL1gX4w_gnwm_AAAzcS1DeW8858.png

wKiom1gX406gCw_2AAAl1IotIDI688.png


3.编写nginx模块

1) #mkdir -p /etc/puppet/modules/nginx/manifests

2) #mkdir -p /etc/puppet/modules/nginx/files

3) #cd /etc/puppet/modules/nginx/manifests

    #vim install.pp

        class nginx::install{

        package {

        ["pcre-devel","gcc","openssl-devel"]:

        ensure => present

        }

        file {

        "/mnt/nginx-1.8.0.tar.gz":

         source => "puppet:///modules/nginx/nginx-1.8.0.tar.gz";

        "/mnt/install-nginx.sh":

        source => "puppet:///modules/nginx/install-nginx.sh"

        }

        exec {

        "install nginx":

        command => "sh /mnt/install-nginx.sh",

        path => "/bin:/usr/bin:/sbin:/usr/sbin",

        require => File["/mnt/install-nginx.sh","/mnt/nginx-1.8.0.tar.gz"],

        creates => "/usr/local/lnmp/nginx/sbin/nginx"

        #provider => shell,

        }

        }

  

#vim service.pp

    class nginx::service {

    exec {

"nginx start":

command => "/usr/local/lnmp/nginx/sbin/nginx",

require => Class["nginx::install"],

creates => "/usr/local/lnmp/nginx/logs/nginx.pid"

    }

    }


#vim config.pp

    class nginx::config {

    file {

"/usr/local/lnmp/nginx/conf/nginx.conf":

source => "puppet:///modules/nginx/nginx.conf",

require => Class["nginx::service"]

    }

    exec {

"nginx reload":

command => "/usr/local/lnmp/nginx/sbin/nginx -s reload",

refreshonly => true,

subscribe => File["/usr/local/lnmp/nginx/conf/nginx.conf"]

    }

    }


#cd /etc/puppet/modules/nginx/files/

#vim install-nginx.sh

#!/bin/bash

    cd /mnt

    tar -zxf nginx-1.8.0.tar.gz

    cd nginx-1.8.0

    ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module

    make && make install

5)[root@server1 files]# ls

    install-nginx.sh  nginx-1.8.0.tar.gz  nginx.conf

#cd /etc/puppet/manifests/nodes 

#vim server3.pp

    node 'server3.example.com' {

    include nginx

    }

wKiom1gX5ciSvxwXAAAstQnlEtM015.png

在server3上测试:

  #puppet agent --server server1.example.com --no-daemonize -vt

wKiom1gX52GiDd8hAADxNWouneY421.png

wKioL1gX52DRyem1AABHp27LEqo681.png


4. 模板应用(添加虚拟主机配置):

文件存放在 templates 目录中,以*.erb 结尾。

# vim /etc/puppet/modules/httpd/manifests/init.pp

  //#添加以下行

    define httpd::vhost($domainname) {

    file { "/etc/httpd/conf.d/${domainname}_vhost.conf":

    content => template("httpd/httpd_vhost.conf.erb"),

    require => Class["httpd::install"],

    notify => Class["httpd::service"]

    }


    file { "/var/www/$domainname":

    ensure => directory

    }


    file { "/var/www/$domainname/index.html":

    content => $domainname

    }


#cd /etc/puppet/modules/httpd/templates/

# vim httpd_vhost.conf.erb

    <VirtualHost *:80>

    ServerName <%= domainname %>

    DocumentRoot /var/www/<%= domainname %>

    ErrorLog logs/<%= domainname %>_error.log

    CustomLog logs/<%= domainname %>_access.log common

    </VirtualHost>


#vim /etc/puppet/manifests/nodes/server4.pp

    node 'server2.example.com' {

include httpd

httpd::vhost { 'server2.example.com':

domainname => "server2.example.com",

}

httpd::vhost { 'www2.example.com':

        domainname => "www2.example.com",

        }

    }

# vim /etc/puppet/modules/httpd/files/httpd.conf

    990 NameVirtualHost *:80


5)在server2 上测试:

#puppet agent --server server2.example.com --no-daemonize -vt

//在/var/www下会生成server2.example.com  www2.example.com两个目录

wKiom1gX6OezLY9cAAAhXdE2gXo281.png

6)在主机上添加解析,浏览器上测试

访问server2.example.com

  www2.example.com


wKioL1gX6R_ROFf4AAA6ojQnwTc267.png


wKiom1gX6R_iuOoNAABC59JxuIs053.png


本文转自willis_sun 51CTO博客,原文链接:http://blog.51cto.com/willis/1867901,如需转载请自行联系原作者