Марионетка: Как осуществить создание файла в домашней папке корня?

Я пытаюсь установить пользовательское .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 строк.

1
задан 10 February 2015 в 12:57
2 ответа

Как указывает Свен в своем комментарии, на самом деле это синтаксическая ошибка в вашем коде - у вас есть лишний } на конец вашего первого ресурса 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',
    }
}
1
ответ дан 3 December 2019 в 21:00

Хорошо, я нашел проблему. Я по ошибке написал класс в файле hiera вместо каталога модулей марионетки. Как только я переместил файл в папку modules / vim / manifest / и отредактировал файл hiera следующим образом:

classes:
 - vim

Он начал работать.

Спасибо за вашу помощь.

1
ответ дан 3 December 2019 в 21:00

Теги

Похожие вопросы