设为首页 收藏本站
查看: 781|回复: 0

[经验分享] Puppet代码书写规范(十九)

[复制链接]

尚未签到

发表于 2017-10-31 16:12:18 | 显示全部楼层 |阅读模式
Puppet代码的规范
        puppet对agent的配置清单主要集中在manifests和modules两个目录中,manifests和modules目录中清单代码文件的符号间距、缩进与空白的使用规范.

        *.pp文件
        建议使用两个空格的软标签.
        不推荐使用制表符.
        尾部不要包含空格.
        建议单行不要超过80个字符的宽度.
        在资源的属性中,通过=>符号进行属性对齐。

注释
        puppet的注释目前支持两种风格:
        一种shell脚本风格."#"
       
1
2
3
4
    #this is test   
    package {"httpd":
        ensure=> present,
    }





        另一种C语言风格以/*开始,*/结束的多行注释,不支持//注释.
1
2
3
4
5
6
    /*   
    this is test
    */
    package {"httpd":
        ensure=> present,
    }





变量规范:
        变量只包含字母[a-z][A-Z]、数字[0-9]和下划线(_)。
        正确:
1
    $conten_test=lisi



        错误:
1
    $conten-test=lisi



        '',"",{}等符号,在不包含变量的字符串中都应该使用‘’进行引用;如果字符串中包含变量则通过""进行引用;如果字符串中既有变量又有字符串,可以通过{}进行引用.

        正确:
1
2
    /etc/${file}.conf   
    "${::operatingssytem} is not supported by ${module_name}"




        不推荐:(这样写也正确,官方不推荐)
1
2
    /etc/${file}.conf
    "$::operatingssytem is not supported by $module_name"





        变量被引用时不加""。(我之前代码都加的有,官方不推荐)
        正确:
1
    mode  => $mode



        不推荐:
1
2
    mode  => "$mode"
    mode  => "${mode}"





资源规范:
        资源的标题需要用单引号''或双引号""引起来,同时标题中不能包含空格和连字符.
        资源标题:
        推荐:
1
2
3
4
5
6
    package {"httpd":   
        ensure=> present,
    }
    package {'httpd':
        ensure=> present,
    }




        不推荐:
1
2
3
    package {httpd:   
        ensure=> present,
    }




资源符号对齐:
        推荐:
1
2
3
4
    package {"httpd":   
        ensure=> present,
        owner=> root,
    }




        不推荐:
1
2
3
4
    package {"httpd":   
        ensure=> present,
        owner=> root,
    }





        资源属性顺序:
       
        推荐:
1
2
3
4
    package {"httpd":   
        ensure=> present,#ensure优先放在前面.
        owner=> root,
    }




        不推荐:
1
2
3
4
    package {"httpd":   
        owner=> root,
        ensure=> present,
    }




资源关系:
        资源应该由逻辑关系被划分为一组,而非通过资源类型划分.

        推荐:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class nginx {
    package {"nginx":
            ensure    => present,
        }
        service {"nginx":
            ensure    => true,
            enable    => true,
            require    => Package['nginx'],    #引用依赖首字母要大写
        }
     }
class httpd {   
    package {"httpd":
            ensure    => present,
        }
        service {"httpd":
            ensure    => true,
            enable    => true,
            require    => Package['httpd'],    #引用依赖首字母要大写
        }
     }





    不推荐:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  class package {
    package {"nginx":
            ensure    => present,
        }
        package {"httpd":
            ensure    => present,
        }
     }
      
     class service {   
        service {"nginx":
            ensure    => true,
            enable    => true,
            require    => Package['nginx'],    #引用依赖首字母要大写
        }
        service {"httpd":
            ensure    => true,
            enable    => true,
            require    => Package['httpd'],    #引用依赖首字母要大写
        }
    }





软连接
        通过file资源建立软连接的时候,需要设置ensure => link,并通过target属性来指定目标文件.

1
2
3
4
    file {"/tmp/3.pp":#软连接文件.(目标文件)   
        ensure=> link,
        target=> '/root/3.pp',#源文件.
    }




        注释:/root/3.pp文件,我想软连接到/tmp下.

        正确写法:

1
2
3
4
5
    [iyunv@sh-web1 ~]# cat link.pp     
        file {"/tmp/3.pp":
        ensure=> link,
        target=> '/root/3.pp',
    }




        错误写法:
1
2
3
    file {"/tmp/3.pp":   
        target=> '/root/3.pp',
    }



        agent本地应用*.pp文件:
