puppet配置詳解

主程序:

facter-2.4.6-1.el7.x86_64.rpm
puppet-3.8.7-1.el7.noarch.rpm #agent主機上用的包
puppet-server-3.8.7-1.el7.noarch.rpm
注:yum倉庫中不是最新版的,可能會有些差別,最好到ftp上下載最新版的

配置文件:

            /etc/puppet/
            ├── auth.conf
            ├── environments
            │   └── example_env
            │   ├── manifests
            │   ├── modules
            │   └── README.environment
            ├── fileserver.conf
            ├── manifests
            ├── modules
            └── puppet.conf

目錄:

1.puppet命令

2.資源類型
3.流控制語句
4.類class_類繼承
5.puppet模塊
6.多環境配置

1.puppet命令:

puppet apply -verbose XXXX.pp
    -noop #測試執行
    -debug #檢查顯示過程
puppet describe #查看資源
    -l:列出所有資源類型;
    -s:顯示指定類型的簡要幫助信息;
    -m:顯示指定類型的元參數,一般與-s一同使用;
facter -p #查看主機信息,可以算是看內建變量
puppet module install 模塊名 #安裝模塊
puppet module search 模塊名 #互聯網查找模塊
puppet module list #查看模塊列表

2.資源類型:

_group_創建和管理組_ :
示例:
group{‘nginx’:
name => nginx,
ensure => present,
system => true,
}
name : 組名
gid : 組ID
ensure : 狀態[present | absent]
system : 是否為用戶組 [true | false]
members : 成員用戶
_user_管理用戶:
示例:
user{‘nginx’:
    uid => 3000,
    name => nginx,
    ensure => present,
    password => mageedu,
}
name : 用戶名
uid : UID
gid : 基于組ID
groups : 附加組
comment : 注釋
expiry : 過期時間
home : 家目錄
shell : 默認shell 類型
system : 是否為系統用戶
ensure : present | absent
password : 加密后的密碼串
_package_管理軟件包 :
示例:
package{‘httpd’:
    ensure => installed,
}
name : 軟件包名
ensure : [ installed | present | absent]
source : 程序包來源 [rpm | yum]
require: Package[“$webpkg”],
_service_服務管理:
示例:
service{‘httpd’:
    ensure => running,
    enable => true,
    restart => ‘systemctl restart httpd.service’,
# subscribe => File[‘httpd.conf’],
}
ensure : [ installed | present | latest | ]
path : 啟動服務的腳本
name : 服務名稱
enable : 是否開機啟動
restart : 通常用于重定義為 reload
hasrestart : 有重啟命令 [true | false]
hasstatus : 有狀態查詢命令
require: Package[“$webpkg”],
_file_管理文件 :
示例:
file{‘httpd.conf’:
    path => ‘/etc/httpd/conf/httpd.conf’,
    source => ‘/root/manifests/httpd.conf’,
    ensure => file,
    notify => Service[‘httpd’],
}
Package[‘httpd’] -> File[‘httpd.conf’] -> Service[‘httpd’]
ensure : 文件類型的確認 [file | directory | link | present | absent ]
path : 文件路徑
source : 源文件
content : 文件內容
target : 符號連接的目標文件
owner : 屬主
group : 屬組
mode : 權限
atime/ctime/mtime : 時間戳
_exec_執行命令 :
示例:
exec { “unzip tgz packget”:
command => “tar -xvf /tmp/mysql_test/mysql_test.tgz”, ###所有命令必須為全路徑或者path參數指定命令搜索路徑
path => “/usr/bin:/usr/sbin:/bin:/sbin”,
cwd => “/tmp/mysql_test”, ##命令執行的路徑為: /tmp/mysql_test/
creates => “/etc/my.cnf”, #當/etc/my.cnf不存在的時候,才會執行該命令
tries => 2, #重試次數
try_sleep => 3, #重試間隔 s為單位
}
cwd : 命令執行的目錄
command : 要運行的程序
creates : 文件路徑不存在即創建
user/group : 運行命令的用戶身份
onlyif : 此屬性指定一個命令, 此命令正常(退出碼為0)運行時, 當前command 才會運行
unless : 此屬性指定一個命令, 此命令非正常(退出碼為0)運行時, 當前command 才會運行
refresh : 重新執行當前command 的替代命令
refreshonly : 僅接收到訂閱資源的通知時方才運行
_cron_設置定時任務 :
示例:
cron{‘timesync’:
    command => ‘/usr/sbin/ntpdate 10.1.0.1 &> /dev/null’,
    ensure => present,
    minute => ‘*/3’,
    user => ‘root’,
}
command:要執行的任務;
ensure:present/absent;
hour:
minute:
monthday:
month:
weekday:
user:添加在哪個用戶之上;
name:cron job的名稱;
_notify_在日志中追加記錄信息 :
示例:
notify {“hello”
    message => ‘hello guys’
    name => ‘hello message’
}
message : 信息內容
name : 信息名稱

3.流控制語句:

