IT技术博客大学习 共学习 共进步

puppet 手册检查puppet配置文件和使用puppet tags

MySQLOPS 数据库与运维自动化技术分享 2011-12-20 23:57:28 浏览 2,483 次

[导读]

本系列文档是根据puppet cookbook 2.7翻译而来,由于个人水平有限,其中错误在所

难免,本章节是接着上一小节,如何调试puppet代码,以及如何记录puppet 输出到日志,

都是偏重于调试以及故障排查,本章节是主要检查puppet的配置文件,以及在puppet

中应用很广的tags(标签), 可以学习如何使用puppet tag?以及使用puppet tag的好处,

关于puppet的配置文件 puppet.conf说明,可以参阅之前的

文档 ,点我阅读puppet.conf文件中英文说明:

[正文]

检查配置文件设置

你已经知道,puppet 的配置设置是存储在puppet.conf文件里,在该文件里没有提及的参数
使用的是默认值,你怎么样才能所有的配置参数的值呢?不管它是否在puppet.conf文件里
明确设置?你可以使用puppet的 -genconfig开关。

如何做

1.运行

# puppet -genconfig

这将输出每个配置参数以及参数的值(配置参数有许多)。但是,输出里包括解释每个参数说明
非常有用,要找到你感兴趣的特定参数,你可以像这样使用grep:

# puppet -genconfig |grep “reportdir =”

1
reportdir = /var/lib/puppet/reports

―――――――――――――――- ―――――――――――――――――――-
使用tags(标签)

puppet类有相互依赖关系,有时类之间需要知道类是否存在。

例如。管理防火墙的puppet 类可能需要知道该节点是否是一个web服务器。

puppet 的tagged函数将会告诉你,在代码里检查类的名字或者资源标签是否存在。

1.如果你想puppet 在一个特定的节点运行,或者在节点上运行特定的类,

为了帮助你查找出特定的节点, 所有的节点自动以节点名或者从父节点继承类

搜索该标签 .

node bitfield_server {

1
2
3
4
5
6
7
8
9
10
11
    include bitfield
}
 
node cookbook inherits bitfield_server {
    if tagged("cookbook") {
        notify { "this will succeed": }
    }
    if tagged("bitfield_server") {
        notify { "so will this": }
    }
}

2.因此你可以告诉puppet在某个节点上执行一个特定类的,所有结点自动都会检查

其类以及父类(类有继承)是否有被tagged(标签)的类名。

include apache::port8000

1
2
3
if tagged("apache::port8000") {
    notify { "this will succeed": }
}

3.如果你想给一个节点设置任意的tag,可以使用标签(tag)凼数。

1
2
3
4
5
tag("old-slow-server")
if tagged("old-slow-server") {
notify { "this will succeed": }
}
4.如果你想对特定的资源设置一个标签,可以使用tag 元参数。
1
2
3
4
5
file { "/etc/ssh/sshd_config":
notify => Service["ssh"],
tag => "security",
}

5.你可以使用tags(标签),以便应用puppet部分代码,如果
你在puppet命令行下运行那些有明确的tags(标签)的pupet类,或者特定资源,
可以使用 -tags 选项,例如:如果你只想Exit更新配置,但是不想运行其它的
代码。

1
2
3
4
#puppet agent --test --tags exim 
  
译者说明,在很多情况下客户端可能需要执行很多类,使用tag标签的话,就可以只
运行你想要运行特定资源.tag标签可以应用在node或者类中.

1
 

还有更多:
 
你可以使用(tags)标签来创建资源的集合,例如:如果一些服务信赖于
许多片断文件。

1
2
3
4
5
6
7
8
9
10
11
12
class firewall::service {
service { “firewall”:
....
}
File <| tag == “firewall-snippet” |> ~> Service[“firewall”]
}
class myapp {
file { “/etc/firewall.d/myapp.conf”:
tag => “firewall-snippet”,
....
}
}

在这里,我们指定了任何标签为firewall-snipped资源更新了
就必须通知防火墙服务,我们要做的就一切就是为特定的app或者
服务添加一个防火墙配置并标签为firewall-snippet,这样的话puppet会重新加载服务。
虽然我们已经在每个资源片段添加了notfiy=>Service["firewall"],
如果我们定义防火墙服务随着代码文件不断更新而自动的变化。标签可以让
我们把相应的代码进行逻辑封装在一个地方,这样也使得将来的维护和重构更加容易。

译者说明,在使用虚拟资源时候,经常会用到tag标签.

[总结]

本小节就到此,下一章节会为大家介绍puppet的运行阶段,我们知道 puppet运行有相关依赖,

并不一定按照代码的顺序来执行,而puppet的运行阶段可以很好的解决puppet 代码之间的

依赖关系,欲知详情,敬请下篇,关于puppet cookbook 中文最新翻译进展,请留意本站puppet

栏目更新.

建议继续学习

  1. 使用Apache 和Passenger来运行puppetmaster (阅读 8,165)
  2. 自动化运维之企业实际案例分析 (阅读 4,623)
  3. puppet使用rsync来同步文件教程 (阅读 4,081)
  4. DevOps之Puppet (阅读 3,823)
  5. 如何有效运行puppet cron任务以及如何触发运行puppet (阅读 3,762)
  6. puppet vagrant 管理VirtualBox 虚拟机 (阅读 3,443)
  7. puppet运维之使用自定义函数 (阅读 3,302)
  8. puppet extlookup 和puppet hiera使用 (阅读 3,043)
  9. puppetmaster集群解决方案之puppet客户端共享一张证书 (阅读 2,781)
  10. puppet手册之建立软件安装源 (阅读 2,563)