cfengine容器

cfengine有两种容器,分别是bundle和body。

bundle:最一般也是最强的策略分组机制,包含promises。

形式:

  
  
  
  
  1. bundle type name(arguments) 
  2. promise_type: 
  3. class_expression: 
  4. promise 
  5. ... 
  6. } 

bundle名字是一个随意的字符串,bundle的类型是特定的,主要有下面类型

agent:可执行的bundle,由bundlesequence调用或methods调用,这时最重要的类型,因为策略就是在

这里落实的。可以包含的primises类型:vars,files,commands,methods,packages,processes等。

common:类似于agent,不过这里定义的变量和类是全局的,每个bundle都可以使用,例如

  
  
  
  
  1. bundle common g 
  2. vars: 
  3. "localdir" string => "/usr/local";  # 在其他bundle使用$(g.localdir)可以访问
  4. "confdir" string => "/etc"; 
  5. classes: 
  6. "testhost" or => { "testhost1", "testhost2" };  # 在其他bundle使用$(g.testhost)可以访问
  7. # 在cfengine里默认变量是不可修改、本地的,但是可以在其他bundle里通过使用前缀访问
  8. # 在cfengine里默认类是本地的,其他bundle不可访问,但是在common、classes属性定义的类是全局的。

edit_line:修改文件内容。可以包含的promises类型:insert_lines,delete_lines,field_edit,

replace_patterns。

server:约束cf-serverd的行为,这里可以定义不同资源的访问权限,如果要传送文件,必须在这里

开启访问权限。可以包含的promises类型:access,roles。

 

body:定义属性值,不能包含promises,但是可以使用class expression来定义不同的值。

形式:

  
  
  
  
  1. body type name(arguments) 
  2. attribute1 => value1; 
  3. attribute2 => value2; 
  4. … 
  5. [class_:] < /span>
  6. attributeN => valueN; 

  
  
  
  
  1. 这里需要注意特定的body,就是control body 
  2. common control:定义需要执行的bundle顺序、一些额外的文件。 
  3. agent control:主要约束连续评估同样promises的最短间隔时间。 
  4. server control:约束可以访问的clients、users、interface。 

classes类型:根据情况定义不同的类。

  
  
  
  
  1. body classes passfail 
  2. promise_kept => { "fileexisted" };  # promises处于kept状态则定义fileexisted class
  3. promise_repaired => { "filecreated" };  # promises处于repaired状态则定义filecreated class
  4. repair_failed => { "fileerror" };  # promises处于failed状态则定义fileerror class

action:定义promise怎么被评估和修复的。

  
  
  
  
  1. body action warn_hourly 
  2. action_policy => "warn"; # 不修复promises,仅仅产生警告 
  3. ifelapsed => "60";  # 连续评估同样promises的最短间隔时间

copy_from:只能在"files:"使用,指明文件怎么复制的

  
  
  
  
  1. body copy_from secure_cp(from,server) 
  2. source => "$(from)";  # 资源文件
  3. servers => { "$(server)" };  # 资源服务器
  4. compare => "digest";  # 比较方法
  5. encrypt => "true";  # 传输加密
  6. verify => "true";  # 验证

depth_search:递归目录、跳过某个目录、递归深度。

  
  
  
  
  1. body depth_search recurse_ignore(d,list) 
  2. depth => "$(d)";  # $(d)是递归深度,特殊值是"inf",表示无限递归,"3"表示递归3层。
  3. exclude_dirs => { @(list) };  # 跳过某个目录
  4. # 结合copy_from和depth_search可以同步某个目录

edit_default:规定文件是否备份、文件大小、文件是否为空、每次是否创建等。

  
  
  
  
  1. body edit_defaults backup_timestamp 
  2. empty_file_before_editing => "false";  # 文件是否为空
  3. edit_backup => "timestamp";  # 备份方式,以时间戳备份
  4. max_file_size => "300000";  # 文件大小

edit_field:定义域分隔符、对域进行处理。

  
  
  
  
  1. body edit_field col(split,col,newval,method) 
  2. field_separator => "$(split)";  # 域分隔符
  3. select_field => "$(col)";  # 对第几个域进行处理
  4. value_separator => ",";  # 每个域多个值通过逗号分隔
  5. field_value => "$(newval)";  # 需要处理的字符串
  6. field_operation => "$(method)"; # 处理动作:set、delete、append、prepend,etc...
  7. extend_fields => "true";  # 允许增加域
  8. allow_blank_fields => "true";  # 允许域为空值

  

body和bundle的区别

body是属性组,而bundle是promises组。

promises定义做什么事情,而属性是定义事情怎么处理的。

你可能感兴趣的:(linux,Bundle,body,配置管理工具,Cfengine)