在工作中常常会有这样一种需求:某几个人需要某些测试服务器的root权限。比如,开发部门的张三,李四,王五,赵六需要rsync服务器的root权限。有些同学会说那直接 visudo在里面添加几个人不就行了。是的。这样做没错。
但我们rsync服务器有10台呢。我们一个一个的这样做是不是太麻烦了。而且后期如果把赵六换成马强呢?所以我们需要通过puppet做一个模板。有什么变动,只需要改动模板就行了。
前奏:


notify{'notice':message => "I am $vlan_name" #打印变更内容}#判断变更是否等于 itd(不区分大小写) case $vlan_name {'itd': {package { ['SQLyog', 'navicat-premium','imake']: }file {"test files/tmp/test":path => '/tmp/test' content => "hello"mode =>0644#简写形式#file {"/tmp/test":# content => "hello"}} }
sudoers.pp


class basefx::sudoers{ #定义sudoers类case $::system_class{ #判断变理system_class是什么'nagios_server': { #如果服务器的system_class是nagios_server file{ 'sudoers file':content => template("$svn_files/etc/sudoers.erb"), #调用erb模板path => '/etc/sudoers' ,mode => 0440,}}'render','workstation': {file{ 'sudoers file':content => template("$svn_files/etc/sudoers.erb"),path => '/etc/sudoers' ,mode => 0440,}file{ 'qube sudoers file':source => "$svn_files/etc/sudoers.d/qube" ,path => '/etc/sudoers.d/qube' ,mode => 0440,}}}case $::hostname { #判断服务器hostname是什么/^ple-web-test/: { #如果是以ple-web-test开头的服务器,则继续执行file{ '/etc/sudoers.d/ple':content => template("$svn_files/etc/sudoers.d/ple.erb")}}/^dvd/: {file{ '/etc/sudoers.d/dvd':content => template("$svn_files/etc/sudoers.d/dvd.erb")}}} }
sudoers.erb


<% if @hostname == 'dvd02' -%> User_Alias DVD = qiangbs,linsn,caoxu,apache DVD ALL=(ALL) NOPASSWD: ALL <% end -%> <% if @hostname == 'dvd03' -%> User_Alias DVD = qiangbs,chenbin,wanghao1,apache DVD ALL=(ALL) NOPASSWD: ALL <% end -%> <% if @hostname =~ /^dvd/ -%> #主机名以dvd开头的机器 User_Alias DVD = qiangbs,apache Cmnd_Alias DVD_CMD = /bin,/usr/sbin/xfs_fsr DVD ALL=(ALL) NOPASSWD: ALL
puppet参考文档:https://puppet.com/docs/puppet/5.3/type.html