亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Linux基礎(chǔ)教程之Puppet 的使用與進(jìn)階

Puppet

基于puppet 可實(shí)現(xiàn)自動(dòng)化重復(fù)任務(wù), 快速部署關(guān)鍵性應(yīng)用以及在本地或云端完成主動(dòng)管理變更和快速擴(kuò)展架構(gòu)規(guī)模.
基于master/agent 模型. 基于RPC 的通信, 基于xml 進(jìn)行數(shù)據(jù)交換

define : 使用puppet 語言來定義資源的狀態(tài)
模擬 : 根據(jù)資源關(guān)系圖, puppet 可以模擬部署無損運(yùn)行測試代碼
強(qiáng)制 : 對(duì)比客戶端主機(jī)狀態(tài)和定義的資源狀態(tài)是否一致, 自動(dòng)強(qiáng)制執(zhí)行
report : 通過puppt API 可以將日志發(fā)送到第三方監(jiān)控工具

puppet 工作模型 :

  • 單機(jī)模型 : 手動(dòng)應(yīng)用清單
  • master / agent : 基于RPC 的通信, 基于xml 進(jìn)行數(shù)據(jù)交換

puppet 常用資源類型

資源抽象的維度, RAL 如何抽象資源的

三個(gè)層次 ?: 資源抽象層, 事物層, 配置語言層

類型 : 具有類似屬性的組件, 例如 package, service, file
將資源的屬性或狀態(tài)與其實(shí)現(xiàn)方式分離
僅描述資源的目標(biāo)狀態(tài), 也即實(shí)現(xiàn)的結(jié)果狀態(tài), 而不是具體過程

RAL 由 “類型” 和”提供者” (“provider”) 共同實(shí)現(xiàn)

puppet 子命令 :

help :

顯示幫助

1 puppet help <command>
1 puppet help <command> <action>
apply :

