您好,登錄后才能下訂單哦!
于2017.04.21 從新浪博客搬遷過(guò)來(lái)
----------------------------------------------------------------
其實(shí)我們已經(jīng)連接了一個(gè)client就是在啟動(dòng)客戶端的時(shí)候),在第一次連接的時(shí)候會(huì)agent會(huì)發(fā)起一個(gè)證 驗(yàn)證的請(qǐng)求并使用一個(gè)私鑰來(lái)加密連接,puppet使用SSL證書來(lái)驗(yàn)證master和client之間的連接,client向master發(fā)起證書請(qǐng)求,然后等待master簽名并返回證書
為了完成連接,master需要對(duì)證書進(jìn)行簽名:
puppet cert --list 顯示等待簽名的證書
puppet cert --sign client34.puppet.com 對(duì)client34發(fā)起的證書進(jìn)行簽名
puppet cert --sign --all 對(duì)所有等待簽名的證書進(jìn)行簽名
可能遇到的問題:
err: Could not retrieve catalog: Could not find default node or by name whit……..
雖然agent現(xiàn)在已經(jīng)連接到了master,并且已經(jīng)簽名也驗(yàn)證了這個(gè)會(huì)話,但是對(duì)于agent來(lái)說(shuō)master上并沒有可用的配置,因此收到這條錯(cuò)誤提示,為節(jié)點(diǎn)添加上可用配置就可以了;
1. 創(chuàng)建第一個(gè)配置
Puppet將包含配置數(shù)據(jù)的文件稱為清單,puppet清單由許多組件組成:
資源:獨(dú)立的配置項(xiàng)
文件:能發(fā)送到agent的真實(shí)文件
模版:能夠填充文件的模版文件
節(jié)點(diǎn):用于指定每一個(gè)agent的配置
類:資源的容器
定義:資源的組合容器
這些組件由一個(gè)包含變量、條件、數(shù)組和其他特性的配置語(yǔ)言保證起來(lái)的;
擴(kuò)展site.pp文件
創(chuàng)建第一個(gè)agent配置的第一步是定義和擴(kuò)展stie.pp文件
vim /etc/puppet/manifests/site.pp
import 'nodes.pp'
$puppetserver = 'master.puppet.com'
#import指令告訴puppet載入一個(gè)nodes.pp的文件,也可以載入多個(gè)文件,import 'nodes/*' 這樣將會(huì)載入nodes目錄下所有以.pp擴(kuò)展名的文件
#$puppetserve 定義一個(gè)變量,在這里puppetserve被賦值指定puppet master,并且能夠在puppet配置中使用;
Agent的配置
首先需要添加一個(gè)節(jié)點(diǎn)定義
vim /etc/puppet/manifests/nodes.pp
node 'client34.puppet.com' {
include sudo
package { 'vim': ensure => present } #也可以為一個(gè)節(jié)點(diǎn)指定單獨(dú)的資源
}
include 指令用于指定需要被應(yīng)用到主機(jī)的配置集合,一個(gè)節(jié)點(diǎn)包含兩種配置集合:
類:資源的容器 模塊:一個(gè)高級(jí),可移植的資源容易,包含類、定義及其他一些puppet配置
可以使用多個(gè)include指令或者用逗號(hào)隔開
include sudo
include sshd
include vim, syslog-ng
創(chuàng)建第一個(gè)模塊
每一個(gè)模塊都需要一個(gè)特定的目錄結(jié)構(gòu)和一個(gè)叫做init.pp的文件,這個(gè)目錄結(jié)構(gòu)能夠幫助puppet自動(dòng)載入模塊,模塊路徑可以有puppet.conf中[main]段modulepath配置項(xiàng)設(shè)置,默認(rèn)路徑/etc/puppet/modules/和/var/lib/puppet/modules/
這里我們創(chuàng)建一個(gè)sudo的模塊
創(chuàng)建模塊結(jié)構(gòu)
mkdir -p /etc/puppet/modules/sudo/{ files,manifests, templates}
touch /etc/puppet/modules/sudo/manifests/init.pp
manifests用于存放init.pp文件和其他配置,init.pp文件是模塊的核心,每個(gè)模塊必須存在;files目錄存放屬于模塊的一部分文件; templates包含模塊可能會(huì)用到的任何模版;
創(chuàng)建sudo模塊的init.pp文件
vim/etc/puppet/modules/sudo/manifests/init.pp
class sudo {
package { sudo:
ensure => present,
}
if $operatingsystem == "Ubuntu" {
package { "sudo-ldap":
ensurce => present,
require => Package["sudo"]
}
}
file { "/etc/sudoers":
owner => "root",
group => "root",
mode => 0440,
source => "puppet://$puppetserver/modules/sudo/etc/sudoers",
require => Package["sudo"],
}
}
Sudo模塊的init.pp文件包含了一個(gè)單獨(dú)的類,也叫做sudo;類中包含了3個(gè)資源:兩個(gè)軟件包和一個(gè)文件資源;
第一個(gè)軟件包資源使用ensure => present 來(lái)確保sudo包已經(jīng)安裝,第二個(gè)軟件包資源使用if/else語(yǔ)法作為安裝sudo-ldap包的條件判斷;還有另外兩種條件判斷語(yǔ)句:case和選擇器語(yǔ)法>
Puppet會(huì)檢查每一個(gè)連接客戶端的operatingsystem的值,如果$operatingsystem的fact值是Ubuntu,puppet就會(huì)安裝sudo-ldap包。
Sudo類中最后一個(gè)資源是一個(gè)文件資源 File["/etc/sudoers"]用來(lái)管理/etc/sudoers文件,前3個(gè)屬性指定這個(gè)文件的用戶和組、權(quán)限;下一個(gè)屬性source允許puppet從puppet文件服務(wù)器上獲取一個(gè)文件并將其發(fā)生到客戶端,這個(gè)屬性的值就是puppet文件服務(wù)器和所需文件的路徑;
Source的下一部分告訴puppet去那里尋找這個(gè)文件,等同于一個(gè)網(wǎng)絡(luò)共享文件,這文件第一部分是modules,表明文件是存放在一個(gè)模塊下的,接下來(lái)指定模塊,這里是sudo,最后指定模塊內(nèi)的路徑。
Require是一個(gè)元參數(shù),元參數(shù)require在資源Package["sudo-ldap"]和Package["sudo"]之間創(chuàng)建了一個(gè)依賴關(guān)系,在這個(gè)例子中,給資源加上require元參數(shù)就是高速puppet Package["sudo-ldap"]依賴于Package["sudo"],因此Package["sudo"]資源一定會(huì)首先被執(zhí)行。
所有存放在模塊中的文件都位于files目錄下,這可以認(rèn)為是模塊文件的共享根,在這個(gè)例子中我們將要在files中創(chuàng)建etc目錄和sudoers文件
mkdir -p /etc/puppet/modules/sudo/files/etc/
cp /etc/sudoers /etc/puppet/modules/sudo/files/etc/sudoers
注意在這里好像得給/etc/puppet/modules/sudo/files/etc/sudoers所有人可讀權(quán)限
應(yīng)用第一個(gè)配置
我們?cè)俅卧试Spuppet agent來(lái)觀察這一點(diǎn)
因?yàn)槲疫@虛擬機(jī)中已經(jīng)存在/etc/sudoers 這個(gè)文件,先將其刪除
Rm –rf /etc/soduers
puppet agent --server=master.puppet.com --no-daemonize --verbose –onetime
可以看到在/etc/又有了sudoers這個(gè)文件,這就說(shuō)明我們agent從master應(yīng)用成功了。
或者可以這樣來(lái)測(cè)試應(yīng)用,讓在/tmp下創(chuàng)建一個(gè)文件
vim /etc/puppet/manifests/nodes.pp
node 'client34.puppet.com' {
file { "/tmp/agent_test.txt": #這是文件路徑
content => "The Is Puppet Test!!", #這是文件內(nèi)容
}
}
在客戶端查看效果
至此Puppet 就初步的安裝和測(cè)試連接完成了,我也是第一次接觸puppet,目前就安裝和測(cè)試成功了,其他功能還待探索,如果有什么不正確或者更好的方法請(qǐng)指點(diǎn)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。