Я пытаюсь настроить конфигурацию ведения журнала с путями журналов на основе проверки, существует ли этот файл журнала. Однако операторы if всегда возвращают истину, даже если я знаю, что /var/log/hermes/hermes.log не существует. Я тестировал exec {"service_log_check", только если он работает, так что это как-то связано с оператором if. Я думал добавить в каждый exec что-то вроде environment => ["FOO = true", а затем изменить оператор if на if $ FOO == true, но оказалось, что переменные, установленные в среде exec, доступны только внутри exec, а не целиком класс. Это сводит меня с ума!!! Мы используем марионетку v3.7
class hermes :: fluentd ($ service_name = 'hermes', $ logs = '/ var / log / test / test.log') {
exec {"service_log_check":
command => '/bin/true',
onlyif => '/usr/bin/test -e /var/log/hermes/hermes.log',
}
exec {"service_log_json_check":
command => '/bin/true',
onlyif => '/usr/bin/test -e /var/log/hermes/hermes-json.log',
}
exec {"request_log_check":
command => '/bin/true',
onlyif => '/usr/bin/test -e /var/log/hermes/request.log',
}
if service_log_check {
$service_logs = "/var/log/${service_name}/${service_name}.log"
}
else { $service_logs = []
}
if service_log_json_check {
$service_json_logs = "/var/log/${service_name}/${service_name}-json.log"
}
else { $service_json_logs = []
}
if request_log_check {
$service_request_logs = "/var/log/${service_name}/request.log"
}
else
{ $service_request_logs = []
}
$logs_to_tail = [$logs, $service_logs, $service_json_logs, $service_request_logs]
file { "/etc/td-agent/config.d/${service_name}_service_logs.conf":
ensure => present,
content => template('service_logs.conf.erb'),
owner => td-agent,
group => td-agent,
mode => '0775'
}
}
К сожалению, марионетка работает не так. Ресурсы Exec не могут устанавливать значения, на которые может ссылаться другой код в манифесте марионетки. Здесь есть несколько концепций, которые вам необходимо понять:
Если вам нужно получить информацию от узла, чтобы принять решение о том, какое у вас желаемое состояние (т.е. какие значения следует поместить в файл .conf), вам необходимо написать Custom Fact (см. https://docs.puppet.com/facter/3.7/custom_facts.html)