
Во время этого запуска Puppet (используя ) происходит странная вещь, Puppet Apply
и это меня озадачивает. Я пробовал свои обычные каналы, чтобы найти решения, но ничего по теме не нашел. Прошу прощения за многословие, просто не хочу ничего упустить :\
-
Мои занятия
class c2c::profile::app::logio::stage_support {
# Log.io plugin
# Create plugin directories
exec { "create_codec_dir":
command => "/bin/mkdir --parents /etc/logstash/plugins/logstash/codecs --mode=0775",
creates => '/etc/logstash/plugins/logstash/codecs',
}
# Install plugin
file { "logio_plugin_file":
# update: added in response to a serverfault comment
ensure => file,
path => '/etc/logstash/plugins/logstash/codecs/logio.rb',
mode => '0775',
owner => 'root',
group => 'root',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
require => Exec['create_codec_dir'],
notify => Service['logstash'],
}
}
.. и мойКукольный забег пропускаетlogio_plugin_file
инструкция (или по какой-либо причине не копирует файл).
-
Журналы и т.д.
Журнал отладки довольно большой, и мне не хотелось вставлять его целиком, поэтому вот каждая строка в запуске Puppet, где упоминается «logio_plugin_file», но я с радостью предоставлю больше, если понадобится.
Debug: /File[logio_plugin_file]/seluser: Found seluser default 'system_u' for /etc/logstash/plugins/logstash/codecs/logio.rb
Debug: /File[logio_plugin_file]/selrole: Found selrole default 'object_r' for /etc/logstash/plugins/logstash/codecs/logio.rb
Debug: /File[logio_plugin_file]/seltype: Found seltype default 'etc_t' for /etc/logstash/plugins/logstash/codecs/logio.rb
Debug: /File[logio_plugin_file]/selrange: Found selrange default 's0' for /etc/logstash/plugins/logstash/codecs/logio.rb
..
Debug: /File[logio_plugin_file]/require: requires Exec[create_codec_dir]
Debug: /File[logio_plugin_file]/notify: subscribes to Service[logstash]
..
Debug: /File[logio_plugin_file]: Autorequiring File[logstash_codec_plugins]
/var/lib/puppet/state/last_run_report.yaml
Термин «logio_plugin_file» упоминается только как часть двух Puppet::Util::Log
записей, а File[logio_plugin_file]
отдельной записи не существует.
Ниже приведен краткий фрагмент этих двух записей:
- !ruby/object:Puppet::Util::Log
level: !ruby/sym debug
time: 2013-12-06 17:30:38.009095 +00:00
tags:
- debug
- file
- logio_plugin_file
- class
... (25 more ) ...
line: 41
source: /File[logio_plugin_file]/require
file: /tmp/vagrant-puppet/modules-0/c2c/manifests/profile/app/logio/stage_support.pp
message: "requires Exec[create_codec_dir]"
.. further down, mostly the same except ..
message: "subscribes to Service[logstash]"
-
Странность
Этот файл включен в большой каталог с десятками или сотнями других классов, но странно то, что если я включаю этот класс напрямую с помощью быстрого тестового манифеста (также с помощью puppet apply
), он работает как по волшебству. (Хотя мне пришлось удалить требование службы)
node default {
class { 'c2c::profile::app::logio::stage_support': }
}
.. и я получаю это в своем выводе ..
Notice: /File[logio_plugin_file]/ensure: defined content as '{md5}41d00952843b8159b95ce4fcd8015cda'
.. и это в last_run_report.yaml
..
File[logio_plugin_file]: !ruby/object:Puppet::Resource::Status
resource: File[logio_plugin_file]
file: /tmp/vagrant-puppet/modules-0/c2c/manifests/profile/app/logio/stage_support.pp
line: 40
evaluation_time: 0.023071
change_count: 1
out_of_sync_count: 1
...
-
Дополнительные баллы, информация и тесты
- Я только что добавил
Notify => Service['logstash']
, и это поведение наблюдалось до того, как я это сделал. - Ошибки не выдаются.
- Я добавил несколько
notify{}
звонков в свойstage_support
класс, чтобы убедиться, что он правильно включен в каталог, и это так. Exec['create_codec_dir']
создает мой каталог- Я попробовал изменить
path
параметр, чтобыlogio2.rb
увидеть, есть ли класс - Я попробовал require
File['logio_plugin_file']
из другого ресурса. Ресурс requirement запустился, но файл не был создан. - Обновлять:Я попробовал сократить вызов типа файла, включив только символы
title
«плюс»ensure
,path
иsource
«, но это не дало никакого эффекта. Обновлять:Я попробовал переименовать ресурс (например
logio_plugin_file_x
), но это не помогло.[root@dev ~]# puppet --version 3.2.3 [root@dev ~]# facter --version 1.7.2 [root@dev ~]# cat /etc/redhat-release CentOS release 6.4 (Final)
-
Важная заметка
Эта проблема возникла в конце реструктуризации кода, так что почти наверняка виновата она, но я не могу ее устранить.
Буду признателен за любую оказанную помощь!
решение1
Как и ожидалось, источник проблемы оказался простым, хотя я до сих пор не понимаю, почему Puppet не выдал ошибку по этому поводу:
профиль/logstash.pp:(в другом месте)
file { 'logstash_plugin_sub':
path => '/etc/logstash/plugins/logstash',
ensure => 'directory',
owner => 'root',
group => 'root',
mode => '0775',
require => [ File['logstash_plugin_sub'] ]
}
Обратите внимание на циклическую ссылку в требовании:File['logstash_plugin_sub'] -> File['logstash_plugin_sub']
Результирующее поведение очень странное, и я обнаружил проблему с помощью этого теста:
file { "logio_plugin_file_a":
path => '/etc/logstash/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
file { "logio_plugin_file_b":
path => '/etc/logstash/plugins/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
file { "logio_plugin_file_c":
path => '/etc/logstash/plugins/logstash/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
file { "logio_plugin_file_d":
path => '/etc/logstash/plugins/logstash/codecs/logio.rb',
source => 'puppet:///modules/c2c/logstash/logio_codec.rb',
}
Идея, в принципе, заключается в том, чтобы попытаться добавить мой файл все глубже и глубже в дереве. Эта идея пришла мне в голову в результате того, что я смог изменить path
в своем исходном примере и добиться успеха.
Итак, было создано следующее:
/etc/logstash/logio.rb
/etc/logstash/plugins/logio.rb
Но два более глубоких ресурса были пропущены, поэтому я знал, что моя проблема была сосредоточена вокруг /etc/logstash/plugins/logstash
. При внимательном рассмотрении я обнаружил циклическую ссылку.
Надеюсь, это кому-то поможет, и спасибо Шейну Мэддену за уделенное время.