У меня возникла проблема при переносе кода марионетки с марионетки 3 на марионетку 6.
Это сообщение об ошибке:
Error: Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Evaluation Error: Error while evaluating a Function Call, Failed to parse template puppetserver/var/test.sh.erb:
Filepath: /opt/puppetlabs/environments/production/modules/puppetserver/templates/var/test.sh.erb
Line: 21
Detail: undefined method `join' for nil:NilClass
Did you mean? JSON
(file: /opt/puppetlabs/environments/production/modules/puppetserver/manifests/config.pp, line: 38, column: 16) on node test.domain
/opt/puppetlabs/environments/production/modules/puppetserver/templates/var/test.sh.erb:
...
for environment in <%= @pup_environments_array.join(' ') %>; do
this that
...
В моем hieradata JSON:
//test.domain
{
"puppetserver::working::environments": {
"production": {
"ensure": "present",
},
"staging": {
"ensure": "present"
}
}
}
В /opt/puppetlabs/environments/production/modules/puppetserver/manifests/config.pp:
class puppetserver::config {
file {'/var/test.sh.erb':
ensure => file,
owner => 'puppet',
group => 'puppet',
content => template('puppetserver/var/test.sh.erb'),
}
}
В /opt/puppetlabs/environments/production/modules/puppetserver/manifests/init.pp:
class puppetserver (
) inherits puppetserver:params {
$pup_environments= hiera_hash('puppetserver::working::environments',{})
$pup_environments_array = keys($pup_environments)
include puppetserver::config
}
Этот код работает нормально на марионетке 3, но не на марионетке 6. Кто-нибудь, пожалуйста, дайте мне знать причину и как ее исправить?
Спасибо
ХОРОШО. Я сам получил ответ.
Код:
file {'/var/test.sh.erb':
ensure => file,
owner => 'puppet',
group => 'puppet',
content => template('puppetserver/var/test.sh.erb'),
}
должен быть на /opt/puppetlabs/environments/production/modules/puppetserver/manifests/init.pp, а не в /opt/puppetlabs/environments/production/modules/puppetserver/manifests/config.pp
В марионетке 3 я не разделял многих манифестов.