通过 hiera 从 openstack/puppet-keystone 定义 keystone_user?
define keystone_user from openstack/puppet-keystone via hiera?
我正在使用 https://github.com/openstack/puppet-keystone 设置 OpenStack management/controller 节点。我需要将 'glance' 用户添加到 keystone。我想在我的 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
commented-out 代码声明了类型为 keystone_user
的 资源 ,而不是 class。据推测,它的类型 keystone_user
是由 puppet-keystone 模块提供的。 include()
系列函数用于声明 classes,而不是资源,因此它们不适用于 keystone_user
.
有不止一种方法可以继续。如果您不希望做比声明一个或多个 keystone_user
存在更复杂的事情,那么我建议为您的 class 提供一个用户名参数,您可以通过 Hiera 赋值:
class kilo2_keystone($usernames = []) {
include controller_ceph
include keystone
include keystone::config
keystone_user { $usernames:
ensure => present,
}
}
另一方面,如果您希望能够声明多个用户,每个用户都有自己的一组属性,那么 create_resources()
函数可能是阻力最小的路径。您仍然希望参数化 class 以便它通过自动数据绑定从 Hiera 获取数据,但现在您希望数据的结构不同,如 create_resources()
文档中所述:作为哈希映射资源标题(用户名,在您的情况下)到资源参数的内部哈希到相应的值。
例如,您的 class 可能如下所示:
class kilo2_keystone($userdata = {}) {
include controller_ceph
include keystone
include keystone::config
create_resources('keystone_user', $userdata)
}
此 class 的相应数据可能如下所示:
kilo2_keystone::userdata:
glance:
ensure: present
enabled: true
another_user:
ensure: absent
另请注意,您将 kilo2_keystone class 置于顶部范围。你真的应该把它放在一个模块中并将它分配给该模块的名称空间。后者看起来像这样:
class mymodule::kilo2_keystone($userdata = {}) {
# ...
}
我正在使用 https://github.com/openstack/puppet-keystone 设置 OpenStack management/controller 节点。我需要将 'glance' 用户添加到 keystone。我想在我的 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
commented-out 代码声明了类型为 keystone_user
的 资源 ,而不是 class。据推测,它的类型 keystone_user
是由 puppet-keystone 模块提供的。 include()
系列函数用于声明 classes,而不是资源,因此它们不适用于 keystone_user
.
有不止一种方法可以继续。如果您不希望做比声明一个或多个 keystone_user
存在更复杂的事情,那么我建议为您的 class 提供一个用户名参数,您可以通过 Hiera 赋值:
class kilo2_keystone($usernames = []) {
include controller_ceph
include keystone
include keystone::config
keystone_user { $usernames:
ensure => present,
}
}
另一方面,如果您希望能够声明多个用户,每个用户都有自己的一组属性,那么 create_resources()
函数可能是阻力最小的路径。您仍然希望参数化 class 以便它通过自动数据绑定从 Hiera 获取数据,但现在您希望数据的结构不同,如 create_resources()
文档中所述:作为哈希映射资源标题(用户名,在您的情况下)到资源参数的内部哈希到相应的值。
例如,您的 class 可能如下所示:
class kilo2_keystone($userdata = {}) {
include controller_ceph
include keystone
include keystone::config
create_resources('keystone_user', $userdata)
}
此 class 的相应数据可能如下所示:
kilo2_keystone::userdata:
glance:
ensure: present
enabled: true
another_user:
ensure: absent
另请注意,您将 kilo2_keystone class 置于顶部范围。你真的应该把它放在一个模块中并将它分配给该模块的名称空间。后者看起来像这样:
class mymodule::kilo2_keystone($userdata = {}) {
# ...
}