久久国产乱子伦精品免费M,亚洲一区二区三区91,欧美国产在线视频,国产精品视频久久

Linux基礎教程之Puppet 的使用與進階

Puppet

基于puppet 可實現自動化重復任務, 快速部署關鍵性應用以及在本地或云端完成主動管理變更和快速擴展架構規模.
基于master/agent 模型. 基于RPC 的通信, 基于xml 進行數據交換

define : 使用puppet 語言來定義資源的狀態
模擬 : 根據資源關系圖, puppet 可以模擬部署無損運行測試代碼
強制 : 對比客戶端主機狀態和定義的資源狀態是否一致, 自動強制執行
report : 通過puppt API 可以將日志發送到第三方監控工具

puppet 工作模型 :

  • 單機模型 : 手動應用清單
  • master / agent : 基于RPC 的通信, 基于xml 進行數據交換

puppet 常用資源類型

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

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

類型 : 具有類似屬性的組件, 例如 package, service, file
將資源的屬性或狀態與其實現方式分離
僅描述資源的目標狀態, 也即實現的結果狀態, 而不是具體過程

RAL 由 “類型” 和”提供者” (“provider”) 共同實現

puppet 子命令 :

help :

顯示幫助

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

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

describe :

顯示資源類型的幫助信息

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

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

定義資源的語法 :

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

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

status :

顯示server 的狀態

agent :

運行客戶端程序

master :

作為服務器主機, 用于控制其他的客戶端和本機

module :

官方支持的模塊

資源類型

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

資源引用 :

Type[‘title’]

類型的首字母必須大寫

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

補充 : before 是表明必須在某個操作之前進行, require 是要求在某個操作執行完后進行

定義的時候, 只需要在意的是目標的狀態, 不需要在乎目標的過程

變量

數據類型 :

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

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

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

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

任何給定的scope 都可以訪問它自己的內容, 以及接收來自于其父scope, 節點scope 以及top scope 的內容

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

操作符

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

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. 表達式
  3. 有返回值的函數

各case的給定方式:

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

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

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

Puppet 的類

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

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 的模塊

模塊就是一個按約定的, 預定義的結構存放了多個文件或子目錄的目錄, 目錄里的這些文件遵循一定格式的命名規范
puppet 會在配置的路徑下查找所需要的模塊

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

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

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

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’], ],
}
}

相關新聞

歷經多年發展,已成為國內好評如潮的Linux云計算運維、SRE、Devops、網絡安全、云原生、Go、Python開發專業人才培訓機構!

    1. 主站蜘蛛池模板: 津南区| 通江县| 济阳县| 盐边县| 右玉县| 冷水江市| 九江县| 安泽县| 平阴县| 万宁市| 峡江县| 洞头县| 景洪市| 广宁县| 东辽县| 岳池县| 徐水县| 桐柏县| 波密县| 延庆县| 汾西县| 康平县| 黄浦区| 邳州市| 德化县| 铜梁县| 元谋县| 绥江县| 虎林市| 澳门| 安西县| 微博| 柳河县| 周至县| 梓潼县| 德清县| 德化县| 册亨县| 牡丹江市| 赣州市| 灵台县|