Puppet 资源公有属性的其他描述方式

puppet的资源公有属性中还可以通过"->"和"~>"两种特殊符号来描述资源与资源之间的关系.


->:用于表示资源与资源之间的先后关系,等同于before和require两个资源公有属性.

~>:用于表示资源之间的通知,等同于notify和subscribe练个资源公有属性.


示例: "->"用法

安装httpd并运行httpd服务的puppet代码如下:

1
2
3
4
5
6
7
8
9
10
[root@sh-web1 ~] # cat httpd2.pp 
package { "httpd" :
     ensure => present,
     provider =>  'yum' ,
}
service { "httpd" :
     ensure => running,
     enable  =>  true ,
}
Package[ "httpd" ] -> Service[ "httpd" ]

运行结果:

1
2
3
4
5
6
7
[root@sh-web1 ~] # puppet apply httpd2.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.06 seconds
Notice:  /Stage [main] /Main/Package [httpd] /ensure : created
Notice:  /Stage [main] /Main/Service [httpd] /ensure : ensure changed  'stopped'  to  'running'
Notice: Finished catalog run  in  3.02 seconds
[root@sh-web1 ~] # /etc/init.d/httpd status
httpd (pid  81254) is running...


示例: "~>"用法

1
2
3
4
5
6
7
8
9
10
11
12
13
[root@sh-web1 ~] # cat httpd.pp 
package { "httpd" :
     ensure => present,
     provider =>  'yum' ,
}
service { "httpd" :
     ensure => running,
     enable  =>  true ,
}
file  { '/etc/httpd/conf/httpd.conf' :
     ensure =>  file ,
}
Package[ "httpd" ] -> File [ '/etc/httpd/conf/httpd.conf' ] ~> Service[ "httpd" ]


运行结果:

1
2
3
4
5
6
7
[root@sh-web1 ~] # puppet apply httpd.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.07 seconds
Notice:  /Stage [main] /Main/Package [httpd] /ensure : created
Notice:  /Stage [main] /Main/Service [httpd] /ensure : ensure changed  'stopped'  to  'running'
Notice: Finished catalog run  in  3.25 seconds
[root@sh-web1 ~] # /etc/init.d/httpd status
httpd (pid  81493) is running...


生产上并不会像上面那样去写,一个资源可能很大,篇幅很长.

如下两种写法:


第一种:

1
2
3
4
5
6
7
8
9
10
[root@sh-web1 ~] # cat httpd2.pp 
package { "httpd" :
     ensure => present,
provider =>  'yum' ,
}
->
service { "httpd" :
     ensure => running,
enable  =>  true ,
}


第二种:

1
2
3
4
5
6
7
8
9
[root@sh-web1 ~] # cat httpd2.pp 
package { "httpd" :
     ensure => present,
     provider =>  'yum' ,
} ->
service { "httpd" :
     ensure => running,
     enable  =>  true ,
}


1
2
3
4
5
[root@sh-web1 ~] # puppet apply httpd2.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.04 seconds
Notice:  /Stage [main] /Main/Package [httpd] /ensure : created
Notice:  /Stage [main] /Main/Service [httpd] /ensure : ensure changed  'stopped'  to  'running'
Notice: Finished catalog run  in  2.28 seconds


注意:大部分都是第二种写法,"->"或"~>"跟在花括号的后面,但是个人习惯用第一种反正更新puppet不报错也能得到想要结果就ok.


audit审计

audit资源公有属性主要用于资源属性的审计,当某资源状态变化时,它可以将变化的内容抓夹到系统日志中.


puppet代码如下:

1
2
3
4
[root@sh-web1 ~] # cat file.pp 
file  { "/etc/password" :
     audit => [ owner,mode ],
}

运行过程,会看到改变通知.

1
2
3
4
5
[root@sh-web1 ~] # puppet apply file.pp 
Notice: Compiled catalog  for  sh-web1.localdomain  in  environment production  in  0.07 seconds
Notice:  /Stage [main] /Main/File [ /etc/password ] /owner : audit change: newly-recorded value absent
Notice:  /Stage [main] /Main/File [ /etc/password ] /mode : audit change: newly-recorded value absent
Notice: Finished catalog run  in  0.05 seconds