Я пытаюсь установить пользовательское .vimrc
профиль на всех серверах в продуктивной среде при помощи Марионетки.
Я записал следующую декларацию:
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",
}
}
Первая часть декларации работает как очарование и добавляет a .vimrc
файл к /etc/skel
, но по некоторым причинам, вторая часть не работает, даже при том, что Вы видите, что это - точно та же конфигурация кроме пути, путь во втором разделе является корневым каталогом корня.
Существует ли причина, почему Марионетка игнорирует этот раздел?
Это вызвано тем, что это имеет некоторую обороноспособность когда дело доходит до домашней папки корня?
Редактирование № 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 ~]#
При проверке проблематичного файла в Марионеточный сервер:
[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 строк.
Как указывает Свен в своем комментарии, на самом деле это синтаксическая ошибка в вашем коде - у вас есть лишний }
на конец вашего первого ресурса file
.
Чтобы расширить это, это фактически не считается «недопустимым» синтаксисом как таковым - поэтому Puppet все еще работает и не жалуется. Фактически вы завершаете класс вторым }
, и все, что после этого, игнорируется Puppet.
Кроме того, несколько пунктов стиля:
mode
быть '0644'
[Источник: Puppet docs ] «Это строка с кавычками $ {myvar}.»
[Источник: Puppet Lint ] path
можно полностью удалить, если вы используете путь для имя ресурса [Источник: Puppet docs ] Попробуйте использовать этот код:
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',
}
}
Хорошо, я нашел проблему.
Я по ошибке написал класс в файле hiera вместо каталога модулей марионетки.
Как только я переместил файл в папку modules / vim / manifest /
и отредактировал файл hiera следующим образом:
classes:
- vim
Он начал работать.
Спасибо за вашу помощь.