Переменная поиска calling_class в Hiera вызывает у меня головную боль.
Учитывая такую конфигурацию hiera:
---
:backends: yaml
:yaml:
:datadir:
:hierarchy:
- "node/%{::clientcert}"
- "profile/%{calling_class}"
- "roles/%{calling_class}"
- common
:logger: console
И role.pp в Puppet со следующим:
class role::base {
notify { "output scope 1":
message => inline_template("scope='<%= scope.source.name %>'"),
}
$profiles = hiera_array('role::profiles', [])
notify { "Including profiles: ${profiles}": }
# include $profiles
}
class role::app inherits role::base{
notify { "output scope 2":
message => inline_template("scope='<%= scope.source.name %>'"),
}
$profiles = hiera_array('role::profiles', [])
notify { "Including profiles: ${profiles}": }
}
И roles/role::app.yaml
со следующим:
---
role::profiles:
- webserver
- application
Я ожидал увидеть что-то вроде этого:
Notice: Including profiles: webapp
Notice: scope='role::app'
Notice: Including profiles: webapp
Notice: scope='role::app'
Notice: Finished catalog run in 0.11 seconds
Но вот что я получаю:
Notice: Including profiles:
Notice: scope='role::base'
Notice: Including profiles: webapp
Notice: scope='role::app'
Notice: Finished catalog run in 0.11 seconds
Кажется, что когда класс наследуется (или включается, происходит то же самое в любом случае), этот 'calling_class' в Hiera устанавливается на унаследованный класс, а не на класс, выполняющий наследование. Я что-то упустил, или Hiera так и должна работать? Я думал, что наследование класса установит scope.source.name
в дочерний класс, а не в родительский.
$calling_class
для чего-либо, что не является просто забавой для глаз. - person Felix Frank   schedule 22.10.2014