NoOps

Ops make no ops | Ops的目标是没有Ops,嗯!

在puppet使用中针对域名形式主机名取$hostname的问题

作者: |   902 浏览  | 

今天测试使用puppet中的if来针对同一node组里不同hostname配件不同的文件,由于同一node组里多个class 一样,且是一个WEB集群,只有一台需要添加一个调试跟踪工具,配置有所不同,所以使用if判断去做匹配,不想把它再独立成一个node.

node配置如下:

测试不通过,怀疑是变量获取有问题,于是在puppettest01.bj 上执行 facter 来查看变量

而我的puppettest01.bj的服务器上查看是这样的

从上面信息可以看到我们的 $hostname 是puppettest01 ,而非 puppettest01.bj , facter 获取hostname时截断了.bj,  即:$hostname=puppettest01 ,而我在上面的配置里是使用的 puppettest01.bj
所以无法匹配到,于是改成了下面的配置

测试通过。
注:此案例只针对像 puppettest01.bj 这样使用域名方式的主机名有效。

第二种解决方法:

也可使用 $fqdn 变量来匹配,代码如下:

注:此方法不太推荐,因为FQDN 不是由本机决定的,是由 DNS 决定的,这需要DNS的保障才可广泛使用。

3 Comments

  1. nomyself
    2013/06/27 at 7:22 上午

    不以 fqdn 写 node 会留下问题,后期出现正则匹配的时候正则优先。

  2. chris
    2013/08/08 at 11:33 上午

    你应该研究下facter获取的hostname为什么截断了, 而不是”委屈求全”

    • wilbur
      2013/08/11 at 4:33 下午

      * facter获取hostname是调用hostname命令,如果正则匹配(.*?)\.,则取.之前的内容。
      * domain是取hostname,正则.*?\.(.+$),取.后面的部分
      * fqdn是hostname+domain

      所以:

      domain => bj
      fqdn => puppettest01.bj
      hostname => puppettest01

发表评论