[Chef]: Создание пользователей в системе

Потребовалось однажды засетапить сервер и возникла необходимость создания пользователя.

Пусть это будет пользователь poweruser, sudo ему пока не нужно, разве что для runit'а чуть попозже добавим. На выбор встали 3 кукбука:

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

Поясню: есть пользователь poweruser, это пользователь системы на прод сервере, и есть некоторая команда разработчиков: Вася(vasya), Ваня(ivan), Петя(petya). Удобно организовать это следующим образом:

app_path/
  data_bags/
    users/
     ivan.json
     vasya.json
     petya.json
     poweruser.json

У разработчиков хэш выглядит примерно так:

{
  "id" : "ivan",
  "ssh_keys" : "ssh-rsa .... mail@mail.com"
}

У основного нашего пользователя системы:

{
  "id" : "poweruser",
  "password" : "some_really_secure_password"
}

Теперь когда мы захотим засетапить очередную ноду, то нужно будет переопределить массив users например в роли:

name "my_super_role"
description "my really super role"

run_list [
  ...
  "recipe[users]"
]

default_attributes(
  :users => [ 
    "poweruser" => [
      "ivan",
      "vasya"
    ]
  ]
)

Получается что мы доверяем заходить под пользователем poweruser нашим 2м разработчиком и что-то творить там, собирать логи, прокручивать руками какие-то таски и т.д., а вот третьему нет никакого доверия, так что его ключи не будем закидывать.

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

Третий кукбук от небезызвестного товарища fnichol, который написал кучу кукбуков. Именно на нем я и остановил свой выбор. Скорее всего это просто личные предпочтения. Тут все также очень просто, создаем пользователя в папке data_bags, туда в массив ssh_keys помещаем нужные нам ключики и "готовим" с помощью knife solo. В файле с ролью просто определяем массив пользователей, которых мы хотим создать.

default_attributes(
  'users' => ['poweruser']
)
knife solo cook root@x.x.x.x nodes/some_project_node.json

Вот и все, теперь на тачке есть пользователь poweruser.