精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Cfengine自動化基礎(chǔ)架構(gòu)進(jìn)行系統(tǒng)管理

運(yùn)維 系統(tǒng)運(yùn)維 自動化
Cfengine 是一個(gè)流行的數(shù)據(jù)中心自動化解決方案,被世界各地的組織廣泛采用。它可擴(kuò)展至成千上萬臺機(jī)器,從筆記本、臺式機(jī)、嵌入式設(shè)備到大型主機(jī)。在本文中,了解如何使用這個(gè)多功能的靈活技術(shù)來解決數(shù)據(jù)中心問題。

簡介

如今,IT 數(shù)據(jù)中心必須跨多個(gè)操作系統(tǒng)版本提供和維護(hù)穩(wěn)定性、安全性和可伸縮性服務(wù),這類服務(wù)可在多種服務(wù)器硬件和操作系統(tǒng)上運(yùn)行。效率很重要,管理員希望能夠最小化這些服務(wù)的支持,讓其成為全自動,就像自動熄燈一樣。在這個(gè)兩個(gè)部分系列文章 “用 Cfengine 自動化基礎(chǔ)架構(gòu)管理” 中,我們將探討一種用于系統(tǒng)管理和 IT 管理的自動框架:Cfengine。

本系列第 1 部分將為您提供一個(gè) Cfengine V3 Community Edition 概述,以及有關(guān)如何構(gòu)建及配置 Cfengine 策略/發(fā)布服務(wù)器和客戶機(jī)的信息。第 2 部分則會用示例說明如何使用 Cfengine 完成服務(wù)支持所涉及到的諸多日常任務(wù)。

本文假設(shè)您已經(jīng)安裝了基礎(chǔ)的 UNIX® 或 Linux® 操作系統(tǒng),并且非常熟悉 Cygwin 和 Linux 打包命令。

配置管理和 Cfengine

良好的配置管理可以建立和維護(hù) IT 平臺和產(chǎn)品及其環(huán)境的性能、功能以及物理屬性的一致性。它還可用來決定適當(dāng)?shù)陌踩蕴匦圆⒋_保這些特性的正確應(yīng)用。這是一項(xiàng)復(fù)雜的工作,有很多配置管理工具可用。

有些工具,比如 Arusha Project (ARK),可與 Cfengine 結(jié)合使用。其他工具雖然使用的是類似的系統(tǒng)管理概念,但以不同的編程語言編寫,比如 Puppet 是用 Ruby 編寫、REST 調(diào)用的,又比如 Synctool 是用 Python 編寫的,再比如 SmartFrog,是基于 Java™ 技術(shù)的。而類似 opsi (Open PC Server Integration) 這樣的工具則只面向 Windows® 編寫。IBM® Systems Director 以及最近收購的 IBM BigFix 也能提供配置管理。

Cfengine 是一種 GNU 開源配置管理框架,用于計(jì)算機(jī)系統(tǒng)自動化。此框架是輕量的,可針對幾乎所有平臺構(gòu)建。它能運(yùn)行在所有常見平臺上,其中包括 AIX、Linux、UNIX、Apple 和 Windows。

IT Infrastructure Library 是在全球應(yīng)用最為廣泛的一種 IT 服務(wù)管理方式,它定義了知識管理 作為交付服務(wù)的關(guān)鍵過程。知識管理確保一個(gè)人只要擁有這方面的知識就能夠交付并支持業(yè)務(wù)所需的服務(wù)。前提是高效提供服務(wù)時(shí),清晰地理解服務(wù)帶來的價(jià)值,并提供所需的相關(guān)可用信息。Cfengine V3 關(guān)注管理生命周期每個(gè)階段的知識管理。通過使用一個(gè)已定義配置,Cfengine 能夠確保您擁有恰當(dāng)?shù)陌?、配置文件、文件?quán)限,且進(jìn)程運(yùn)行在您的環(huán)境中。

Cfengine 有兩個(gè)版本:一個(gè)是存在已久的社區(qū)版,另一個(gè)是商業(yè)的企業(yè)版。對于商業(yè)版,亦有幾種形式:Nova、Constellation 和 Galaxy。

生命周期管理

Cfengine 遵循的是系統(tǒng)生命周期管理的 Build-Deploy-Manage-Audit (BDMA) 模式。BDMA 包含系統(tǒng)生命周期的四個(gè)階段:構(gòu)建、部署、管理和審計(jì)。在構(gòu)建階段,需要計(jì)劃策略更改、規(guī)劃想要的狀態(tài)承諾(promise)以及構(gòu)建所建議承諾的模板,這樣如果所有機(jī)器均能做出并兌現(xiàn)這些承諾,系統(tǒng)便可無縫地運(yùn)行。

在部署階段,需要向所有自主客戶端(autonomous clients)發(fā)布策略,并且每個(gè)客戶機(jī)都要運(yùn)行一個(gè)代理,無需協(xié)助即可實(shí)現(xiàn)并維護(hù)這些策略。

在管理階段,這個(gè)自主代理負(fù)責(zé)管理該系統(tǒng),您只需處理不能被自動處理的極少事件。

最后,在審計(jì)階段,對更改進(jìn)行本地審計(jì)和維護(hù)。決策結(jié)果由 Cfengine 內(nèi)的設(shè)計(jì)確保且可自動維護(hù)。

