Определить keystone_user из openstack/puppet-keystone через hiera?
Я использую https://github.com/openstack/puppet-keystone для настройки узла управления / контроллера OpenStack. Мне нужно добавить пользователя 'glance' в keystone. Я хочу попытаться сделать как можно больше в моих данных иера, чтобы мой манифест был простым.
Вот мой манифест:
class kilo2_keystone {
include controller_ceph
include keystone
include keystone::config
include keystone::user
# keystone_user { 'glance':
# ensure => present,
# }
}
Закомментированный раздел работает, но я хочу быть в состоянии сделать include keystone::user
и предоставить параметры в моих данных hiera так:
keystone::user:
"%{hiera('glance_admin_user')}":
ensure: present
Но когда я бегу puppet agent -t
на моем узле я получаю эту ошибку:
Could not find class ::keystone::user
1 ответ
Закомментированный код объявляет ресурс типа keystone_user
не класс. Предположительно, его тип, keystone_user
, предоставляется модулем puppet-keystone. include()
Семейство функций предназначено для объявления классов, а не ресурсов, поэтому они неприменимы к keystone_user
,
Есть несколько способов, которыми вы могли бы продолжить. Если вы не ожидаете, что хотите что-то более сложное, чем объявление одного или нескольких keystone_user
Если есть, то я бы порекомендовал дать вашему классу параметр для имен пользователей, которому вы можете присвоить значение через Hiera:
class kilo2_keystone($usernames = []) {
include controller_ceph
include keystone
include keystone::config
keystone_user { $usernames:
ensure => present,
}
}
С другой стороны, если вы хотите иметь возможность объявлять нескольких пользователей, каждый со своим набором атрибутов, то create_resources()
функция, вероятно, путь наименьшего сопротивления. Вы все еще хотите параметризовать свой класс так, чтобы он получал данные от Hiera через автоматическое связывание данных, но теперь вы хотите, чтобы данные были структурированы по-другому, как описано в create_resources()
Документы: в качестве хэша, отображающего заголовки ресурсов (имена пользователей, в вашем случае) на внутренние хэши параметров ресурсов и соответствующие значения.
Например, ваш класс может выглядеть так:
class kilo2_keystone($userdata = {}) {
include controller_ceph
include keystone
include keystone::config
create_resources('keystone_user', $userdata)
}
Соответствующие данные для этого класса могут выглядеть так:
kilo2_keystone::userdata:
glance:
ensure: present
enabled: true
another_user:
ensure: absent
Также обратите внимание, что вы помещаете свой класс kilo2_keystone в верхнюю область видимости. Вы действительно должны поместить его в модуль и назначить его пространству имен этого модуля. Последний будет выглядеть так:
class mymodule::kilo2_keystone($userdata = {}) {
# ...
}