1
2
3
4
5
6
7
[iyunv@sh-web1 ~]# puppet apply link.pp
Notice: Compiled catalog for sh-web1.localdomain in environment production in 0.07 seconds
Notice: /Stage[main]/Main/File[/tmp/3.pp]/ensure: created
Notice: Finished catalog run in 0.02 seconds
[iyunv@sh-web1 ~]# ls /tmp/
3.pp      yum_save_tx-2017-09-22-17-52B5ZM81.yumtx  yum_save_tx-2017-09-26-02-00w5fKzh.yumtx
text.txt  yum_save_tx-2017-09-22-17-52b9CPEA.yumtx  yum_save_tx-2017-09-26-18-03lhfm3k.yumtx



        查看软连接文件的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@sh-web1 ~]# cat /tmp/3.pp
$package = ['php','php-devel']
    class nginx {
        $packages += ['php-pecl-geoip']
    package {[packages]:
        ensure=> present,
        }
    }
    class apache {
        $packages += ['httpd']
    package {[packages]:
        ensure  => present,
            }
}
include nginx



        #查看源文件的内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[iyunv@sh-web1 ~]# cat 3.pp
$package = ['php','php-devel']
    class nginx {
        $packages += ['php-pecl-geoip']
            package {[packages]:
            ensure=> present,
        }
    }
    class apache {
        $packages += ['httpd']
        package {[packages]:
           ensure  => present,
            }
}
include nginx




文件模式:
        通过file资源设置文件权限时要注意:
        1、文件权限应该由4位数字组成,而非3位.(之前文章都是三位,官网推荐四位)
        2、权限数字应该要使用''引起来.(之前文章这块有些没有引)

        推荐:
1
2
3
4
    file {"/tmp/test.txt":   
        ensure =>file,
        mode   =>'0644',
    }




        不推荐:
1
2
3
4
    file {"/tmp/test.txt":   
        ensure =>file,
        mode   =>644,
    }




if条件语句的规范
        通常不建议将selector语句与资源混用.

推荐写法:
1
2
3
4
5
6
7
8
9
$file_mode= $::operatingssytem ? {
    debian=> '0700',
    redhat=> '0644',
    Centos=> '0644',
    }
    file {'/tmp/test.txt':
        conten => "hello world\n",
        mode => $file_mode,
}





不推荐写法:
1
2
3
4
5
6
7
8
9
file {'/tmp/test.txt':
    mode => $::operatingssytem ? {
    debian=> '0700',
    redhat=> '0644',
    Centos=> '0644',
    conten => "hello world\n",
    mode => $file_mode,
    }
}





class的规范:
        符号关联关系:
        通过->符号建立资源之间的关联关系的顺序为从"左到右".

        正确写法:
        Package["httpd"] -> Service["httpd"]

        错误写法:
        Service["httpd"] -> Package["httpd"]

        模块的继承:
        继承可以在模块中使用,但不推荐跨模块的命名空间使用.
        class ssh{}
        class ssh::client inherits {}
        class ss::service inherits {}

        跨模块继承(不推荐):
        class ssh{}
        class ssh::client work {}
        class ss::service apache {}

标示符命名规范:
1)变量命名规则

        符合正则表达式规范(\A\$[a-zA-Z0-9_]+\Z),不包含特殊的字符.如%@^等.
        变量名区分大小写,如$foo和$FOO为不同的变量。
class类的命名规范:
        符合正则表达式规范(\A\$[a-zA-Z0-9_]+\Z),不包含特殊的字符.如%@^等.
        如果类名中使用了命名空间需要以"::"作为分隔,并符合正则表达式规范(\A([a-z][a-z0-9_]*)?(::[a-z][a-zA-Z0-9]*)*\Z)       
modules命名规则:
        符合正则表达式规范。
        模块名的首字母不能为大写.
        tag命名规则:符合正则表达式规范(/\A[a-z0-9._-]+\Z)。
        nodes节点命名规则:符合正则表达式规范(/\A[a-z0-9._-]+\Z)。

puppet文件的导入和类的声明
        在manifests目录内文件与文件之间的导入功能通常使用import函数来完成。
        示例1:
        site.pp
        import nodes

        示例2:
        site.pp
        import 'nodes/*.pp'
        注释:import函数可以导入manifests目录中的一个文件,也可以导入多个文件,多个文件可以使用通配符"*"来表示.

        类的声明:
1
2
3
4
    node base {   
        include ntp
        include apache
    }






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-406338-1-1.html 上篇帖子: Puppet函数介绍(十八) 下篇帖子: Puppet File资源介绍(二十)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表