2016-08-08 3 views
0

Я использую https://github.com/openstack/puppet-keystone для настройки узла управления/контроллера OpenStack. Мне нужно добавить пользователя «glance» к трапеции. Я хочу попробовать и сделать все, что в моих данных hiera, чтобы мой манифест был простым.определить keystone_user из openstack/puppet-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 
+1

В этом модуле нет класса пользователя, так что вы пытаетесь сделать с помощью 'include keystone :: user'? Кроме того, если вы определяете ресурс в hiera, подобный этому, то вы хотите использовать что-то вроде 'create_resources' в поиске. Вы используете Hiera <= 3 или Поставщик данных кукол/Hiera4? –

ответ

1

Код с комментариями объявляет ресурс типа keystone_user, а не класс. Предположительно его тип, keystone_user, предоставляется модулем марионеточного трапеции. Семейство функций include() предназначено для объявления классов, а не ресурсов, поэтому они неприменимы к keystone_user.

Существует несколько способов, которыми вы могли бы продолжить. Если вы не ожидаете чего-то более сложного, чем объявление одного или нескольких keystone_user s, я бы рекомендовал дать вашему классу параметр для имени пользователя, которому вы можете присвоить значение через 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 = {}) { 
    # ... 
} 
+0

Также вы не можете сделать поиск hiera внутри hieradata, что является чем-то еще в примере в вопросе. –

+1

@MattSchuchard, вы * можете * сделать поиск hiera внутри hiera данных; см. https://docs.puppet.com/hiera/3.2/variables.html#using-lookup-functions. Ссылка предназначена для документов Hiera 3.2, но эта функция документирована вплоть до Hiera 1. –

+0

Это действительно похоже на то, что не должно быть возможным, и поэтому я не видел его до сих пор. Интересно. –

Смежные вопросы