.vimrc
我正在尝试使用 Puppet 在生产环境中的所有服务器上设置自定义配置文件。
我写了以下清单:
class vim {
file { "/etc/skel/.vimrc":
path => '/etc/skel/.vimrc',
ensure => present,
mode => "664",
source => "puppet:///modules/vim/.vimrc",
}
}
file { "/root/.vimrc":
path => '/root/.vimrc',
ensure => present,
mode => "664",
source => "puppet:///modules/vim/.vimrc",
}
}
清单的第一部分像魔法一样工作,并将.vimrc
文件添加到/etc/skel
,但由于某种原因,第二部分不起作用,即使你可以看到除了路径之外它是完全相同的配置,第二部分中的路径是root的主目录。
Puppet 忽略此部分有什么原因吗?
这是因为它对 root 的主文件夹有一些防御措施吗?
编辑#1:
[root@sgproxy04 ~]# ls -la /root/
total 2452
dr-xr-x---. 3 root root 4096 2015-02-10 10:53 .
dr-xr-xr-x. 27 root root 4096 2015-01-12 09:31 ..
-rw-------. 1 root root 9423 2013-07-17 14:19 anaconda-ks.cfg
-rw------- 1 root root 14032 2015-02-10 10:55 .bash_history
-rw-r--r--. 1 root root 18 2009-05-20 10:45 .bash_logout
-rw-r--r-- 1 root root 196 2014-11-17 12:16 .bash_profile
-rw-r--r--. 1 root root 176 2004-09-23 03:59 .bashrc
-rw-r--r--. 1 root root 9545 2013-07-17 14:21 cobbler.ks
-rw-r--r--. 1 root root 100 2004-09-23 03:59 .cshrc
-rwxr-xr-x. 1 root root 396 2013-07-10 07:33 hosts.sh
-rw-r--r--. 1 root root 17440 2013-07-17 14:19 install.log
-rw-r--r--. 1 root root 12476 2013-07-17 14:19 install.log.syslog
-rw-r--r--. 1 root root 2382545 2013-07-17 14:21 ks-post.log
-rw-r--r--. 1 root root 3572 2013-07-17 14:17 ks-pre.log
drwx------ 2 root root 4096 2014-09-15 07:45 .ssh
-rw-r--r--. 1 root root 129 2004-12-03 21:42 .tcshrc
-rw-rw-r-- 1 root root 0 2014-12-18 16:14 testfile2.dat
-rw-rw-r-- 1 root root 0 2014-12-18 16:14 testfile.dat
-rw------- 1 root root 6757 2015-02-10 10:53 .viminfo
[root@sgproxy04 ~]#
编辑#2:puppet agent -t
在客户端运行时,我得到以下输出:
[root@sgproxy04 ~]# puppet agent -t
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts in /var/lib/puppet/lib/facter/root_home.rb
Info: Loading facts in /var/lib/puppet/lib/facter/pe_version.rb
Info: Loading facts in /var/lib/puppet/lib/facter/puppet_vardir.rb
Info: Loading facts in /var/lib/puppet/lib/facter/facter_dot_d.rb
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: syntax error on line 11, col 4: ` ensure => present,' at /etc/puppet/environments/production/manifests/site.pp:1 on node sgproxy04.sg.company.com
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run
[root@sgproxy04 ~]#
在Puppet服务器中检查有问题的文件时:
[root@foreman fqdns]# cat /etc/puppet/environments/production/manifests/site.pp
hiera_include("classes", [])
Package { allow_virtual => false, }
node default {
}
[root@foreman fqdns]#
如您所见,它说第 11 行存在问题,但文件中只有 5 行。
答案1
正如 Sven 在他的评论中指出的那样,这实际上是你的代码中的一个语法错误 - 你}
的第一个资源的末尾有一个多余的内容file
。
进一步说,这实际上并不被视为“无效”语法 - 因此 Puppet 仍可运行且不会发出任何抱怨。您实际上是用第二个 来结束类}
,之后的所有内容都会被 Puppet 忽略。
另外,还有几点风格要点:
- 你的
mode
属性需要是'0644'
[来源:Puppet 文档] - 仅当您在字符串中使用变量/事实时才需要用双引号括住字符串(即
"This is a string quoting ${myvar}."
[来源:Puppet Lint] path
如果使用路径作为资源名称,则可以完全删除该属性[来源:Puppet 文档]
尝试使用此代码:
class vim {
file { '/etc/skel/.vimrc':
ensure => file,
mode => '0664',
source => 'puppet:///modules/vim/.vimrc',
}
file { '/root/.vimrc':
ensure => file,
mode => '0664',
source => 'puppet:///modules/vim/.vimrc',
}
}
答案2
好的,我找到了问题。我错误地将类写入了 hiera 文件中,而不是 puppet 的模块目录中。一旦我将文件移动到文件夹modules/vim/manifests/
并像这样编辑 hiera 文件:
classes:
- vim
它开始工作了。
感谢您的帮助。