[英]define keystone_user from openstack/puppet-keystone via hiera?
我正在使用https://github.com/openstack/puppet-keystone来设置OpenStack管理/控制器节点。 我需要将“浏览”用户添加到梯形失真校正中。 我想尽我所能,在Hiera数据中尽我所能,以便清单很简单。
这是我的清单:
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
注释掉的代码声明一个类型为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()
docs中所述:作为哈希映射资源标题(用户名,您的情况)将资源参数的内部哈希值转换为相应的值。
例如,您的班级可能看起来像这样:
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
还要注意,您将您的kg2_keystone类放置在顶部范围中。 您确实应该将其放在模块中,并将其分配给该模块的名称空间。 后者看起来像这样:
class mymodule::kilo2_keystone($userdata = {}) {
# ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.