Я пытаюсь установить кастом .vimrc
profile на всех серверах в производственной среде с помощью 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 строк.
Хорошо, я нашел проблему. Я по ошибке написал класс в файле hiera вместо каталога модулей марионетки. Как только я переместил файл в modules/vim/manifests/
папку и отредактировал файл hiera следующим образом:
classes:
- vim
Это начало работать.
Спасибо за вашу помощь.
Как указывает Свен в своем комментарии, на самом деле это синтаксическая ошибка в вашем коде - у вас есть лишний }
в конце вашего первого file
ресурс.
Чтобы расширить это, на самом деле это не считается «недопустимым» синтаксисом как таковым - поэтому Puppet все еще работает и не жалуется. Вы фактически заканчиваете урок вторым }
, и все, что после этого, Puppet игнорирует.
Также несколько стилевых моментов:
mode
атрибут должен быть '0644'
[ Источник: Документы марионетки ]"This is a string quoting ${myvar}."
[ Источник: Кукольный пух ]path
атрибут полностью, если вы используете путь для имени ресурса [Источник: Марионеточные документы ]Попробуйте использовать этот код:
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',
}
}