Provisioning Windows Server 2016 with Vagrant, VirtualBox and Chef

ОСНОВНЫЕ ПЛАНЫ / ИНСТРУМЕНТЫ:

Мы собираемся использовать провайдера Vagrant Chef Solo и Chef Cookbook для настройки нашей Vagrant VM — сервера хранения данных исползуя base box -а gusztavvargadr/w16s-sql17d .

Хост:
Windows 10 Pro => Базовая ОС хоста (вы можете использовать Windows Server 2016
VirtualBox => Настройка платформы VM  (Отключите платформы виртуализации, отличные от VirtualBox. В Windows отключите Hyper-V, если он запущен.) Для настройки Hyper-V платформы Vagrant в Windows 10 с Hyper-V.

Оркестровка и настройка:
Vagrant => Устанавливает debian9 Linux ‘VM’ (виртуальная машина)
следующие плагины: Berkshelf, Host Manager, Reload

Chef Development Kit

Создание Chef Cookbook

Cookbooks являются основным элементом конфигурации в экосистеме Chef. Их можно рассматривать как похожие на пакеты программного обеспечения, они представляют собой автономную структуру, содержащую код, свойства, ссылки на зависимости, шаблоны, тестовый код и т.д. с целью применения какой-либо конфигурации или политики к машине под управлением Chef-а. В данном случае «код» написан на Ruby.

Не переживаете , если вы не очень хорошо знаете Ruby, DSL имеет очень последовательную грамматику. Файл Vagrantfile, используемый Vagrant, также написан на Ruby.

Чтобы создать новую Cookbook :

Создайте новый каталог названием cookbooks в каталоге Vagrant. Это местоположение по умолчанию для Cookbooks Chef -а в Вагранте.

# Make a new directory called 'cookbooks' in Vagrant directory. This is the default
# location for Chef cookbooks in Vagrant.
Set-Location -Path D:\Vagrant
New-Item -Name cookbooks -ItemType Directory
Set-Location -Path .\cookbooks\
# chef generate cookbook {name}
chef generate cookbook windows_file_server

Вы увидите вывод:

PS D:\Vagrant\cookbooks> chef generate cookbook windows_file_server
Generating cookbook windows_file_server
- Ensuring correct cookbook file content
- Committing cookbook files to git
- Ensuring delivery configuration
- Ensuring correct delivery build cookbook content
- Adding delivery configuration to feature branch
- Adding build cookbook to feature branch
- Merging delivery content feature branch to master

Your cookbook is ready. Type `cd windows_file_server` to enter it.

There are several commands you can run to get started locally developing and testing your cookbook.
Type `delivery local --help` to see a full list.

Why not start by writing a test? Tests for the default recipe are stored at:

test/integration/default/default_test.rb

If you'd prefer to dive right in, the default recipe can be found at:

recipes/default.rb

У нас есть новый каталог в нашей папке cookbooks под названием windows_file_server. Давайте посмотрим на структуру.

  •  .kitchen.yml — Вся конфигурация Test Kitchen описывается одним файлом .kitchen.yml. Этот файл у нас уже есть, он был сгенерирован утилитой chef.
  • Berksfile — Berkshelf — менеджер зависимостей для cookbooks , а Berksfile — это место, где живет его конфигурация. Berksfile по умолчанию содержит чуть больше, чем ссылка на https://supermarket.chef.io, который является общедоступным хранилищем Chef cookbooks . Berkshelf будет использовать эту и любую другую добавленную вами конфигурацию, чтобы разрешить любые зависимости, имеющиеся у вас в других кулинарных книгах. метаданные — это ссылка на файл метаданных поваренной книги.
  • metadata.rb — Где хранятся метаданные cookbooks. В основном мы будем использовать его для объявления зависимостей, которыми должен управлять Berkshelf.
  • .delivery \ * — в этом каталоге содержатся артефакты для настройки непрерывной доставки поваренной книги с помощью Chef Automate.
  • recipes \ default.rb — рецепт по умолчанию для cookbooks. Разница между рецептом и кулинарной книгой заключается в том, что рецепт является просто единицей DSL Chef, а кулинарная книга — это один или несколько рецептов с известной структурой, атрибутами, шаблонами, зависимостями и т. д. когда кулинарная книга запускается без определения области действия, используется рецепт по умолчанию.
  • spec \ * — ChefSpec — это среда тестирования BDD (поведенческая разработка) для Chef книг. Это расширение RSpec, де-факто BDD-инфраструктуры Ruby. Этот каталог содержит пример теста ChefSpec.
  • test \ * — InSpec — это инфраструктура для тестирования соответствия и аудита узлов, управляемых Chef, во время выполнения. Этот каталог содержит пример теста InSpec для рецепта по умолчанию.

Test Kitchen, Chef Automate, ChefSpec и InSpec выходят за рамки этого сообщения.

Написание рецепта

Давайте создадим рецепт, который превратит нашу Vagrant VM в файловый сервер. Откройте recipes \ default.rb в вашем любимом текстовом редакторе и отредактируйте его так, чтобы он соответствовал следующему рецепту:

#
# Cookbook:: windows_file_server
# Recipe:: default
#
# Copyright:: 2019, The Authors, All Rights Reserved.
  windows_feature 'File-Services' do
    action :install
    all true
    install_method :windows_feature_powershell
  end
   
  directory 'C:\SmbShare' do
    action :create
  end
   
  windows_share 'SmbShare' do
    action :create
    path 'C:\SmbShare'
    full_users ['everyone']
    #full_users ["DOMAIN_A\\some_user", "DOMAIN_B\\some_other_user"]
    #read_users ["DOMAIN_C\\Domain users"]
  end

Это наш первый взгляд на рецепт, поэтому давайте поговорим об основах. Каждый из трех блоков кода конфигурации здесь является ссылкой на ресурс Chef. Каждый из них представляет политику, которая описывает желаемое состояние чего-либо, находящегося под контролем этого ресурса. Используемые типы ресурсов: windows_feature, directory и windows_share. Давайте разберемся с ними один за другим.

Тип ресурса windows_feature предсказуемо сопоставляется с функциями Windows, т. е. с пакетами, которые можно установить с помощью Install-WindowsFeature в PowerShell. File-Services — это имя ресурса (функция Windows), который мы хотим настроить, установка его на наш экземпляр Windows Server, что и является целью этого упражнения.

Внутри блока do у нас есть Actions и Properties. Каждое использование ресурса может принимать одно действие, обычно это глаголы и представляют собой операцию, которую вы хотите выполнить над ресурсом. Здесь мы хотим убедиться, что функция File-Services установлена, поэтому наше действие: установить. Свойство all объявляет, хотим ли мы установить какие-либо зависимости функции или нет. Свойство install_method позволяет нам выбрать метод установки компонента, поскольку в Windows существует более одного способа установки компонента. Мы установили это в PowerShell, указав: windows_feature_powershell.

В каждом из этих блоков всегда есть только один тип ресурса, имя и действие (действие по умолчанию используется, если действие отсутствует), все остальное является свойством или значением. Каждый ресурс имеет страницу документации, которая содержит полную ссылку на действия, свойства и значения, которые вы можете использовать. windows_feature и windows_share являются частью Windows Cookbook, вы можете найти страницу документации здесь.

Ресурс каталога (directory ) встроен в Chef и полностью документирован здесь. Ресурс, который настраивает этот блок, является каталогом по пути C: \ SmbShare, и действие: create — поэтому мы хотим убедиться, что он существует.

Наконец, ресурс windows_share превращает наш каталог в общий ресурс CIFS / SMB.

Зависимости

Ресурсы windows_feature и windows_share взяты из книги Windows Cookbook, которая не входит в комплект ChefDK. Это не проблема, нам просто нужно объявить это как зависимость. Откройте metadata.rb и добавьте следующую строку:

depends 'windows'

Откуда Chef узнает, где можно найти книгу Windows Cookbook? Помните, что Berkshelf является менеджером зависимостей для Cookbook, и в нашем Berksfile уже есть ссылка на общедоступный репозиторий Chef Supermarket. Berkshelf разрешит наши зависимости тем, что можно найти в супермаркете Chef или в любых других репозиториях, которые мы объявили в нашем Berksfile.

Теперь нам нужно наши зависимости упаковать все так, чтобы их можно было использовать у поставщика Vagrant Chef Solo. Это так же просто, надо убедиться что они доступны в известном подкаталоге каталога Vagrant. Чтобы сделать это, мы собираемся использовать команду поставщика Berkshelf для упаковки всего.

Создайте папку проекта, я использовал D:\Vagrant\ StorageServer . Открыть PowerShell с правами администратора и смените каталоги в папку тестового проекта StorageServer. Запустите vagrant init и будет создан новый файл в текущем каталоге под названием «Vagrantfile» (без расширения), который содержит базовую конфигурацию.

PS D:\Vagrant> cd C:\Vagrant\StorageServer
PS D:\Vagrant\StorageServer> vagrant init gusztavvargadr/w16s-sql17d

Предполагая, что текущим рабочим каталогом является каталог «windows_file_server», это позволит упаковать «windows_file_server» и «windows» в новый подкаталог «vendor» в вашем каталоге StorageServer :

PS D:\Vagrant\cookbooks\windows_file_server> berks vendor ..\..\StorageServer\vendor
Resolving cookbook dependencies...
Fetching 'windows_file_server' from source at .
Using windows (5.2.3)
Using windows_file_server (0.1.0) from source at .
Vendoring windows (5.2.3) to ..\..\StorageServer\vendor/windows
Vendoring windows_file_server (0.1.0) to ..\..\StorageServer\vendor/windows_file_server

Chef Solo provisioner

Теперь давайте отредактируем наш Vagrantfile для настройки провайдера Chef Solo. Откройте Vagrantfile в текстовом редакторе и добавьте следующее:

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "gusztavvargadr/w16s-sql17d"

  config.vm.hostname = "StorageServer"
  # config.vm.network "forwarded_port", guest: 80, host: 8080
  config.vm.network "private_network", ip: "192.168.33.159"

  config.vm.network "public_network", ip: "192.168.0.159"
  #config.vm.synced_folder ".", "/home/vagrant/mySyncFolder"
  
  config.vm.provider "virtualbox" do |v|
    v.name = "StorageServer"
    v.memory = 2048
    v.cpus = 4
  end

  config.vm.provision "chef_solo" do |chef|
    chef.add_recipe "windows_file_server"
    chef.cookbooks_path = "vendor"
  end
end

Chef Solo преобразовал образ Windows Server 2016 в файловый сервер за 57 секунды. Это довольно хорошо!

Дополнительную информацию вы можете найти по следующим ссылкам:

Provisioning Windows Server 2016 with Vagrant, Hyper-V and Chef

Vagrant в Windows 10 с VirtualBox

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *