2017-01-10 3 views
0

Базовая структура мешка данных: /data_bags/[data bag name]/[data bag items]Как отделить элемент данных для разных узлов?

Пусть говорят, что я хочу создать пакет данных для всех возможных админ всех моих узлов в пакете данных под названием пользователей. т.е.

/data_bags/users/admin1.json 
/data_bags/users/admin2.json 
/data_bags/users/admin3.json 

Теперь node1 я только хочу иметь admin1 and admin3 и node2 Я хочу иметь admin2 и admin3 как мои админов.

Как я могу отделить или структурировать свою конфигурацию таким образом, чтобы я мог указать или разделить элемент данных для каждого другого узла?

Одна из моих идей - это то, что мы можем сделать что-то подобное.

/data_bags/node1/users/... 
/data_bags/node2/users/... 

Я стартер в шеф-повара, так что если я хочу, чтобы это глупо и должны быть обработаны другим способом, то я признателен за любую информацию, чтобы указать мне правильное направление.

+0

Какова главная цель после этого? Или сказать это по-другому: как вы будете использовать эти пользовательские данные? это похоже на XY-проблему управления RBAC больше, чем на структуру. Вы все равно можете иметь атрибут на каждом узле, сообщающий администраторам, которые вы хотите для каждого узла, и получить этот_файл_ data_bag. – Tensibai

ответ

1

Вы либо должны группироваться пользователем, либо хозяином. Мы имеем следующую структуру данных мешка (более docs):

{ 
    "id": "a-srv123-admin", 
    ... 
    "nodes": { 
      "srv123.example.org": { 
        "sudo": "true" 
      } 
    } 
} 

Далее узлы могут быть добавлены к node хэшу. Соответствующий recipe затем ищет мешок элементы данных соответствия его собственным node['fqdn']:

users = search('users', "nodes:#{node['fqdn']}") 

Конечно, если это более важно для вас, чтобы он сгруппированных узлом, просто сделать это наоборот и просто выбрать данные сумка, соответствующая fqdn или аналогичный атрибут.

+0

Итак, узел нужно разделить внутри самого элемента? Вызывает разочарование. Спасибо за Ваш ответ. – Starx

+0

Это всего лишь код и данные. Вы можете делать, как вам нравится. Вы можете иметь элементы пакета данных для каждого узла, для каждого пользователя или (для каждого пользователя на узел, например, 'srv123-johndoe.json', который содержит только некоторое значение' true'). OTOH, вы можете поместить всю эту информацию в единый элемент мешка. Я только иллюстрировал то, что работает для нас ™ при несколько низкой сложности. – StephenKing

+0

Хм, Но тогда мне, вероятно, придется использовать считыватель файлов для поиска подходящих элементов пакета данных. Имея решение [this] (http://stackoverflow.com/questions/41568041/how-to-specify-a-data-bag-path-in-knife-rb-configuration-file), было бы лучше подумать, что я думаю, но, к сожалению, не нашли. – Starx

1

Община users cookbook поддерживает эту функцию. На каждом сервере вы указываете группу пользователей, которую хотите управлять, и кулинарная книга будет искать элементы базы данных для сопоставления членов группы.

Для примера, взгляните на этот ответ:


Update

"пользователи" кулинарной имеет LWRP, который определяет, какую группу пользователей должен быть установлен на сервере.

users_manage "admins1" 

В пакете данных вы указываете группы, в которые пользователь входит. Так, например, «user1» будет включен в серверы, которым требуется группа admins1 или admins2.

{ 
    "id": "user1", 
    "ssh_keys": [ 
    "ssh-rsa I AM A DUMMY KEY 1" 
    ], 
    "groups": [ 
    "admins1", 
    "admins2" 
    ], 
    "uid": 2001 
} 

Вы могли бы создать группу, специфичную для каждого сервера, но это не будет масштабироваться ужасно хорошо. Лично я бы предложил имена групп на основе ролей пользователей.

  • админы
  • DevOps
  • разработчики
  • за развертывание
+0

Я использую эту кулинарию, я хочу контролировать, какой пользователь создан на каком узле. – Starx

+0

@Starx Я обновил свой ответ. В приведенной выше ссылке есть рабочий пример (тестовый кухонный проект) –

+0

Итак, если сервер имеет эту группу, и только тогда пользователи будут созданы? – Starx