手動(dòng)控制如何應(yīng)用清單
`puppet apply [-d | —debug] [-v | —verbose] [-e | —execute] [ —noop ]

describe :

顯示資源類型的幫助信息

1
2
3
4
-l : 列出所有的資源類型
-s : 顯示指定類型的簡要幫助信息
puppet describe -s Command
-m : 顯示指定類型的元參數(shù), 一般與-s 一同使用

資源定義 ?: 向資源類型的屬性賦值來實(shí)現(xiàn), 可稱為資源類型的實(shí)例化
資源定義所在的文件即為資源清單 manifest

定義資源的語法 :

1
2
3
4
type {“title”:
attribute => value1,
attribute2 => value2,
}

注意 ; type 必須使用小寫字母, title 是一個(gè)字符串, 在同一類型中必須唯一

status :

顯示server 的狀態(tài)

agent :

運(yùn)行客戶端程序

master :

作為服務(wù)器主機(jī), 用于控制其他的客戶端和本機(jī)

module :

官方支持的模塊

資源類型

  • group :
    創(chuàng)建和管理組
    name : 組名
    gid : 組ID
    ensure : 狀態(tài)[present ?| absent]
    system : 是否為用戶組 [true | false]
    members : 成員用戶
  • user :
    管理用戶
    name : 用戶名
    uid : UID
    gid : 基于組ID
    groups : 附加組
    comment : 注釋
    expiry : 過期時(shí)間
    home : 家目錄
    shell : 默認(rèn)shell 類型
    system : 是否為系統(tǒng)用戶
    ensure : present | absent
    password : 加密后的密碼串
  • package :
    管理軟件包
    name : 軟件包名
    ensure : [ installed | present | absent]
    source : 程序包來源 [rpm | yum]
  • service
    服務(wù)管理
    ensure : [ installed | present | latest | ]
    path : 啟動(dòng)服務(wù)的腳本
    name : 服務(wù)名稱
    enable : 是否開機(jī)啟動(dòng)
    restart : 通常用于重定義為 reload
    hasrestart : 有重啟命令 [true | false]
    hasstatus : 有狀態(tài)查詢命令
  • file :
    管理文件
    ensure : 文件類型的確認(rèn) [file | directory | link | present | absent ]
    path : 文件路徑
    source : 源文件
    content : 文件內(nèi)容
    target : 符號(hào)連接的目標(biāo)文件
    owner : 屬主
    group : 屬組
    mode : 權(quán)限
    atime/ctime/mtime : 時(shí)間戳
  • exec :
    執(zhí)行命令
    cwd : ?命令執(zhí)行的目錄
    command : 要運(yùn)行的程序
    creates : 文件路徑不存在即創(chuàng)建
    user/group : 運(yùn)行命令的用戶身份
    onlyif : 此屬性指定一個(gè)命令, 此命令正常(退出碼為0)運(yùn)行時(shí), 當(dāng)前command 才會(huì)運(yùn)行
    unless : 此屬性指定一個(gè)命令, 此命令非正常(退出碼為0)運(yùn)行時(shí), 當(dāng)前command 才會(huì)運(yùn)行
    refresh : 重新執(zhí)行當(dāng)前command 的替代命令
    refreshonly : 僅接收到訂閱資源的通知時(shí)方才運(yùn)行
  • cron :
    設(shè)置定時(shí)任務(wù)
    command:要執(zhí)行的任務(wù);
    ensure:present/absent;
    hour:
    minute:
    monthday:
    month:
    weekday:
    user:添加在哪個(gè)用戶之上;
    name:cron job的名稱;
    1
    2
    3
    4
    5
    6
    cron{“timesync”:
    command => “/usr/sbin/ntpdate 10.1.0.1 &> /dev/null”,
    ensure ?=> present,
    minute ?=> “*/3”,
    user ? ?=> “root”,
    }
  • notify :
    在日志中追加記錄信息
    message : 信息內(nèi)容
    name : 信息名稱
    1
    2
    3
    4
    notify {“hello”
    message ?=> ‘hello guys’
    name => ‘hello message’
    }

資源引用 :

Type[‘title’]

類型的首字母必須大寫

資源有特殊屬性 :
  • 名稱變量 : (namevar) : name 可省略, 此時(shí)將由title表示
  • ensure : 定義資源的目標(biāo)狀態(tài)
  • 元參數(shù) : metaparameter :
    • 依賴關(guān)系 : before | require
    • 通知關(guān)系 : 通知相關(guān)其他資源進(jìn)行刷新操作 notify | subscribe

補(bǔ)充 : before 是表明必須在某個(gè)操作之前進(jìn)行, require 是要求在某個(gè)操作執(zhí)行完后進(jìn)行

定義的時(shí)候, 只需要在意的是目標(biāo)的狀態(tài), 不需要在乎目標(biāo)的過程

變量

數(shù)據(jù)類型 :

字符型:引號(hào)可有可無;但單引號(hào)為強(qiáng)引用,雙引號(hào)為弱引用;
數(shù)值型:默認(rèn)均識(shí)別為字符串,僅在數(shù)值上下文才以數(shù)值對(duì)待;
數(shù)組:[]中以逗號(hào)分隔元素列表;
布爾型值:true, false;
hash:{}中以逗號(hào)分隔k/v數(shù)據(jù)列表; 鍵為字符型,值為任意puppet支持的類型;{ ‘mon’ => ‘Monday’, ‘tue’ => ‘Tuesday’, };
undef:未賦值型 ;
正則表達(dá)式:
(?[ENABLED OPTION]:[PATTERN])
(?-[DISABLED OPTION]:[PATTERN])

OPTIONS:
i:忽略字符大小寫;
m:把 ‘.’ 當(dāng)換行符;
x:忽略[PATTERN]中的空白字符

變量類型:
  • facts:agent向master 傳遞信息之前收集的信息
    由facter提供;top scope;將主機(jī)信息收集并規(guī)范化
  • 內(nèi)建變量:
    master端變量 $servername, $serverip, $serverversion
    agent端變量 $environment, $clientcert(客戶端證書), $clientversion
    parser變量 $module_name(當(dāng)前應(yīng)用的模塊名稱)
  • 用戶自定義變量:
    $parameter_value
變量的作用范圍

作用域 : top scope | node scope | class scope

任何給定的scope 都可以訪問它自己的內(nèi)容, 以及接收來自于其父scope, 節(jié)點(diǎn)scope 以及top scope 的內(nèi)容

如果要訪問非當(dāng)前scope中的變量, 則需要通過完全限制名稱進(jìn)行, 如 $vhostdir = $apache::params::vhostdir
需要注意的是, top scope 的名稱為空, 因此, 如若引用其變量, 則需要使用類似$::osfamily 進(jìn)行
自己作用域的變量是不需要使用完全限制名稱解析進(jìn)行訪問

操作符

=~ : 左側(cè)的字符串能夠被右側(cè)的字符所匹配
!~ : 左側(cè)的字符串不能被右側(cè)的字符所匹配
in : 左側(cè)的字符串在右側(cè)的列表中能被匹配到

Puppet 中的if 語句

條件判斷, 其中CONDITION 可以有各宗

1
2
3
4
5
6
7
8
9
if CONDITIONS {

}
elsif CONDITIONS{

}
else {

}

示例 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
if $osfamily =~ /(?i-mx:debian)/ {
$webserver = “apache2”
} else {
$webserver = “httpd”
}
package{‘$webserver’:
ensure ?=> installed,
before ?=> [ File[“httpd.conf”], Service[“httpd”] ],
}
file{“httpd.conf”:
path ? ?=> “/etc/httpd/conf/httpd.conf”,
source ?=> “/root/manifests/httpd.conf”,
ensure ?=> file,
}

Puppet 中的case 語句

使用方法:

1
2
3
4
5
6
7
case CONTROL_EXPRESSION {
case1: { … }
case2: { … }
case3: { … }

default: { … }
}

CONTROL_EXPRESSION:

  1. 變量
  2. 表達(dá)式
  3. 有返回值的函數(shù)

各case的給定方式:

  1. 直接字串;
  2. 變量
  3. 有返回值的函數(shù)
  4. 正則表達(dá)式模式;
  5. default

注意:不能使用列表格式;但可以是其它的selecor;
示例 :

1
2
3
4
5
$webserver = $osfamily ? {
‘Redhat’ => “httpd”,
/(?i-mx:debian)/ => “apache2”,
default => “httpd”,
}

Puppet 的類

類 : puppet 中命名的代碼模塊, 常用于定義一組通用目標(biāo)的資源, 可在puppet 全局調(diào)用, 類可以被繼承, 也可以包含子類

1
2
3
4
5
6
class NAME {
…puppet code…
}
class NAME(parameter1, parameter2) {
…puppet code…
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
class nginx {
package{“nginx”:
ensure ?=> installed,
}service{“nginx”:
ensure ?=> running,
enable ?=> true,
require => Package[“nginx”],
}
}

class nginx::web inherits nginx {
file{“ngx-web.conf”:
path ? ?=> “/etc/nginx/conf.d/ngx-web.conf”,
ensure ?=> file,
require => Package[“nginx”],
source ?=> “/root/manifests/nginx/ngx-web.conf”,
}

file{“nginx.conf”:
path ? ?=> “/etc/nginx/nginx.conf”,
ensure ?=> file,
content => template(“/root/manifests/nginx.conf.erb”),
require => Package[“nginx”],
}

Service[“nginx”] {
subscribe => [ File[“ngx-web.conf”], File[“nginx.conf”] ],
}
}
include nginx::web

Puppet 的模塊

模塊就是一個(gè)按約定的, 預(yù)定義的結(jié)構(gòu)存放了多個(gè)文件或子目錄的目錄, 目錄里的這些文件遵循一定格式的命名規(guī)范
puppet 會(huì)在配置的路徑下查找所需要的模塊

1
2
3
4
5
6
7
8
MODULES_NAME:
|-manifests/
| ? |_init.pp
|-files/
|-lib/
|-templates/
|-spec/
|_tests/

模塊名只能以小寫字母開頭,可以包含小寫字母、數(shù)字和下劃線;但不能使用”main”和”settings“;

1
2
3
4
5
6
7
8
9
10
manifests/
init.pp:必須一個(gè)類定義,類名稱必須與模塊名稱相同;
files/:靜態(tài)文件;
puppet URL:
puppet:///modules/MODULE_NAME/FILE_NAME
templates/:
tempate(“MOD_NAME/TEMPLATE_FILE_NAME”)
lib/:插件目錄,常用于存儲(chǔ)自定義的facts以及自定義類型;
spec/:類似于tests目錄,存儲(chǔ)lib/目錄下插件的使用幫助和范例;
tests/:當(dāng)前模塊的使用幫助或使用范例文件;

mariadb模塊中的清單文件示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class mariadb($datadir=”/var/lib/mysql”) {
package{“mariadb-server”:
ensure ?=> installed,
}file{‘$datadir’:
ensure ?=> directory,
owner ? => mysql,
group ? => mysql,
require => [ Package[“mariadb-server”], Exec[“createdir”], ],
}

exec{“createdir”:
command => ‘mkdir -pv $datadir’,
require => Package[“mariadb-server”],
path => “/bin:/sbin:/usr/bin:/usr/sbin”,
}

file{“my.cnf”:
path ? ?=> “/etc/my.cnf”,
content => template(“mariadb/my.cnf.erb”),
require => Package[“mariadb-server”],
notify ?=> Service[“mariadb”],
}

service{“mariadb”:
ensure ?=> running,
enable ?=> true,
require => [ Exec[“createdir”], File[‘$datadir’], ],
}
}

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開發(fā)專業(yè)人才培訓(xùn)機(jī)構(gòu)!