if語句:
if CONDITION {
} else {
}
示例:
if $osfamily =~ /(?i-mx:debian)/ {
    $webserver = ‘apache2’
} else {
    $webserver = ‘httpd’
}
    package{“$webserver”:
    ensure => installed,
}
case語句:
case CONTROL_EXPRESSION {
case1: { … }
case2: { … }
case3: { … }
default: { … }
}
示例:
case $osfamily {
    “RedHat”: { $webserver=’httpd’ }
    /(?i-mx:debian)/: { $webserver=’apache2′ }
    default: { $webserver=’httpd’ }
}
    package{“$webserver”:
    ensure => installed,
}
selector語句:
#當變量符合case中的其中一個時,直接返回指定值
CONTROL_VARIABLE ? {
case1 => value1,
case2 => value2,
default => valueN,
}
示例:
$pkgname = $operatingsystem ? {
    /(?i-mx:(ubuntu|debian))/ => ‘apache2’,
    /(?i-mx:(redhat|fedora|centos))/ => ‘httpd’,
    default => ‘httpd’,
}
    package{“$pkgname”:
    ensure => installed,
}

4.類class:

示例:
class nginx {
    package{‘nginx’:
    ensure => installed,
}
#調用才可執行類代碼
include nginx
示例:
#給class參數,給定個默認參數
class dbserver($pkgname=‘mariadb-server’) {
    package{“$pkgname”:
    ensure => latest,
}
service{“$pkgname”:
    ensure => running,
    enable => true,
}
}
#條件判斷參數,給特定值
if $operatingsystem == “CentOS” {
    $dbpkg = $operatingsystemmajrelease ? {
    7 => ‘mariadb-server’,
    default => ‘mysqld-server’,
}
}
#賦予參數值
class{‘dbserver’:
pkgname => $dbpkg,
}
類繼承:
class XXXX:XXXX inherits XXXX {
…puppet code…
}
示例:
class nginx::webproxy inherits nginx {
file{‘nginx.conf’:
    path => ‘/etc/nginx/conf.d/ngx-proxy.conf’,
    source => ‘/root/manifests/ngx-proxy.conf’,
}
#添加或修改屬性
Service[‘nginx’] {
    enable => false,
    require +> Flie[‘nginx.conf’],
}
}

puppet模塊:

需先創建好目錄,對應資源要放在對應目錄下
mkdir puppet/module/模塊名/
manifests/:
init.pp:必須一個類定義,類名稱必須與模塊名稱相同;
files/:靜態文件;
puppet:///modules/MODULE_NAME/FILE_NAME
templates/:
tempate(‘MOD_NAME/TEMPLATE_FILE_NAME’)
lib/:插件目錄,常用于存儲自定義的facts以及自定義類型;
spec/:類似于tests目錄,存儲lib/目錄下插件的使用幫助和范例;
tests/:當前模塊的使用幫助或使用范例文件;
在master主機上:
1.創建好模塊
mkdir /etc/puppet/module/nginx/{manitests,files,templates,lib,spec,tests}
vim /etc/puppet/module/nginx/manitests/init.pp
2.寫好站點清單
vim /etc/puppet/manitests/site.pp
node 節點名字 {
include 模塊名
}
3.啟動
systemctl start puppet-master.server
4.簽證
puppet cert sign –all
在agent節點機上
5.簽證
puppet agent –server node1 –no-daemonize -v –noop
puppet cert list –all

原創文章,作者:z long,如若轉載,請注明出處:http://www.www58058.com/84259

(0)
z longz long
上一篇 2017-08-08 14:47
下一篇 2017-08-08 16:17

相關推薦

  • nginx負載均衡實驗

    實驗一、 實驗環境:     1、一臺director主機。并部署nginx服務。        內網iP:192.168.1.1  外網iP:10.1.64.1     2、一臺后端服務器。并部署h…

    Linux干貨 2016-10-30
  • 馬哥教育網絡班20期+第二周博客作業

    1.Linux上的文件管理類命令 2.bash命令學習總結 3.bash命令實例 4.元數據與時間戳 5.命令別名 6.練習題6~12 1.Linux上的文件管理類命令        Linux上的文件管理類命令可分為查看類、目錄管理類、權…

    Linux干貨 2016-06-19
  • Linux中的man命令使用方法

      Linux中的man命令就是manual的縮寫,此命令是用來查看系統中自帶的各種參考手冊,幫助用戶更好的了解并使用命令。   man命令的使用格式為: man COMMAND,即man后面跟上需要查詢的命令,進到手冊后有如下快捷按鈕幫助用戶更好的操作手冊。     1.按鍵-j &nb…

    Linux干貨 2016-10-20
  • Linux 常用命令之cp,一個可以煮飯的工具;

    cp 復制目錄和文件 對于系統管理員來說,在文件系統中將文件和目錄從一個位置復制到另外一個位置是家常便飯,而cp就是可以煮飯的工具之一。cp需要源對象和目標對象,源對象在前,目標對象在后面。 1. 常用選項 基本用法 [root@local tmp]# ll total 0 -rw-rw-r–. 1 gen…

    Linux干貨 2016-08-02
  • 第一周:Linux基礎之系統入門知識(一)

    一、計算機的組成及功能 現代計算機的基本結構是由匈牙利-美國科學家馮· 諾依曼于1946年提出的。迄今為止所有進入實用的電子計算機  都是按馮· 諾依曼提出的結構體系和工作原理設計制造的故又統稱為“馮·諾依曼型計算機"。 根據馮.諾依曼原理:計算機由運算器、控制器、存儲器、輸入設備、輸出設備所組成 運算器: 進行算術與邏輯運算 控制器:&…

    Linux干貨 2016-09-18
  • 記事本操作的小小小技巧

    原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://jeffyyko.blog.51cto.com/28563/140063       大家在查看文本文件的時候,如果內容很多,想快速到達某一位置可能比較麻煩,這時如果按住shift,再點擊右側…

    Linux干貨 2015-03-26
欧美性久久久久