Статьи

Chef Happens — Управление Solaris с помощью Chef

Добавление серверов Solaris, которыми будет управлять Chef, было самой раздражающей записью в нашем журнале Wix.com DevOps почти год. Мы перенесли наши базы данных MySQL в Solaris более года назад. Мы автоматизируем все, но попадание Solaris на кухню шеф-повара было не таким уж и тривиальным. Поддержка Solaris в Chef минимальна, поэтому я сделал несколько дополнений для Chef, которые другие счастливые мастера Solaris Chef могут найти полезными.

Моя первая проблема при настройке Chef на Solaris заключалась в том, что для Solaris 5.10 x86 не существует универсального установщика.

К сожалению, от простой установки Solaris до той, которая может установить гем chef, требуется немало работы. Итак, я написал файл начальной загрузки, который работает для вас.

Этот файл начальной загрузки делает следующее:

  • Добавляет / opt / csw / lib и / usr / local / lib в путь к библиотеке (через crle).
  • Устанавливает pkgutil из OpenCSW.
  • Устанавливает libgcc_s1, coreutils, libssl1_0_0, wget, gsed, binutils и gmake через pkgutil.
  • Устанавливает ruby ​​с http://www.sunfreeware.com/ ( ruby из OpenCSW работает неправильно ).
  • Переименуйте некоторые файлы, чтобы ruby ​​мог создавать новые драгоценные камни.
  • Устанавливает драгоценности ohai и chef.
  • Добавляет патч для добавления пользователей в группы (см. CHEF-3245 ).
  • Создает исходные файлы Chef.

Вы можете получить этот файл начальной загрузки с GitHub .

Как только вы загрузите этот файл, поместите его в .chef / bootstrap / solaris.erb в корне вашего хранилища Chef. Если вы единственный пользователь, которому это нужно, вы можете поместить его в свой домашний каталог.

Если у вас есть файл начальной загрузки (или если вы используете другой файл начальной загрузки), вы можете установить Chef.

Установка Chef на Solaris:

  • Войдите в систему, на которую хотите установить Chef.
  • Установите имя хоста.
  • Включить root-вход через SSH. (Установите PermitRootLogin yes в / etc / ssh / sshd_config)
  • svcadm перезапустить ssh
  • Перейдите в корень репозитория Chef Git
  • нож бутстрап -d солярис
  • войдите в систему как root и запустите: chef-client

Использование пакетов OpenCSW:

Моя следующая проблема состояла в том, что я хочу иметь возможность устанавливать пакеты OpenCSW от Chef. Я написал LWRP для pkgutil и загрузил его на сайт поваренной книги сообщества Opscode . Вы можете установить это в свой репозиторий Chef, выполнив «Установка сайта с готовой книгой ножей pkgutil». Сделав это, вы можете начать использовать пакеты OpenCSW в своих кулинарных книгах.

В поваренную книгу с ресурсами pkgutil_package добавьте зависимость от поваренной книги pkgutil в свой файл metadata.rb, например так:

1
depends 'pkgutil'

Затем используйте ресурсы следующим образом:

1
pkgutil_package 'vim'

Или же:

01
02
03
04
05
06
07
08
09
10
11
pkgutil_package 'vim' do
 action :install
end
 
pkgutil_package 'top' do
 action :upgrade
end
 
pkgutil_package 'less' do
 action :remove
end

Использование zpools, zfs и зон:

Следующей задачей было управление zpools , файловыми системами zfs и зонами через Chef. Для этого я также написал для них LWRP, которые вы можете установить так же, как и для pkgutil.

Чтобы использовать эти ресурсы, в поваренную книгу, в которой есть эти ресурсы, добавьте зависимость от соответствующей поваренной книги в свой файл metadata.rb, например так:

1
2
depends 'zpool'
depends 'zfs'

Или же:

1
depends 'zone'

Затем в глобальной зоне включите рецепт, подобный этому:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
zpool 'zones' do
  disks [ 'c0t2d0s0' ]
end
 
zfs 'zones/test'
 
directory '/zones/test' do
  mode '0700'
end
 
zone 'test' do
  path '/zones/test'
  limitpriv 'default,dtrace_proc,dtrace_user'
  password 'whbFxl4vH5guE'
  nets [ '192.168.0.9/24:e1000g0' ]
end

Собираем все вместе:

Моей последней задачей было объединить все это в один шаг для создания новых зон. Это было сделано для того, чтобы облегчить переход в Chef для наших администраторов Solaris, которые привыкли создавать новые зоны с помощью нескольких сценариев оболочки. Вы можете получить этот скрипт на GitHub .

Для запуска скрипта требуется ruby ​​1.9, а также гемы chef, git и net / ssh. Chef должен быть установлен в глобальной зоне, а zpool для зоны уже должен быть создан. Настоятельно рекомендуется настроить DNS для новой зоны перед началом!

Чтобы увидеть все параметры, запустите скрипт с ключом -h:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
shell$ create_zone.rb -h
Usage: ./create_zone.rb (options)
    -d, --debug                      Turn on debugging messages
    -t, --git                        Add/commit/push new recipes to git
    -g, --global GLOBAL              The FQDN of the server to create the zone on (required)
    -c, --config KNIFE_CONFIG        Knife configuration file (defaults to ~/.chef/knife.rb)
    -n, --net NET                    Network information for the new zone, in the form: ipaddress[/cidr]:interface (required)
    -r, --run_list RUN_LIST          Specify the run_list for the new zone
    -s, --password SSH_PASSWORD      SSH password to use (required)
    -P, --port SSH_PORT              SSH port to use (defaults to 22)
    -z, --zone ZONE                  The hostname of the new zone (required)
    -p, --zpool ZPOOL                Name of the zpool to use (defaults to rpool)
    -h, --help                       Show this message</pre>
# Here is an example of how to create a new zone named test on the host global.example.com and install mysql in the new zone:
shell$ create_zone.rb -n 192.168.0.9/24:e1000g0 -z test -g global.example.com -s testpw -p zones -r 'recipe[mysql::server]'

Скрипт будет:

  • Сгенерируйте рецепты для создания файловых систем zfs и зоны.
  • Если указано -t, добавьте, передайте и отправьте новые рецепты в git.
  • Загрузите кулинарную книгу на сервер Chef (используя конфигурацию knife.rb, указанную с -c).
  • Добавьте новый рецепт в глобальный хост.
  • Запустите Chef на глобальном хосте, создав новые зоны и зоны.
  • Нож загружает новую зону с начальным run_list, заданным параметром -r.

Вы можете взять этот скрипт и изменить его для своей среды (возможно, вы захотите изменить шаблон для сгенерированного рецепта), но, надеюсь, вы найдете его полезным!

Ссылка: Chef Happens — Управление Solaris с Chef от нашего партнера по JCG Йоава Абрахами в блоге Wix IO .