モジュールの記述クイックスタートガイド

Included in Puppet Enterprise 2017.2.

このクイックスタートガイドでは、Forgeモジュールを修正し、シンプルな独自のモジュールを記述します。

モジュールは、繰り返し使用できるPuppetコードの集まりで、PEデプロイの基本的な構成要素になります。 Puppet Forgeのモジュールのなかには、ニーズにぴったり合ったものもありますが、ほぼニーズを満たしているものの、完全ではないものも多くあるはずです。 PEユーザは、デプロイの要件に適した記述済みのモジュールを利用することができますが、 その一方で、独自のモジュールをゼロから記述する必要が生じることもあります。

モジュールのある場所

デフォルトでは、モジュールは/etc/puppetlabs/code/environments/production/modules内に格納されています。 これにはPEによってインストールされたモジュール、Forgeからダウンロードしたモジュール、ユーザーが記述したモジュールが含まれます。 このパスは、puppet.confmodulepathで設定することができます。

PEによって、/opt/puppetlabs/puppet/modulesのモジュールディレクトリも作成されます。 このディレクトリに内容を変更したり、モジュールを追加したりしないでください。

モジュールの構成

モジュールはディレクトリツリー構造になっています。 例えば、puppetlabs-apacheモジュールには以下のファイルが含まれています。

  • apache/ (モジュール名)
    • manifests/
      • init.pp (apacheクラスを含む)
      • php.pp (Apache用PHPをインストールするphpクラスを含む)
      • vhost.pp (Apache仮想ホストクラスを含む)
    • templates/
      • vhost/
        • _file_header.erb (vhostテンプレートを含む、PEにより管理)

すべてのマニフェスト (.pp) ファイルには、1つのクラスが含まれます。 ファイル名は予測可能な形でクラス名にマッピングされています。init.ppには、モジュールと同じ名前のクラスが含まれます。このケースでは apacheです。 <NAME>.ppには、<MODULE NAME>::<NAME>というクラスが含まれます。 <NAME>/<OTHER NAME>.ppには<MODULE NAME>::<NAME>::<OTHER NAME>が含まれます。

Apacheを含む多くのモジュールには、manifeststemplates以外のディレクトリが含まれています。 わかりやすくするために、この初級ガイドではそれらについては扱っていません。

FAQ

モジュールのマニフェストを編集して、編集済みのモジュールを使用する

この簡単な演習では、puppetlabs-apacheモジュールのテンプレート、具体的には'vhost.conf.erbを修正して、簡単な変数を追加します。この変数には、ノードに関するfactsが自動的に挿入されます。

開始する前に、以下をインストールしていることを確認します。

注意:ここでも、ルートまたは管理者としてノードにログインする必要があります。

  1. Puppet mastercd /etc/puppetlabs/code/environments/production/modulesを実行し、モジュールディレクトリに移動します。
  2. lsを実行し、現在インストールされているモジュールを見て、apacheがあることを確認します。
  3. テキストエディタでapache/templates/vhost/_file_header.erbを開きます。 (エラーの原因になることがあるため、メモ帳の使用は避けてください。) _file_header.erbファイルには、以下のヘッダが含まれます。

     # ************************************
     # Vhost template in module puppetlabs-apache
     # Managed by Puppet
     # ************************************
    
  4. PEの検索ツールFacterを使い、agentノードに関する以下のfactsを集めます。
    • facter operatingsystem実行 (agentノードのOSがわかります)
    • facter id実行 (現在ログインしているユーザーのIDがわかります)
  5. _file_header.erbのヘッダを編集し、Facter検索のための以下の変数が含まれるようにします。

     # ************************************
     # Vhost template in module puppetlabs-apache
     # Managed by Puppet
     #
     # This file is authorized for deployment by <%= scope.lookupvar('::id') %>.
     #
     # This file is authorized for deployment ONLY on <%= scope.lookupvar('::operatingsystem') %> <%= scope.lookupvar('::operatingsystemmajrelease')     %>.
     #
     # Deployment by any other user or on any other system is strictly prohibited.
     # ************************************
    
  6. コンソールで、利用可能なクラスにapacheを追加し、そのクラスをagentノードに追加します。 この手順のヘルプが必要な場合は、クラス追加に関するクイックスタートガイド を参照してください。

    Puppetの動作時に、Apacheが設定され、httpdサービスが開始されます。 その際、_file_header.erbの内容をもとに、デフォルトのApache仮想ホストが作成されます。

  7. agentノードで、お使いのオペレーティングシステムに応じて、以下のロケーションのいずれかに移動します。
    • Redhat系: /etc/httpd/conf.d
    • Debian系: /etc/apache2/sites-available
  8. 15-default.confを確認します。ノードのOSによって若干異なりますが、ヘッダに以下のような内容が表示されます。

     # ************************************
     # Vhost template in module puppetlabs-apache
     # Managed by Puppet
     #
     # This file is authorized for deployment by root.
     #
     # This file is authorized for deployment ONLY on Redhat 6.
     #
     # Deployment by any other user or on any other system is strictly prohibited.
     # ************************************
    

ご覧のように、PEがノードの主要なfactsをFacterから取得し、これらのfactsを仮想ホストテンプレートのヘッダに配置しています。

新しいモジュールを記述する

この演習では、pe_quickstart_appというクラスを作成します。これは、Apache仮想ホスト上で動作するPHPのWebアプリを管理するものです。

開始する前に、以下をインストールしていることを確認します。

注意:ここでも、ルートまたは管理者としてノードにログインする必要があります。

  1. Puppet masterで、まだモジュールディレクトリcd /etc/puppetlabs/code/environments/production/modulesにいることを確認します。その後、mkdir -p pe_quickstart_app/manifestsを実行し、新しいモジュールディレクトリとそのマニフェストディレクトリを作成します。
  2. テキストエディタを用いて、pe_quickstart_app/manifests/init.ppファイルを作成して開きます。
  3. init.ppファイルを編集し、以下のPuppetコードが含まれるようにします。その後、それを保存してエディタを閉じます。

     class pe_quickstart_app {
    
       class { 'apache':
         mpm_module => 'prefork',
       }
    
       include apache::mod::php
    
       apache::vhost { 'pe_quickstart_app':
         port     => '80',
         docroot  => '/var/www/pe_quickstart_app',
         priority => '10',
       }
    
       file { '/var/www/pe_quickstart_app/index.php':
         ensure  => file,
         content => "<?php phpinfo() ?>\n",
         mode    => '0644',
       }
    
     }
    

    これで、新しいクラスを含む新しいモジュールpe_quickstart_appが記述されました。この新しいクラスには、別の2つのクラスが含まれています。

    新しいクラスに関するその他の詳細:

    • apacheクラスは、mpm_module属性が含まれるように修正されています。この属性は、Apache (HTTPD)プロセス用に設定およびロードされるマルチプロセスモジュールを決定するものです。このケースでは、この値はpreforkに設定されています。
    • include apache::mod::phpは、新しいクラスが適切に機能するために、それらのクラスに依存していることを示すものです。しかしPEは、ノードをそれらのクラスで分類する必要性を認識しており、ノードをpe_quickstart_appクラスで分類する際に、自動的にその作業を行います。つまり、ApacheとApache PHPによるノードの分類については、心配する必要はないということです。
    • 10というpriority属性は、アプリがポート80でデフォルトのApache仮想ホストアプリよりも高い優先順位を持つようにするためのものです。
    • /var/pe_quickstart_app/index.phpファイルには、content属性で指定されたあらゆるものが含まれます。この内容は、アプリを起動させた際に見られます。PEはensure属性を用いて、クラスが最初に適用された際にこのファイルを作成します。
  4. クラス追加に関するクイックスタートガイドのワークフローを用いて、新しいクラスをコンソールに追加し、ノードに割り当てます。

以上で完了です。 初めてのモジュールが稼動しました。 モジュールとモジュールの作成方法については、豊富なリソースが用意されています。 「Puppet: Module fundamentals」、「Puppet: The modulepath」、「Beginner’s guide to modules」、「Puppet Forge」を参照してください。

クラスの記述に関する詳細情報

クラス記述の詳細については、以下のドキュメントを参照してください。

次の手順

これで、PE *nixクイックスタートガイドシリーズは終了です。Puppetユーザの基本的なワークフローを実行できるようになりました。 次のステップとして、以下を推奨します。

↑ Back to top