Windowsでの一般的なタスク

Included in Puppet Enterprise 2017.2.

このページは、Puppet EnterpriseとWindows agentで使用される一般的なタスクに関する理解を深めることを目的とし、このようなタスクを実行する際のベースとなるコンセプトや理由について説明します。 ドキュメント内の他のガイドや手順説明のなかでも、タスクの手順としてこのようなコンセプトに触れていますが、詳しい解説はありません。

Puppetマニフェストの開発

Puppetコードはドメイン固有言語(DSL)で、ファイル、ユーザ、パッケージなどのシステム上のリソースのあるべき状態を定義します。 Puppetマニフェストファイルは一意のタイトルと名前の付いた一連の属性を持つリソースリストで、リソースのあるべき状態を記述しています。 Puppetはこのようなテキストベースのマニフェストをカタログにまとめ、それらを用いて設定の変更を適用します。

Puppetマニフェストファイルは、テキストエディタを使って作成します。 AtomVisual Studio CodeSublime Textは、Puppet言語のシンタックスハイライトをサポートしています。 Notepad++やNotepadなどのエディタではPuppetシンタックスはハイライトされませんが、マニフェストの作成に使用することはできます。

タスク1:簡単なマニフェストを記述する

  1. file.ppという名前のファイルを作成し、c:\myfiles\に保存します。
  2. 任意のテキストエディタでファイルを開き、以下のテキストを追加します。
file { 'c:\\Temp\\foo.txt':
  ensure   => present,
  content  => 'This is some text in my file'
}

このファイルリソース例では、以下の点に留意してください。

  • Puppetでは、type { title: }という基本シンタックスを使用します。typeにはリソースタイプを指定します。この例ではfileです。
  • リソースタイトル (:の前の値) はC:\\Temp\\foo.txtです。ファイルリソースはこのタイトルを用いて、ディスク上のどこにファイルを作成するかを決定します。1つのマニフェスト内では、リソースタイトルは必ず一意であることが必要です。
  • ensurepresentに設定し、ディスク上にファイルを作成します (まだ存在しない場合)。ファイルタイプのリソースに関しては、absentの値もサポートされています。この値は、ファイルが存在する場合に、ディスクからファイルを削除します。
  • contentに設定した値(This is some text in my file)がファイルに記述されます。

Puppetの全リソースタイプの詳細については、リソースタイプリファレンスを参照してください。

Puppetコマンドプロンプトの起動

次に、Puppetのコマンドラインツールにアクセスします。 これらのツールのコマンドラインインタフェースを開くには、[Start Menu]でCommand Prompt Puppetと入力し、[Start Command Prompt with Puppet]をクリックします。

コマンドプロンプトの注意点は以下の通りです。

  • 現在稼働しているディレクトリ、C:\Program Files\Puppet Labs\Puppet\binには、いくつかの重要なバッチファイルがあります。このバッチファイルのなかでもっとも重要なものがpuppet.batです。PuppetはRubyコードベースのアプリケーションであり、 puppet.batはruby.exeからPuppetコードを実行するためのラッパーです。
  • Puppetコマンドプロンプトの実行により、ディレクトリを変更した場合でも、すべてのPuppetツールが確実にPATHに置かれます。

マニフェストの適用

次に、puppet applyコマンドラインツールを使って、マニフェストで記述された状態c:\myfiles\file.ppを適用する方法を説明します。 ただし、Puppetでこの変更を適用する前に、マニフェストに関するその他の役立つ操作を2つほど説明します。

タスク2:puppet parser validateを使ってマニフェストを検証する

コマンドラインparser validateを使用すると、マニフェストのシンタックスが正しいかどうかを検証することができます。

  1. Puppetコマンドプロンプトにpuppet parser validate c:\myfiles\file.ppと入力し、シンタックスをチェックします。 マニフェストにシンタックスエラーがない場合は、何も表示されません。

  2. エラーがある場合にどのように表示されるか確認するために、マニフェストを一時的に編集し、リソースタイトルの後ろの:を削除してみます。 もう一度puppet parser validate c:\myfiles\file.ppを実行すると、以下のように表示されます。

Error: Could not parse for environment production: Syntax error at 'ensure' at c:/myfiles/file.pp:2:3

タスク3:--noopでPuppet動作をシミュレーションする

次に、このマニフェストを適用した場合にPuppetで実行される変更をシミュレーションしてみます。 Puppetには、マニフェストによって行われる変更が意図した通りのものかどうかをテストできるスイッチが備わっています。 これは非適用またはno-opモードと呼ばれます。

変更をシミュレーションするには、コマンドプロンプトでpuppet apply c:\myfiles\file.pp --noopを実行します。

C:\Program Files\Puppet Labs\Puppet\bin>puppet apply c:\myfiles\file.pp --noop
Notice: Compiled catalog for win-User.localdomain in environment production in 0.45 seconds
Notice: /Stage[main]/MainFile[C:\Temp\foo.txt]/ensure: current value absent, should be present (noop)
Notice: Class[Main]: Would have triggered 'refresh' from 1 events
Notice: Stage[main]: Would have triggered 'refresh' from 1 events
Notice: Applied catalog in 0.03 seconds

