Определить 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 = {}) {
  # ...
}
Другие вопросы по тегам