Назад | Перейти на главную страницу

марионеточные циклы для создания пользователей со значениями в необработанном файле

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

file { [ "user1", "user2", ... ]:
    ensure => directory,
    owner  => $user,
    group  => 'mail',
    mode   => 0660,
}

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

Я подумал определить функцию, но остались те же проблемы. Кто-нибудь нашел решение этой проблемы?

Определенный тип должен хорошо работать с проблемой owner.

define usermailbox {
  # creates dir /path/to/username:
  file { "/path/to/$title":
    ensure => directory,
    owner  => $title,
    group  => 'mail',
    mode   => 0660,
  }
}

Чтобы заполнить из внешнего источника, Hiera - хороший вариант - он интегрирован в Puppet после версии 3.0, но вам нужно будет установить его отдельно в вашей основной системе, если вы все еще используете 2.7. Если вы собираетесь его использовать, вы также можете рассмотреть возможность перехода на него как на более гибкий способ определения ваших узлов.

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

Итак, в вашем /etc/puppet/hiera.yaml (конфигурация того, как Hiera ищет данные), у вас будет что-то вроде этого:

:backends:
  - yaml

:hierarchy:
  - %{::clientcert}
  - common

:yaml:
   :datadir: '/etc/puppet/hieradata'

Для node.example.com, он будет искать файл /etc/puppet/hieradata/node.example.com.yaml (или common.yaml как более низкий приоритет, поэтому вы можете использовать его вместо этого, если хотите, чтобы этот список был доступен для каталогов нескольких серверов). Создайте этот файл, и мы передадим ему список пользователей в формате YAML:

mailbox_users:
  - user1
  - user2
  - user3

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

usermailbox { hiera(mailbox_users): }