从openstack/puppet-keystone通过hiera定义keystone_user



我正在使用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,并提供参数在我的层次数据,像这样:

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()文档中所述:作为将资源标题(在您的情况下是用户名)映射到资源参数的内部哈希值的哈希值。

例如,您的类可能看起来像这样:

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 = {}) {
  # ...
}

相关内容

  • 没有找到相关文章

最新更新