繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM