Иерархия кукол и Иера и имена классов
Переменная поиска 'call_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
Похоже, что когда класс наследуется (или включается, происходит так же, как и в любом другом случае), то для 'Call_Class' в Hiera устанавливается наследуемый класс, а не класс, выполняющий наследование. Я что-то упустил, или это способ, которым Hiera должен работать? Я думал, что наследование класса установит scope.source.name
в дочерний класс, а не родительский.
1 ответ
Вы также можете использовать это решение. Единственным недостатком является то, что максимальное количество ролей жестко закодировано. Это будет лучше с hiera 3 до тех пор, пока попробуйте это:
/etc/puppet/hiera.yaml
---
:backends:
- yaml
:yaml:
:datadir: /etc/puppet/hieradata
:hierarchy:
- 'nodes/%{::clientcert}'
- 'roles/%{::role_4}'
- 'roles/%{::role_3}'
- 'roles/%{::role_2}'
- 'roles/%{::role_1}'
- common
/etc/puppet/manifests/site.pp
# Get roles
$roles = hiera_array('roles', [])
# Declare Roles in vars (not needed in puppet 4)
$role_1 = $roles[0]
$role_2 = $roles[1]
$role_3 = $roles[2]
$role_4 = $roles[3]
# Include Classes
hiera_include('classes')
/etc/puppet/hieradata/roles/webserver.yaml
---
classes:
- nginx
# put nginx config here
/etc/puppet/hieradata/nodes/your_node_name.yaml
---
roles:
- webserver
classes:
# put node specific stuff here