実行した場合に適用されるはずの変更が表示されます。ただし実際にはこの変更は適用されません。 C:\Temp\foo.txtに新しいファイルが作成されるはずですが、--noopを使用しているため、実際には作成されません。

タスク4:puppet applyで指定した状態を適用する

シミュレーションの結果、意図した通りの変更が加えられることを確認したら、puppet applyコマンドで変更を適用できます。

puppet apply c:\myfiles\file.ppを実行します。 Puppetによってfile.ppで記述されたリソース状態が適用されます。この例では、This is some text in my fileというコンテンツが含まれたファイル(c:\Temp\foo.txt)が存在するという状態になります。

--trace--debug--verboseなどの追加のオプションを指定すると、Puppetの実行内容をさらに詳しく確認することができます。これらのオプションは、問題のあるPuppetコードを診断する場合に役立ちます。 puppet applyが失敗した場合、Puppetのアウトプットとして完全なスタックトレースが表示されます。

べき等性について

べき等性はPuppetの重要な特徴です。これは、マニフェストを繰り返し適用して毎回同じ結果を生成し、指定した通りのリソース状態をシステム上に確実に設定できることを意味します。 与えられたリソースがすでに指定した通りの状態になっている場合は、Puppetは何のアクションも起こしません。 与えられたリソースが指定した通りの状態になっていない場合、Puppetはリソースを指定された状態にするために必要なあらゆるアクションを起こします。 このべき等性により、リソースに変更を加える前に変更をシミュレーションしたり、一時的にconfigファイルを設定して設定のずれを修正したりすることができます。Puppetを動作させるたびにリソースをはじめから作り直す必要はありません。

Puppetでマニフェストを繰り返し適用し、毎回同じ結果が得られることを実証するために、 c:\myfiles\file.ppでマニフェストを以下のように変更してみます。

file { 'C:\\Temp\\foo.txt':
  ensure   => present,
  content  => 'I have changed my file content.'
}

puppet apply c:\myfiles\file.ppを実行して、このマニフェストを適用します。 c:\Temp\foo.txtを開きます。Puppetによってファイルのコンテンツが変更されているはずです。

puppet apply c:\myfiles\file.ppを用いてもう一度このマニフェストを適用しても、システムに変化は生じません。このことは、Puppetの挙動にべき等性があることを証明しています。

Puppetドキュメンテーション内のサンプルの多くは、マニフェストファイルの作成と編集、puppet applyを使った適用に関するこのような基本的事項を、ユーザが理解していることを前提としています。

その他のコマンドラインツール

puppet agent

puppet applyと同様、puppet agentコマンドラインツールも、設定の変更をシステムに適用します。 ただし、puppet agentはPuppetサーバーからコンパイルされたカタログを検索し、それをローカルシステムに適用します。 PuppetはWindowsサービスとしてインストールされており、デフォルト設定では、30分ごとにpuppet agentを実行してmasterと通信し、新たなカタログの検索およびローカルでの適用を試みます。

puppet resource

puppet resourceを実行すると、システム上の特定のタイプのリソースの状態を調べることができます。 たとえば、 puppet resource userコマンドを実行すると、システム上の全ユーザがリスト表示されます。

Puppet resource user

この例で使用したコンピュータには、Administrator、Guest、vagrantという3つのユーザアカウントがあります。 アウトプットはマニフェストと同じフォーマットです。したがって、これをコピーしてマニフェストに直接ペーストすることができます。

puppet module install

Puppetには多くのコアリソースタイプがあります。Puppetモジュールをインストールして、さらにPuppetを拡張することができます。 Puppetモジュールには、様々なリソースの定義と、システムを修正してこれらのリソースを作成・読み込み・修正・削除する場合に必要なコードが含まれています。 Puppet ForgeにはPuppetとコミュニティメンバーが開発したモジュールがあり、誰でも使用することができます。

Puppetはpuppet agentの実行の際に、masterのモジュールをagentノードと同期します。 または、Puppetインストールに含まれるスタンドアロンのPuppetモジュールツールを用いて、モジュールの管理や表示、テストを実施することもできます。

puppet module listを実行 すると、システムにインストールされているモジュールのリストが表示されます。

モジュールをインストールするには、Puppetモジュールツールでシンタックスpuppet module install NAMESPACE/MODULENAMEを使用します。 モジュールのNAMESPACEを記入し、MODULEに具体的なモジュール名を指定します。 Windowsにインストールされるごく一般的なモジュールに、puppetlabsネームスペースのregistryがあります。 したがって、registryモジュールをインストールするには、puppet module install puppetlabs/registryを実行します。

詳細な手順については、Windowsモジュールのインストールと使用に関するドキュメンテーションを参照してください。

↑ Back to top