Cfengine 不應(yīng)被視作一種轉(zhuǎn)出(rollout)系統(tǒng),其中人們試圖剔除絕對更改并在出現(xiàn)錯(cuò)誤時(shí)反轉(zhuǎn) Cfengine,需發(fā)布策略修訂序列,然后繼續(xù)。這些狀態(tài)更改由各個(gè)客戶端本地管理且不斷修護(hù)以便符合策略。

依賴項(xiàng)

Cfengine 需要 OpenSSL 和 BerkeleyDB V3.2 或更高版本。您還可選擇為支持 Perl Compatible Regular Expression library (PCRE)、OpenLDAP 和 PostgreSQL 或 MySQL 而構(gòu)建。有些數(shù)據(jù)庫特性只在商業(yè)版本可用。在 Windows 上,Cfengine 需要 Cygwin 環(huán)境。而且,像 Subversion (SVN) 這樣的版本控制軟件可用來控制對配置文件的更改。

術(shù)語

  • 承諾 — 定義的動作或規(guī)則,以便系統(tǒng)遵循。
  • 包 — 承諾組。
  • 策略 — 定義我們所能管理的實(shí)際知識包。
  • 類 — 定義為 "on" 或 "off" 的屬性/變量。
  • 策略包含承諾包。
  • 密鑰 — 可以是公共或私有的,用來對可以訪問服務(wù)器進(jìn)行身份驗(yàn)證,在每個(gè)客戶機(jī)上使用 cf-key 生成,然后再復(fù)制到服務(wù)器上的密鑰倉庫。在 IBM ,只使用服務(wù)器密鑰就足以提供安全性。

準(zhǔn)備開始

Cfengine 可運(yùn)行于任何 UNIX 服務(wù)器上,若有 Cygwin 環(huán)境,也可運(yùn)行在 Windows 上。在一個(gè) UNIX 服務(wù)器上,先安裝 OpenSSL、BerkeleyDB 以及上述討論的所有附加包。Cfengine 通常從一個(gè)分布包(比如 rpm 或 deb)安裝,或者,源代碼也可下載和編譯。

如果計(jì)劃從源代碼構(gòu)建 Cfengine,還將需要在 UNIX/Linux 服務(wù)器上安裝額外的工具,比如 gcc、flex 和 bison。在一個(gè) Windows 服務(wù)器上,先安裝 Cygwin,然后安裝 gcc、flex 和 bison 工具來編譯并安裝代碼。

這些基本 Cfengine 文件安裝在 Cfengine 工作目錄 /var/cfengine 的子目錄內(nèi)。這個(gè)工作目錄為 Cfengine 自己所用,且在構(gòu)建時(shí)定義。這個(gè)路徑可視為是一個(gè)安全的本地文件系統(tǒng)。配置文件編碼后,可將其放置于所有 Cfengine 服務(wù)器上的配置分布點(diǎn)內(nèi)(比如 /var/cfmasterfiles)。這個(gè)路徑通常置于版本控制目錄下。

從源代碼構(gòu)建 Cfengine

從 Cfengine 存儲庫下載源代碼。作為一個(gè)非 root 用戶登錄到此系統(tǒng)并運(yùn)行如下命令。

tar –zxf cfengine-x.x.x.tar.gz
cd cfengine-x.x.x
./configure --prefix=/var/cfengine
--sbindir=/var/cfengine/bin --localstatedir=/var/cfengine
--with-workdir=/var/cfengine --with-openssl=/usr make

現(xiàn)在轉(zhuǎn)到 root 用戶并運(yùn)行如下命令(二進(jìn)制文件置于 /var/cfengine/bin 內(nèi))。

make install
make installcheck

在 Policy/Distribution Server 上安裝 Cfengine

作為 root 用戶登錄到系統(tǒng)并執(zhí)行如下命令:

mkdir –p /var/cfengine/masterfiles
cp cfengine-x.x.x/inputs/update.cf to /var/cfengine/masterfiles
cp cfengine-x.x.x/inputs/promises.cf to /var/cfengine/masterfiles

用適當(dāng)?shù)碾娮余]件地址更新文件 promises.cf 內(nèi)的 "mailto" 選項(xiàng)。在 promise.cf 的 "body server control" 部分添加服務(wù)器應(yīng)該接受其連接的網(wǎng)絡(luò):

allowconnects => { "192.", "10.", "127.0.0.1" , "::1" };
allowallconnects => { "192.", "10.", "127.0.0.1" , "::1" };
trustkeysfrom => { "192.", "10.", "127.0.0.1" , "::1" };

在所有配置文件內(nèi)將策略服務(wù)器更新為這個(gè)新的服務(wù)器環(huán)境:

cp cfengine-x.x.x/inputs/failsafe.cf to /var/cfengine/masterfiles
cp cfengine-x.x.x/inputs/cfengine_stdlib.cf to /var/cfengine/masterfiles

Cfengine 組件

以下列出的是 Cfengine 安裝中需要注意的組件。 (注意:如果您是從一個(gè)二進(jìn)制包安裝的 Cfengine,或是在編譯安裝過程中做過定制,那么這些基礎(chǔ)目錄有可能不同。)

目錄

  • /var/cfengine/bin — 具有 Cfengine 二進(jìn)制文件的目錄
  • /var/cfengine/inputs — 具有 Cfengine 配置文件的目錄
  • /var/cfengine/outputs — 具有 Cfengine 運(yùn)行報(bào)告的目錄
  • /var/cfengine/ppkeys — 具有身份驗(yàn)證密鑰的目錄
  • /var/cfmasterfiles — 具有策略服務(wù)器上的主文件的目錄
  • /var/cfengine/repository — 包含了重要 Cfengine 文件備份以備恢復(fù)(name/location 可配置)的目錄

二進(jìn)制文件

  • /var/cfengine/bin/cf-promises — 檢查承諾語法的命令
  • /var/cfengine/bin/cf-agent — 維護(hù)共同做出的承諾及有關(guān)系統(tǒng)狀態(tài)的代理包的命令
  • /var/cfengine/bin/cf-serverd — 用來將策略或數(shù)據(jù)文件發(fā)布到客戶端并就來自 cf-runagent 的請求進(jìn)行響應(yīng)的服務(wù)器(守護(hù)進(jìn)程)
  • /var/cfengine/bin/cf-execd — 負(fù)責(zé)運(yùn)行 cf-agent 的調(diào)度守護(hù)進(jìn)程
  • /var/cfengine/bin/cf-runagent — 在遠(yuǎn)端機(jī)器上運(yùn)行 cf-agent 的命令
  • /var/cfengine/bin/cf-monitord — 負(fù)責(zé)收集有關(guān)系統(tǒng)狀態(tài)信息的守護(hù)進(jìn)程
  • /var/cfengine/bin/cf-report — 從 Cfengine 嵌入數(shù)據(jù)庫生成摘要和其他報(bào)告的命令
  • /var/cfengine/bin/cf-know — 從大量承諾(知識建模代理)生成一個(gè) ISO 標(biāo)準(zhǔn)的 Topic Map 的命令
  • /var/cfengine/bin/cf-key — 在每個(gè)主機(jī)上運(yùn)行一次來創(chuàng)建用于安全通信的公共/私有密鑰對的密鑰生成工具

配置文件

  • /var/cfengine/inputs/promises.cf — cf-agent 所使用的主要配置文件
  • /var/cfengine/inputs/library.cf — 包含了可重用代碼集的社區(qū)庫;對于 V3.1.x 發(fā)布版,最好使用這個(gè)社區(qū)庫

首次啟動 Cfengine Policy Server

在該服務(wù)器上運(yùn)行如下命令:

/var/cfengine/bin/cf-key
mkdir /var/cfmasterfiles/ppkeys
cp /var/cfengine/ppkey/localhost.pub /var/cfmasterfiles/ppkeys/root-.pub
cp /var/cfengine/ppkey/localhost.priv \
/var/cfmasterfiles/ppkeys/root-.priv
cp /var/cfmasterfiles/inputs/update.cf /var/cfengine/inputs/
cp /var/cfmasterfiles/inputs/failsafe.cf /var/cfengine/inputs/
/var/cfengine/bin/cf-agent –bootstrap

Cfengine Policy 服務(wù)器現(xiàn)已配置。為了準(zhǔn)備 Cfengine 來充當(dāng)遠(yuǎn)端客戶機(jī),執(zhí)行如下命令: start cf-server。

在大多數(shù)環(huán)境內(nèi),可以通過配置運(yùn)行 cf-serverd。其他時(shí)候,最好是為服務(wù)器配置準(zhǔn)備一個(gè)獨(dú)立的配置文件。如果進(jìn)程意外終止,這可以提供一個(gè)位置供外部進(jìn)程重新啟動 cf-serverd。我們還可以用一個(gè) watchdog 腳本來重新啟用 cf-serverd。要從命令行運(yùn)行它:

/var/cfengine/bin/cf-serverd
/var/Cfengine/bin/cf-serverd –f
/var/cfmasterfiles/prod/server/server.cf

客戶端的初始設(shè)置

  1. /var/cfengine/inputs/failsafe.cf
  2. /var/cfengine/inputs/update.cf
  3. /var/cfengine/ppkeys/root-.pub

通過執(zhí)行如下命令首次啟動 Cfengine 客戶端:

/var/cfengine/bin/cf-key
/var/cfengine/bin/cf-agent –K –bootstrap

為您的環(huán)境創(chuàng)建一個(gè)二進(jìn)制包

此時(shí),您可能會想要?jiǎng)?chuàng)建 APT 或 RPM 包用來配置您的客戶端。其中的一個(gè)包包含 Cfengine 二進(jìn)制文件,而另外一個(gè)包則包含了最低限度的 Cfengine 配置文件及服務(wù)器公鑰來引導(dǎo) Cfengine,此外,還有 cf-key 以及如上所列的 cf-agent 命令。構(gòu)建了這兩個(gè)包后,通過安裝這些包來配置 Cfengine 的客戶機(jī)就顯得十分簡單了。

我們接下來將會展示如何針對 Red Hat 環(huán)境創(chuàng)建二進(jìn)制包。(要?jiǎng)?chuàng)建一個(gè) Debian 包,請參考 UbuntuForums.org。)不同發(fā)布版對創(chuàng)建二進(jìn)制包有不同的要求。查閱您環(huán)境的參考文檔,了解如何適當(dāng)準(zhǔn)備此信息。#p#

準(zhǔn)備一個(gè) RPM

RPM 以一個(gè) spec 文件開始,內(nèi)含有關(guān)此包的信息。清單 1 顯示了 Red Hat RPM Spec 文件的一個(gè)例子。

清單 1. Cfengine V3 Red Hat RPM spec 文件

