箱がVagrantに追加された後、車(または複数)を持ち上げて箱からすばやく「復活」させることができます。 それに関するすべてのメタデータは、ハードディスクイメージの隣の1つのディレクトリに保存されます。 この簡単な手順を見ていきましょう。
- 任意の名前のフォルダーが目的のドライブに作成されます。 私は、より良い注文のために車の名前でそれらを呼ぶことを好みます。
- Powershellまたはコマンドラインを使用して、このディレクトリ内に移動します。
- フォルダーを初期化するには、vagrant initコマンドを実行します。
vagrant init Win2012R2x64
パラメーターは、ここで展開するボックスの名前を示します。 原則として、後からいつでも修正できます。 コマンドを実行すると、Vagrantfileという名前の複雑でない名前のディレクトリにファイルが作成されます。このファイルでは、Ruby言語がマシンの最小パラメーター(プロバイダー(ハイパーバイザー)、OSタイプ、およびボックス名)を示します。 基本的に、テンプレートを編集するのではなく、完成したファイルをコピーすることを好みます。 すべてのパラメーターの説明はドキュメントに記載されています。作業用プロビジョニングの例を示します(リストはGistにあります)。
Vagrantfile# - , . . # -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # config.vm, . # config.vm.box = "Win2012R2x64" # , windows config.vm.guest = :windows # , Vagrant . , , Hyper-V. - “default”. config.vm.define :godnota # . SSH, - WinRM config.vm.communicator = "winrm" # . Chef, . , , Vagrantfile. , -, - (, \\\\server\\DevOps\\Vagrant\\provision.ps1), . config.vm.provision "shell", path: "provision.ps1" # , , Vagrant . , 5, sysprep, config.vm.boot_timeout = 300 # , , config.vm.graceful_halt_timeout = 180 # Vagrant ( SMB) . , Windows ( Ubuntu hashicorp/precise64 ), config.vm.synced_folder ".", "/vagrant", disabled: true # Hyper-V. , , , . config.vm.provider "hyperv" do |hv| hv.ip_address_timeout = 300 end # - , . , ( ). config.winrm.username = "Administrator" config.winrm.password = "P@$$word" end
シェルのプロビジョニングの段階で何が起こりますか? ロード後にシステムが完全に上昇した場合(unattend.xmlファイルで回答するのを忘れた質問に固執するのではなく)、VagrantはVMに接続し、システムドライブ(通常はC:\ Tmp)に一時フォルダーを作成し、ドロップしますそこでスクリプトを作成し、私たちが指定したユーザーの下でローカルに実行します。 スクリプトファイルで多くの便利なことを行うことができます。そこで書いたものを表示したいだけです(リストはGistで入手できます)。
provision.ps1
原則として、Install-WindowsUpdateを含む一部のコマンドがBoxstarterモジュールであることを除いて、特別なことは何もありません(それが私たちが気に入っている理由です)。
# Chocolatey . , , . , , iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1')) # Boxstarter cinst boxstarter $env:Path+=";"+$env:AppData+"\Boxstarter" $env:PSModulePath+=";"+$env:APPDATA+"\Boxstarter" Import-Module Boxstarter.Chocolatey $Boxstarter.AutoLogin=$true # Set-WindowsExplorerOptions -EnableShowHiddenFilesFoldersDrives -EnableShowFileExtensions # RDP Enable-RemoteDesktop # Far 7-zip choco install far,7zip -y # Classic Shell, Start choco install classic-shell -installArgs ADDLOCAL=ClassicStartMenu -y # del C:\Users\Administrator\Desktop\*.lnk # Install-WindowsUpdate -AcceptEula -SuppressReboots Restart-Computer
理想的には、その後、スクリプトをフォルダに入れて、切望されているvagrant upコマンドを実行できます。 ただし、この後、いくつかの問題が発生する可能性があります。 私はすぐにそれらについて警告したいと思います:
- 仮想マシンを起動しようとすると、PowershellからIDEディスクを使用できないことを示すエラーが表示されることがあります。 これは既知のバグです。これは、Hyper-V仮想マシンの2番目のバージョンでボックスが準備された場合、Vagrantが完全に認識していないIDE仮想コントローラーが実際に存在しないという事実によるものです。 誤解は、VMインポートスクリプトを編集することによって非常に簡単に処理されます。C:\ HashiCorp \ Vagrant \ embedded \ gems \ gems \ vagrant-1.7.2 \ plugins \ provider \ hyperv \ scripts \ import_vm.ps1-必要な行
「IDE」を「VHD」に置き換えますこの方法を覚えておいてください。たとえば、以前に未知のエラーに出くわしたり、そこに何かをねじ込みたい場合などに便利です。# Determine boot device Switch ((Select-Xml -xml $vmconfig -XPath "//boot").node.device0."#text") { "Floppy" { $bootdevice = "floppy" } "HardDrive" { $bootdevice = "VHD" } "Optical" { $bootdevice = "CD" } "Network" { $bootdevice = "LegacyNetworkAdapter" } "Default" { $bootdevice = "VHD" } } #switch
- 別のニュアンスは、ロードの順序に関連しています。 元のマシンがハードドライブからの起動を優先していた場合でも、前述のファイルを起動すると、何らかの理由で停止し、その結果、システムがPXE経由でネットワークから長時間起動しようとすると、Vagrantは起動を待たずにIPアドレスを判別できません。 それは第二世代の車で観察されます。 通常、これは必要なものではないので、設定で正しい優先度を設定した後、仮想マシンがオンになったタイミングを追跡してすぐに再起動するか、上記のインポートファイルに松葉杖を構築する必要があります:「$ vm_id =(Get-VM $ vm_name)」行の前id.guid”数行追加する必要があります:
if ($generation -eq 2) { $hddd = Get-VMHardDiskDrive $vm_name Set-VMFirmware $vm_name -BootOrder $hddd }
条件が必要です、なぜなら 第一世代のマシンはVMFirmwareをサポートしていません。 その結果、VMにはダウンロード用のオプションが1つだけあります-VHDファイル。 - バージョン1.7.2のimport_vm.ps1スクリプトは、リフト中のマシンに複数のディスクを正しく追加できません。 これは、VHDファイルの名前をコピーせず(ファイル自体はコピーされない)、import.rbから渡されるデフォルトの「disk.vhd」を設定し、2番目のディスクが接続されるとエラーが発生するためです。
「disk.vhdx」を追加できません。 ディスクは既に仮想マシン「Windows2012R2x64」に接続されています」。 (仮想マシンID 35449990-E3D2-4BE1-99E5-2CAACC537097)。
これは既知の問題です。 これまでのところ、私は急いで彼女を倒すことができなかったので、誰かが彼女を克服する方法を教えてくれたら嬉しいです。 それ以外の場合、開発者が修正するまで待機します。
以上です! これで、任意の量の仮想マシンにスタンプを付けることができます(もちろん、ハイパーバイザーのリソースで十分です)。 インスタンスの名前を変更しない場合(ボックスから取得)、「_ 1」がそれぞれ名前に追加され、別のインスタンスの末尾には「_2」ではなく「_1_1」が追加されます。import_vm.ps1ファイルはそのように書き込まれます。
何かがうまくいかず、すべてが順調に進まなかった場合は、いつでも他の人のボクシングと協力することができます。 残念ながら、私は私のものを与えることはできません(ライセンスキーと証明書は既にそこに詰まっています)。しかし、記事で既に述べたマットロックボックスを使用することができます。 このボックスはインターネットから公開されているため、1つのコマンドで追加できます(デフォルトでは、Vagrantはクラウド内のボックスを検索します)。
mwrock / Windows2012R2 --provider hypervを浪費する
数台の車を上げる
最後に、いくつかのボタンを押してVMを起動しました。 環境全体をすぐに確立したい場合はどうしますか? もちろん、このためには少しスクリプトを作成する必要がありますが、すぐにPowershellを使用する必要はありません。 幸い、構成ファイルはRubyで記述されているため、1つのコマンドで1つのVagrantfileから複数のマシンを一度に持ち上げることができ、1つのファイルで複数の異なるボックスを指定することもできます。 手順については、 ドキュメントで詳しく説明しています 。 適切な言語スキルを使用すると、実際の奇跡を行うことができます:たとえば、自動的にJSONファイルを取得し、ネットワーク設定とホスト名をすべてのマシンに割り当てます。また、同じファイル内のロールに応じてそれらにChefレシピをローリングします( このように )。 しかし、これはすでに広まっているこの記事の範囲をはるかに超えています。
まとめ
さて、結果として何を得たのでしょうか? ネイティブ環境にWindowsマシンを迅速に展開し、完成した仮想マシンを調達し、要件に従って構成するためのシステム。
これは特に当社にどのように役立ちましたか? これにより、新しいインフラストラクチャの構築にかかる時間を大幅に節約できます。以前は、ISOファイルからシステムをインストールし、すべてのソフトウェアをセットアップして更新するのに半日かかりましたが、わずか数分です。 System Centerテンプレートからマシンのクローンを作成する場合でも、仮想ハードディスクファイルの継承などの不利な点は言うまでもなく、通常は時間がかかります。 また、ローカルシステム(Windows 8.1が搭載されたワークステーションでも)でテスト環境を迅速に作成できた開発者やテスターにとっても優れたツールです。 これを行うために、私は簡単な短い指示を書いたので、彼らは詳細を掘り下げて作業プロセスから気を散らす必要はありません。
次は? 現在、既存の環境の分析と文書化に積極的に取り組んでおり、Chefレシピの形式でそれらを説明しています。 当社のサービスは、パッケージとしてインストールおよび展開される予定です。 これにより、多くのプロセスが自動化され、人的要因に関連する多くのルーチンやエラーが取り除かれます。 一般的に、DevOps博士が処方したもの。 また、多くの異なるイメージをすばやく準備する必要がある場合は、Packerをマスターする計画で。 Hyper-VとAzureのサポートが最近登場しましたが、非常に有望に見えます。 計画には、VMとホスト間でフォルダーを迅速に同期する作業も含まれています。残念ながら、通常の共有は、多数のファイルとアクティブな操作(ビルドなど)に対してかなりゆっくりと動作します。
この記事が役に立ち、トピック全体が興味深い場合は、この分野でのその後の勝利と失敗について、喜んで別の出版物を作成します。
参照資料
- Hyper-Vリソース: technet.microsoft.com/en-us/evalcenter/dn528863.aspx
- Hyper-Vサーバーのダウンロード: technet.microsoft.com/en-us/evalcenter/dn205299
- サーバーマネージャーを使用したHyper-Vロールのインストール: technet.microsoft.com/en-us/library/hh846766.aspx#BKMK_SERVER
- Chocolatey: chocolatey.org
- Chocolatey 0.9.9の変更(スクリプトのパフォーマンスに影響する場合があります): github.com/chocolatey/choco/wiki/ReleaseNotes
- Vagrant: vagrantup.com
- Vagrant Hyper-Vボックス: atlas.hashicorp.com/boxes/search?provider = hyperv&vagrantcloud = 1
- Windows 2012 R2評価www.microsoft.com/en-us/evalcenter/evaluate-windows-server-2012-r2
- Boxstarter: boxstarter.org
- ボクシングファイルのサイズを縮小する: www.hurryupandwait.io/blog/in-search-of-a-light-weight-windows-vagrant-box
- Sysprepの自動設定を構成します: misheska.com/blog/2013/07/28/windows-server-2012-automated-install-settings
- Windowsアセスメント&デプロイメントキット(ADK): www.microsoft.com/en-us/download/details.aspx?id=39982
- bsdtar.exe: github.com/benesch/libarchive/releases/download/v3.1.2/libarchive-3.1.2-bin-windows.zip
- パッカー: www.packer.io habrahabr.ru/company/express42/blog/212085