自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用Cfengine自動化基礎架構進行系統(tǒng)管理

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

簡介

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

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

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

配置管理和 Cfengine

良好的配置管理可以建立和維護 IT 平臺和產品及其環(huán)境的性能、功能以及物理屬性的一致性。它還可用來決定適當的安全性特性并確保這些特性的正確應用。這是一項復雜的工作,有很多配置管理工具可用。

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

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

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

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

生命周期管理

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

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

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

最后,在審計階段,對更改進行本地審計和維護。決策結果由 Cfengine 內的設計確保且可自動維護。

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

依賴項

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

術語

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

準備開始

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

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

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

從源代碼構建 Cfengine

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

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)在轉到 root 用戶并運行如下命令(二進制文件置于 /var/cfengine/bin 內)。

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

用適當的電子郵件地址更新文件 promises.cf 內的 "mailto" 選項。在 promise.cf 的 "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" };

在所有配置文件內將策略服務器更新為這個新的服務器環(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 安裝中需要注意的組件。 (注意:如果您是從一個二進制包安裝的 Cfengine,或是在編譯安裝過程中做過定制,那么這些基礎目錄有可能不同。)

目錄

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

二進制文件

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

配置文件

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

首次啟動 Cfengine Policy Server

在該服務器上運行如下命令:

/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 服務器現(xiàn)已配置。為了準備 Cfengine 來充當遠端客戶機,執(zhí)行如下命令: start cf-server。

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

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

客戶端的初始設置

  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)建一個二進制包

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

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

準備一個 RPM

RPM 以一個 spec 文件開始,內含有關此包的信息。清單 1 顯示了 Red Hat RPM Spec 文件的一個例子。

清單 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 構建過程

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

Cfengine 的第一步

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

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

 

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

 

圖 1. Cfengine 過程

示例配置

為了方便您熟悉 Cfengine,清單 2-6 顯示了將要放置于 /var/cfengine/inputs 內的示例配置文件。要驗證語法是否正確,運行 cf-promises –f ./test.cf。若要使用此配置執(zhí)行,運行 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)" };
}

 結束語

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

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

【編輯推薦】

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

 

責任編輯:黃丹 來源: IBMDW
相關推薦

2011-09-29 10:58:51

rBuilderLinux

2022-07-11 10:08:19

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

2010-12-24 14:46:31

Perl腳本

2018-02-10 18:35:09

LinuxAnsible系統(tǒng)管理

2011-10-19 10:49:07

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

2020-12-01 12:06:22

系統(tǒng)管理基礎架構自動化工具

2021-04-01 06:13:50

Ansible系統(tǒng)運維

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

2010-10-21 16:18:18

2013-09-18 10:57:09

虛擬化應用

2009-10-23 16:03:40

Oracle 10g系內存管理

2010-05-05 15:56:37

Unix系統(tǒng)

2015-07-06 09:16:51

2014-01-13 10:02:11

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

2019-09-09 15:27:39

戴爾

2020-07-28 08:41:21

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

2010-05-05 16:27:22

Unix系統(tǒng)
點贊
收藏

51CTO技術棧公眾號