%define debug_package %{nil}
%define bin_path \
"/bin:/usr/bin:/usr/sbin:/usr/bin/X11:/sbin:\
/opt/cfengine/bin:/
opt/cfengine/bin:/opt/freeware/bin/:/usr/gnu/bin"
Name : cfengine
Summary : A tool to maintain complicated networks
Version : 3.1.4
Release : 1
URL : http://www.cfengine.org
Vendor : %{__spec_vendor}
License : GPL
Group : System Environment/Client Management
Packager :
Distribution : %{__spec_distribution}
Source : %{name}-%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
%ifos linux
Requires : db4 openssl coreutils pcre
#libacl zlib libattr e2fsprogs-libs keyutils-libs
BuildRequires : db4 db4-devel openssl openssl-devel pcre-devel
#libacl libacl-devel openssl openssl-devel pcre-devel zlib zlib-devel
libattr libattr-devel e2fsprogs-libs keyutils-libs libselinux libsepol
ExclusiveArch : i386 x86_64 ppc ppc64
%endif
%descriptionCfengine is the standalone, open-source datacenter
management platform run by leading enterprises since 1993.
Customize your IT systems, align to network, business and
regulatory needs, monitor problems, automatically repair
and maintain systems more effectively than with proprietary
software. Cope with new and legacy systems and adopt on a
phased basis. Cfengine yields reduced costs, improved
efficiency and higher return on investment for the lowest
cost of adoption in the industry!
Authors:
--------
Mark Burgess
%prep
[ -d %{buildroot} -a "%{buildroot}" != "" ] && rm -rf %{buildroot}
mkdir -p %{buildroot}
%setup -q
%build
export CFLAGS="-g -O2 -D_FORTIFY_SOURCE=0"
%configure \
--prefix=/var/cfengine \
--sbindir=/var/cfengine/bin \
--localstatedir=/var/cfengine \
--with-workdir=/var/cfengine \
--libdir=%{_libdir} \
--with-berkeleydb=%{_libdir} \
--with-openssl=/usr \
--with-pcre
make
make DESTDIR=${RPM_BUILD_ROOT} install
%files
%defattr(-,root,root)
%{_mandir}/man?/*
/var/cfengine/*
%{_libdir}/libpromises.la
%{_libdir}/libpromises.so*
%pre
export PATH=$PATH:%bin_path
%post
export PATH=$PATH:%bin_path

RPM 構(gòu)建過程

  1. 將源代碼下載到 /usr/src/redhat/SOURCES/ 文件夾。
  2. 將此 spec 文件放置于 /usr/src/redhat/SPECS/ 文件夾。
  3. 運(yùn)行命令 rpmbuild –ba /usr/src/redhat/SPECS/cfengine.spec 來構(gòu)建二進(jìn)制 RPM 和源 RPM。
  4. 通過運(yùn)行 rpm –ivh 安裝并測試這個(gè)新的 RPM。通過運(yùn)行 rpm –e 測試 RPM 的刪除。

Cfengine 的第一步

初始化后,cf-agent 可自動識別主機(jī)上的很多屬性。從這些屬性,定義了 “硬類”。隨著過程的運(yùn)行,其他要定義的類就是所謂的 “軟類”。最初的執(zhí)行開始于從 cron 或命令行調(diào)用 cf-execd –F。cf-execd 讀取 cf-promise 文件,由它進(jìn)行語法檢查。如果發(fā)現(xiàn)錯(cuò)誤, cf-agent 就會中止當(dāng)前的配置,并轉(zhuǎn)而運(yùn)行 /var/cfengine/inputs/failsafe.cf 配置。

圖 1 以圖解的方式解釋了 Cfengine 過程。

 

此圖顯示了沒有問題時(shí) promise.cf 的流程以及檢測到錯(cuò)誤時(shí)退到 failsafe.cf

 

圖 1. Cfengine 過程

示例配置

為了方便您熟悉 Cfengine,清單 2-6 顯示了將要放置于 /var/cfengine/inputs 內(nèi)的示例配置文件。要驗(yàn)證語法是否正確,運(yùn)行 cf-promises –f ./test.cf。若要使用此配置執(zhí)行,運(yùn)行 cf-agent –Kiv -f ./test .cf。

清單 2. 示例 failsafe.cf

########################################################
# failsafe.cf
########################################################
body common control
{
bundlesequence => { "update" };
inputs => { "update.cf" };
version => "1.2.3";
}
bundle agent failsafe
{
classes:
"failsafe" not => "bootstrap_mode";
}

清單 3. 示例 promises.cf

#######################################################
# Copyright (C) Cfengine AS
# This file is part of Cfengine 3 - written and maintained by Cfengine AS.
#######################################################
# promises.cf
#######################################################
body common control
{
bundlesequence => {
"update",
"garbage_collection",
"main"
};
inputs => {
"update.cf",
"site.cf"
};
}
#######################################################
body agent control
{
ifelapsed => "15";
}
#######################################################
body executor control
{
splaytime => "1";
mailto => "username@localhost.localdomain";
smtpserver => "localhost";
mailmaxlines => "30";
# Instead of a separate update script, now do this
exec_command => "$(sys.workdir)/bin/cf-agent -f failsafe.cf &&
$(sys.workdir)/bin/cf-agent";
}
#######################################################
body reporter control
{
reports => { "performance", "last_seen", "monitor_history" };
build_directory => "$(sys.workdir)/reports";
report_output => "html
}
#######################################################
body server control
{
allowconnects => { "192.", "10.", "127.0.0.1" , "::1" };
allowallconnects => { "192.", "10.", "127.0.0.1" , "::1" };
trustkeysfrom => { "192.", "10.", "127.0.0.1" , "::1" };
# Makes updates and runs happen in one
cfruncommand => "$(sys.workdir)/bin/cf-agent -f failsafe.cf &&
$(sys.workdir)/bin/cf-agent";
allowusers => { "root" };
}
#######################################################
# Server configuration
#######################################################
bundle server access_rules()
{
access:
"/var/cfmasterfiles"
admit => { "192.", "10.", "127.0.0.1" , "::1" };
roles:
".*" authorize => { "root" };
}
body action local_immediate
{
ifelapsed => "0";
action_policy => "fix";
}
#######################################################
## To avoid namespace conflict and reduce file footprint
#######################################################
body depth_search local_recurse(d)
{
depth => "$(d)";
xdev => "true";
}
body delete local_tidy
{
dirlinks => "delete";
rmdirs => "true";
}
body file_select local_days_old(days)
{
mtime => irange(0,ago(0,0,"$(days)",0,0,0));
file_result => "mtime";
}
body classes local_define(class,alert)
{
promise_repaired => { "$(class)" };
repair_failed => { "$(alert)" };
} 

#p#

清單 4. 示例 update.cf

#######################################################
### update.cf – config file used by the base delivery system
#######################################################
bundle agent update
{
vars:
"master_inputs" string => "/var/cfmasterfiles/inputs";
"master_scripts" string => "/var/cfmasterfiles/scripts";
"master_ppkeys" string => "/var/cfmasterfiles/ppkeys";
"master_server" slist => { "localhost" };
redhat|centos::
"update_crontab" string => "/var/spool/cron/root";
SuSE::
"update_crontab" string => "/var/spool/cron/tabs/root";
#define others as needed (darwin, macOSX should support below)
(!SuSE).(!redhat)::
"update_crontab" string => "/var/spool/cron/crontabs/root";
classes:
"exec_fix" not => regline(".*cf-execd.*","$(update_crontab)");
files:
"/var/cfengine/inputs"
handle => "update_inputs",
comment => "Update the base inputs directory for client",
perms => u_p("600"),
copy_from => update_scp("$(master_inputs)","$(master_server)"),
depth_search => recurse_svn("inf"),
file_select => cf3_config,
action => update_immediate;
"/var/cfengine/scripts"
handle => "update_scripts",
comment => "Update the base scripts directory for client",
perms => u_p("750"),
copy_from => update_scp("$(master_scripts)","$(master_server)"),
depth_search => recurse_svn("inf"),
file_select => cf3_scripts,
action => update_immediate; "/var/cfengine/ppkeys"
handle => "update_ppkeys",
comment => "Update the base ppkeys directory for client",
perms => u_p("600"),
copy_from => update_scppubs("$(master_ppkeys)","$(master_server)"),
depth_search => recurse_svn("inf"),
file_select => cf3_pub,
action => update_immediate;
exec_fix::
"$(update_crontab)"
handle => "update_cron",
comment => "Ensure that cron entry exists",
create => "true",
action => update_immediate,
edit_line => update_add2cron,
classes => update_repaired("updated_cron");
commands:
bootstrap_mode::
"/bin/echo"
args => "Running Bootstrap, version: $(sys.cf_version) Workdir is: $(sys.workdir) ",
handle => "callback_bootstrap",
comment => "Callback Bootstrap happened",
action => update_immediate;
failsafe::
"/bin/echo"
args => "Running Failsafe, version: $(sys.cf_version) Workdir is: $(sys.workdir) ",
handle => "callback_failsafe",
comment => "Callback Failsafe happened",
action => update_immediate;
!bootstap.!failsafe::
"/bin/echo"
args => "Running Normal, version: $(sys.cf_version) Workdir is: $(sys.workdir)",
handle => "callback_normalrun",
comment => "Callback Normal Run Happened",
contain => update_root,
action => update_immediate;
}
############################################
body perms u_p(p)
{
mode => "$(p)";
}
body depth_search recurse_svn(d)
{
depth => "$(d)";
exclude_dirs => { "\.svn" };
}
############################################
add_cron::
"Added a 15 minute schedule to crontab";
}
body file_select cf3_config
{
leaf_name => { "^.svn", ".*\.cf" , ".*\.sh" };
file_result => "leaf_name";
}
body file_select cf3_scripts
{
leaf_name => { ".*\.sh", ".*.py" };
file_result => "leaf_name";
}
body file_select cf3_pub
{
leaf_name => { "^localhost*", ".*\.pub" };
file_result => "leaf_name";
}
#########################################################
body copy_from update_scp(from,server)
{
source => "$(from)";
servers => { "$(server)" };
compare => "digest";
verify => "true";
purge => "true";
trustkey => "true";
}
body copy_from update_scppubs(from,server)
{
source => "$(from)";
servers => { "$(server)" };
compare => "digest";
verify => "true";
purge => "false";
trustkey => "true";
} body action update_immediate
{
ifelapsed => "0";
}
body classes update_repaired(class)
{
promise_repaired => { "$(class)" };
}
body action update_background
{
ifelapsed => "0";
action_policy => "fix";
}
body contain update_root
{
exec_owner => "root";
useshell => "true";
}
#########################################################
# bundle for bodies
#########################################################
bundle edit_line update_add2cron {
classes:
"add_cron" not => regline("^#*[CF3 normal run]","$(edit.filename)");
insert_lines:
add_cron::
"5,15,30,45 * * * * /var/cfengine/bin/cf-execd -F #CF3 normal run";
reports:
add_cron::
"Added a 15 minute schedule to crontab";
}

清單 5. 示例 site.cf

#######################################################
# Copyright (C) Cfengine AS
# This file is part of Cfengine 3 # site.cf - Site specific promises
#######################################################
bundle common g
{
vars:
!failsafe||!bootstrap::
"message" string => "All Looks good";
bootstrap::
"message" string => "Running bootstrap";
failsafe::
"message" string => "Running Failsafe";
}
#######################################################
# General site issues can be in bundles like this one
#######################################################
bundle agent main
{
### This would be a place to add something new!
commands:
cfengine_3_1_4::
"/bin/echo"
args => "Example Command with message param: '$(g.message)'",
handle => "echo_command",
comment => "Example of the echo command",
action => local_immediate,
classes => local_define("cmd_1","life");
}
#######################################################
# Garbage collection issues
#######################################################
bundle agent garbage_collection
{
files:
"$(sys.workdir)/outputs"
delete => local_tidy,
file_select => local_days_old("5"),
depth_search => local_recurse("inf");
}

清單 6. 示例測試執(zhí)行

 

############################################################
#
# Simple test execution – test.cf
#
###########################################################
body common control
{
bundlesequence => { "testbundle" };
}
###########################################################
bundle agent testbundle
{
vars:
"size" int => "46k";
"rand" int => randomint("33","$(size)");
commands:
"/bin/echo"
args => "Hello world - $(size)/$(rand)",
contain => standard,
classes => cdefine("followup","alert");
followup::
"/bin/ls"
contain => standard;
reports:
alert::
"What happened?";
}
###########################################################
body contain standard
{
exec_owner => "mark";
useshell => "true";
}
###########################################################
body classes cdefine(class,alert)
{
promise_repaired => { "$(class)" };
repair_failed => { "$(alert)" };
}

 結(jié)束語

在本文中,您了解了如何初始化一個(gè) Cfengine V3 策略/發(fā)布服務(wù)器以及 Cfengine V3 客戶端。您可以安裝二進(jìn)制包,也可以從源代碼編譯。您還了解了如何使用下載的代碼為您的環(huán)境構(gòu)建二進(jìn)制包。另外,您也了解了一些樣例配置文件來運(yùn)行 Cfengine,也學(xué)習(xí)了如何檢查它們的準(zhǔn)確性以及如何將它們應(yīng)用到您的運(yùn)行環(huán)境。

原文:http://www.ibm.com/developerworks/cn/os-cfengine1/index.html?ca=drs-

【編輯推薦】

  1. 資深系統(tǒng)管理員十年感悟:閑談IDC【新概念運(yùn)維】
  2. 面向系統(tǒng)管理員的iPad應(yīng)用推薦
  3. 讓Linux系統(tǒng)管理更輕松的技巧

 

責(zé)任編輯:黃丹 來源: IBMDW
相關(guān)推薦

2011-09-29 10:58:51

rBuilderLinux

2022-07-11 10:08:19

系統(tǒng)管理任務(wù)自動化

2018-02-10 18:35:09

LinuxAnsible系統(tǒng)管理

2010-12-24 14:46:31

Perl腳本

2011-10-19 10:49:07

系統(tǒng)管理備份自動化

2020-12-01 12:06:22

系統(tǒng)管理基礎(chǔ)架構(gòu)自動化工具

2021-04-01 06:13:50

Ansible系統(tǒng)運(yùn)維

2011-10-10 14:21:18

系統(tǒng)管理自動化

2011-10-10 13:45:32

系統(tǒng)管理自動化

2011-11-17 16:06:45

IT系統(tǒng)管理

2011-07-04 14:16:03

2013-09-18 10:57:09

虛擬化應(yīng)用

2010-10-21 16:18:18

2010-05-05 15:56:37

Unix系統(tǒng)

2009-10-23 16:03:40

Oracle 10g系內(nèi)存管理

2014-01-13 10:02:11

虛擬化系統(tǒng)管理

2015-07-06 09:16:51

2019-09-09 15:27:39

戴爾

2020-07-28 08:41:21

Kubernetes自動化測試軟件開發(fā)

2011-09-01 13:42:15

優(yōu)化布線系統(tǒng)管理布線系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

国产丰满美女做爰| 久久一级免费视频| 午夜影院在线播放| 国产目拍亚洲精品99久久精品| 国产精品久久久久av| 极品魔鬼身材女神啪啪精品| 国产精品白丝av嫩草影院| 五月天网站亚洲| 亚洲巨乳在线观看| 日本波多野结衣在线| 日韩在线播放一区二区| 久久99精品国产99久久6尤物| 久久精品女同亚洲女同13| 国产一区二区精品调教| 亚洲综合激情网| 欧美中日韩免费视频| 国产超碰人人模人人爽人人添| aⅴ色国产欧美| 日韩在线中文字幕| 一级性生活大片| crdy在线观看欧美| 一本色道综合亚洲| 国产精品videossex国产高清| 青青国产在线| 成人午夜免费av| 91久久在线播放| 精品视频一二三区| 一本久久综合| 欧美日韩国产成人在线| 国产又粗又猛又爽又黄的视频四季 | 亚洲不卡视频在线观看| 欧美韩日精品| 日韩视频在线免费观看| 色婷婷在线影院| 国产亚洲成av人片在线观黄桃| 欧美日韩一级二级三级| 男人天堂成人在线| 免费成人在线电影| 亚洲一区二区在线播放相泽| 伊人狠狠色丁香综合尤物| 久草在线网址| 91免费精品国自产拍在线不卡| av一本久道久久波多野结衣| 国产绿帽刺激高潮对白| 日本亚洲欧美天堂免费| 热re99久久精品国产66热| 奇米影视第四色777| 亚洲午夜激情在线| 色综合久久久久久中文网| 国产老头老太做爰视频| 99热国内精品| 久久久精品免费视频| 欧美美女性生活视频| 加勒比久久综合| 亚洲色图五月天| 亚洲成人黄色av| 欧美少妇xxxx| 久久精品久久精品亚洲人| 国产99在线 | 亚洲| 日韩av免费大片| 在线观看久久久久久| 国产1区2区在线观看| 成人在线亚洲| 久久久精品国产一区二区| 波多野结衣在线网址| 午夜精品一区二区三区国产| 久久精品在线视频| 精国产品一区二区三区a片| 自拍偷拍欧美| 国内精品久久久久久中文字幕 | 91精产国品一二三| 高潮久久久久久久久久久久久久 | 户外极限露出调教在线视频| 欧美激情一区二区三区蜜桃视频 | av在线不卡观看| 天天综合永久入口| 国产亚洲一区字幕| 一区二区欧美日韩| 少妇视频在线| 一本色道综合亚洲| 三级黄色片播放| 红杏视频成人| 中文字幕亚洲欧美| 中文字幕av免费在线观看| 国产一区二区三区久久| 国产精品视频公开费视频| 国产91视频在线| 91社区在线播放| 日本黄色播放器| 123区在线| 在线视频综合导航| 1314成人网| 欧美激情在线精品一区二区三区| 日韩中文字幕精品| 日韩欧美高清在线观看| 免费一级欧美片在线观看| av成人观看| 国产精品视频一区二区久久| 一区二区三区在线观看国产| 黑人糟蹋人妻hd中文字幕| 亚洲网站三级| 日韩成人在线视频| 国产探花在线免费观看| 久久久夜精品| av电影成人| 秋霞午夜在线观看| 欧美日韩日本国产| 在线免费看v片| 亚洲区小说区图片区qvod| 久久成人亚洲精品| 波多野结衣绝顶大高潮| 粉嫩av一区二区三区粉嫩| 亚洲毛片aa| 午夜影院在线观看国产主播| 精品免费99久久| 国产精品夜夜夜爽阿娇| 久久这里有精品15一区二区三区| 不卡一卡2卡3卡4卡精品在| av网站无病毒在线| 色综合久久天天综合网| 亚洲精品成人无码毛片| 91久久高清国语自产拍| 国产精品777| 手机看片国产1024| 亚洲一区二区精品视频| 红桃视频 国产| 成人免费av| 国产91精品在线播放| 手机在线观看免费av| 亚洲精品福利视频网站| 亚洲第一区第二区第三区| 欧洲grand老妇人| 51色欧美片视频在线观看| 亚洲精品久久久狠狠狠爱| |精品福利一区二区三区| 男人天堂成人在线| 国产一区网站| 日韩免费在线免费观看| 天天干天天做天天操| 亚洲一二三四久久| 国产一精品一aⅴ一免费| 中国成人一区| 亚洲xxx视频| a视频在线观看| 日韩午夜电影在线观看| jizz亚洲少妇| 尤蜜粉嫩av国产一区二区三区| 亚洲春色h网| 国产成人精品一区二区三区| 内衣办公室在线| 一本久久a久久免费精品不卡| 玖草视频在线观看| 久久国产精品毛片| 日韩国产在线一区| 久久69成人| 北条麻妃在线一区二区| 国产精品久久久久久久免费看| 国产精品国产馆在线真实露脸| 亚洲成人天堂网| 亚洲精品网址| 99久久精品免费看国产一区二区三区 | 国产日韩av一区| 日本激情视频在线| 99精品小视频| 99国产在线视频| 国产精品25p| 亚洲视频在线免费观看| 中文字幕av无码一区二区三区| 国产精品美女久久久久高潮| 亚洲免费av一区| 欧美在线亚洲综合一区| 国产乱码一区| 日本高清不卡一区二区三区视频 | a级片在线免费| 日韩成人在线视频观看| 在线观看日批视频| 一区二区三区中文字幕在线观看| 性色av蜜臀av浪潮av老女人| 久久久久在线| 美女黄色片网站| 久久久免费毛片| 国产精品狼人色视频一区| 国产精品一卡二卡三卡| 欧美精品一区在线观看| www.久久精品视频| 亚洲色图欧美激情| 久久人人爽人人人人片| 免费xxxx性欧美18vr| 国产亚洲精品久久久久久久| 天堂综合网久久| 91精品久久久久久久久不口人| 成人女同在线观看| 国产亚洲视频中文字幕视频| a级片在线免费看| 一本大道av伊人久久综合| 黄色一级大片在线免费观看| 99久久精品免费精品国产| 日韩一区二区三区久久| 在线亚洲伦理| 欧美日韩在线免费观看视频| 日本欧美高清| 亚洲999一在线观看www| 欧洲亚洲两性| 久久久久久久久电影| 欧美videos极品另类| 亚洲国内精品视频| 国产欧美熟妇另类久久久| 欧美视频在线视频| 久久久久亚洲AV| 中文字幕第一区二区| 女同性恋一区二区三区| 国产美女在线观看一区| 日韩中文字幕二区| 亚洲高清在线| 欧美xxxx吸乳| 日韩伦理一区| 奇米影视首页 狠狠色丁香婷婷久久综合 | 亚洲色图日韩精品| 久久一区二区视频| 第一页在线视频| 国内精品伊人久久久久av一坑| 99精品免费在线观看| 国内精品久久久久久久影视蜜臀| 一区二区免费在线观看| 欧美视频网址| 日韩hmxxxx| 你微笑时很美电视剧整集高清不卡| eeuss一区二区三区| 99久久999| 91精品国产综合久久香蕉| 日本中文字幕一区二区| 国产999在线| 自拍偷拍欧美视频| 欧美一级电影免费在线观看| av福利在线导航| 国a精品视频大全| 男插女视频久久久| 精品中文字幕在线2019| av片在线观看| 美女撒尿一区二区三区| 国产超级va在线视频| 日韩视频免费看| fc2ppv国产精品久久| 久久福利网址导航| 久操免费在线| 久久精品国产一区二区电影| 高h视频在线观看| 另类美女黄大片| 青春草免费在线视频| 欧美日韩成人精品| 久久大胆人体| 91精品国产高清自在线| 亚洲天堂电影| 国产xxx69麻豆国语对白| 日韩成人高清| 成人国产精品免费视频| 精品视频一区二区三区| 不卡视频一区二区三区| 日本国产精品| 四虎永久国产精品| 91国语精品自产拍| 欧美极品少妇无套实战| 99精品久久久| 欧美在线观看视频网站| 久久精品国产99| 人妻精油按摩bd高清中文字幕| 成人一二三区视频| 四虎永久免费影院| 国产精品乱子久久久久| 国产探花在线免费观看| 亚洲r级在线视频| 潘金莲一级淫片aaaaaa播放| 欧美日韩一二三区| 好吊色一区二区三区| 亚洲男人天天操| 成年人黄视频在线观看| 性亚洲最疯狂xxxx高清| 亚洲成人va| 成人午夜电影在线播放| 一本久久青青| 国产成年人在线观看| 亚洲国产一区二区三区a毛片| 国产成人久久777777| 国产在线国偷精品产拍免费yy| 9.1在线观看免费| 国产婷婷色一区二区三区在线| 五月综合色婷婷| 舔着乳尖日韩一区| 136福利视频导航| 亚洲黄色www网站| 97在线观看免费观看高清 | 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 亚洲春色在线| 亚洲视频免费| 五月婷婷六月丁香激情| 成人免费va视频| 91免费在线看片| 欧美日韩激情小视频| 国产一区二区小视频| 精品中文视频在线| 国产美女在线观看| 国产成人极品视频| 国产96在线亚洲| 一区二区三区四区视频在线 | 亚洲人一二三区| 性色av免费观看| 精品国产一区二区在线观看| 超碰免费97在线观看| 国产69精品久久久久99| 99精品视频在线免费播放| 日本成人三级| 99精品视频免费全部在线| 日韩av.com| 久久久久99精品国产片| 国产奶水涨喷在线播放| 制服丝袜日韩国产| av午夜在线| 国产精品久久久av久久久| 色综合中文网| 免费看一级大黄情大片| 国产黄色成人av| 肉色超薄丝袜脚交69xx图片 | 中文字幕一区二区三区四区| 日本中文字幕在线| 亚洲精品国产综合久久| 国产精品国精产品一二| 亚洲伊人一本大道中文字幕| 欧美成免费一区二区视频| 美女少妇一区二区| 国产夜色精品一区二区av| 无码视频一区二区三区| 亚洲精品一区二区网址 | 91精品久久久久久久| 青青草91久久久久久久久| 性生交免费视频| 国产欧美久久久精品影院| 波多野结衣电影在线播放| 亚洲图片在线综合| 国产v综合v| 午夜视频久久久| 美女免费视频一区二区| 欧洲性xxxx| 欧美精品在线视频| 亚洲成a人v欧美综合天堂麻豆| 国产精品美女无圣光视频| 大胆日韩av| 五月天视频在线观看| 亚洲免费av高清| 亚洲第一色网站| 国内精品久久影院| 天海翼精品一区二区三区| 日本成人中文字幕在线| 欧美激情在线观看视频免费| 97超碰人人草| 欧美成人免费在线视频| 动漫av一区| jizzjizzxxxx| 亚洲国产成人午夜在线一区| 在线观看中文字幕码| 久久久精品免费| 久草在线综合| 国产精品无码av无码| 国产精品传媒在线| 国产高清视频免费| 国产91ⅴ在线精品免费观看| 久久99免费视频| 五月天开心婷婷| 亚洲午夜在线电影| 理论视频在线| 91精品久久久久久综合乱菊| 欧美日韩网站| 在线免费观看麻豆| 欧美日韩精品二区第二页| 91亚洲天堂| 欧美日韩一区二区视频在线 | 成人免费在线网址| 亚洲小说欧美另类婷婷| 在线不卡av电影| 宅男噜噜噜66一区二区66| gogo久久| 亚洲午夜精品一区二区三区| 国产成人在线视频播放| 丁香六月婷婷综合| 久久视频在线视频| 美日韩黄色大片| 婷婷中文字幕在线观看| 欧美日韩中文字幕综合视频| 永久免费在线观看视频| 高清不卡日本v二区在线| 首页亚洲欧美制服丝腿| 欧美日韩三级在线观看| 亚洲欧美中文日韩在线| 日韩影片在线观看| 日本女优爱爱视频| 亚洲综合视频网| 天堂аⅴ在线地址8| 国内视频一区二区| 狠狠色伊人亚洲综合成人| 亚洲另类欧美日韩| 久久亚洲电影天堂|