このチュートリアルでは、Puppetのリソース、マニフェスト、モジュール、クラスについて例を挙げて説明します。また、Puppetマスター/エージェントノードがすでにインストールされており、使用できる状態になっていることを前提としています。 Puppetを使用するには、puppetがリソースを処理する方法と、マニフェストとモジュールが作成される方法を理解する必要があります。
前提条件:
前に述べたように、Puppetマスターノードとエージェントノードをインストールして構成する必要があります。
Puppetの宣言型ドメイン固有言語(DSL)
- Puppetには、状態を定義する独自の宣言型ドメイン固有言語があります システムの。
- 人形のコードはマニフェストというファイルに書き込まれます .pp拡張子で保存 (例: site.pp メインのマニフェストファイルです)
- パペットコードにはリソースが含まれています システムの要素(ファイル、パッケージ、サービス、ユーザー、ホスト、インターフェース、execなど)に影響を与えるもの。リソースはシステム構成の基本単位であり、各リソースはシステムの側面を説明します。
- リソースはクラス()にグループ化されます MODULES に保存(整理)されるPuppetコードの名前付きブロック) 呼び出されるまで使用されません。
- パペットマスターはカタログを作成します (Puppetコードとデータに基づいて生成されます)そしてクライアントはそれらを適用します。
Puppetの用語を詳しく見てみましょう。
リソース
リソースは、システムの状態について何かを説明します。たとえば、特定のユーザーまたはファイルが存在するか、サービスが実行または有効化されているか、パッケージがインストールされているかなどです。
リソースの形式:
resource_type {'name_of_the_resource':argument => value、other_arg => value、}
例1:
file {'test':path =>'/ tmp / test'、content =>'サンプルコンテンツ'、}
例2:
package {'ntp':ensure => present、}
例3:
service {'ntpd':ensure => running、enable => true、}
Puppetのリソースタイプを一覧表示するコマンドは次のとおりです。
#は/ opt / puppetlabs /人形/ binに/人形リソース--typesaugeascomputercronexecfilefilebucketgrouphostinterfacek5loginmacauthorizationmailaliasmaillistmcxmountnagios_commandnagios_contactnagios_contactgroupnagios_hostnagios_hostdependencynagios_hostescalationnagios_hostextinfonagios_hostgroupnagios_servicenagios_servicedependencynagios_serviceescalationnagios_serviceextinfonagios_servicegroupnagios_timeperiodnotifypackageresourcesrouterschedulescheduled_taskselbooleanselmoduleservicessh_authorized_keysshkeystagetidyuservlanwhityumrepozfszonezpoolマニフェスト
前に述べたように、Puppetコードは.pp拡張子のマニフェストファイルで記述されています 。デフォルトのメインマニフェストファイルは次の場所にあります:
#vim /etc/puppetlabs/code/environments/production/manifests/site.ppその他のマニフェストファイルは、 / etc / puppetlabs / code / environment / Production / Manilats /の下に作成できます。
クラス
クラスには、コード内のどこからでも呼び出すことができるコードブロックが含まれています。クラスは、コードを再利用する機能を提供します。 JavaやC++などのプログラミング言語を知っている場合、Puppetでのクラスの定義はまったく同じです。
class class_name{::::::::::Puppetコードはここにあります:::::::::}これで、上記のクラスを以下のようにPuppetコードに含めることができます。
include class_nameモジュール
モジュールは、マニフェストのセットを整理するのに役立ちます。モジュールは、 / etc / puppetlabs / code / environment / product/modulesの下に追加できます。 大きなPuppetコードは、複数のマニフェストに分散し、モジュールを使用して整理できます(この投稿の下部で、Apacheサービスをインストール、構成、および開始する方法を学習します。これらの各タスクは、異なるクラスに分割されます)。
さて、簡単な操作を実行するためにマニフェストを作成してみてください。
パペットでの私の最初のマニフェスト
例1:(site.ppに)新しいファイルを作成する
ステップ1: 特権ユーザーとしてPuppetサーバー(マスターノード)にログインします。
ステップ2: / etc / puppetlabs / code /environments/production/manifestsに移動します
ステップ3: site.ppを編集します –メインマニフェストファイル。見つからない場合は作成してください。
#vim site.ppステップ4: / tmp /にファイルを作成するためのPuppetコードを書いてみましょう。 Puppetエージェントノードで。コードは次のようになります
file {"/ tmp / myFile":ensure => "present"、owner => "root"、group => "root"、mode => "644"、content=>"これは私の最初のマニフェストです一時ディレクトリにファイルを作成します」、}上記のコードでは、ファイルを使用しています。 ensureなどの引数を持つリソースタイプ 、所有者 、グループ 、モード およびコンテンツ 。ファイルは/tmpに作成されます 。
ステップ5 :これでマニフェストファイルの準備が整いました。 Puppet Agentノードに移動し、以下のコマンドを実行します。
[Agent]#/ opt / puppetlabs / puppet / bin / puppet agent -t情報:構成済み環境の使用'本番環境'情報:pluginfactsの取得情報:プラグイン情報の取得:puppetagent.test.inのカタログのキャッシュ情報:構成の適用バージョン'1471021726'通知:/ Stage [main] / Main / File [/ tmp / myFile] / ensure:定義されたコンテンツは'{md5} 8eadb0a0feef0bc667702434f816d8e8'通知:0.09秒でカタログが適用されました上記の出力は、カタログが適用されたことを示しています。
注 :Puppetエージェントは自動的にPuppetサーバーに接続して、自分で設定するためのカタログを受け取ります。ただし、自動同期を待ちたくない場合は、上記のコマンドを実行できます。
ステップ6 :ファイルが必要な内容で作成されているか確認してください。
#ls / tmp / myFile / tmp / myFile#more / tmp / myFileこれは、一時ディレクトリにファイルを作成する最初のマニフェストです最初のモジュールの作成
エージェントノードにApacheWebサーバーをインストールするモジュールを作成しましょう。
ステップ1 :ディレクトリをモジュールフォルダに変更します。
#cd / etc / puppetlabs / code / environment / product / modulesステップ2 : httpdという名前のモジュールを作成しましょう 。そのために、 PuppetForgeを使用します – これには、命名規則に従う必要があります。たとえば、
OrganisationName-moduleNameApache Webサーバーをインストールしているため、インストールするパッケージは httpd 私の命名規則は次のようになります:
mypuppetorg-httpdステップ3 :以下のコマンドを実行します
#/ opt / puppetlabs / puppet / bin/puppetモジュールはmypuppetorgを生成します-httpdこのモジュールのmetadata.jsonファイルを作成する必要があります。以下の質問に答えてください。質問がこのモジュールに当てはまらない場合は、空白のままにしてください。Puppetはセマンティックバージョニング(semver.org)を使用してモジュールをバージョン管理します。このモジュールのバージョンは何ですか。 [0.1.0]->このモジュールを書いたのは誰ですか? [mypuppetorg]->このモジュールコードはどのライセンスに該当しますか? [Apache-2.0]->このモジュールを一文でどのように説明しますか?-> Apache Webサーバーをインストールして構成しますこのモジュールのソースコードリポジトリはどこにありますか?->他の人はこのモジュールの詳細をどこで学ぶことができますか? ->他の人はこのモジュールに関する問題をファイルするためにどこに行くことができますか?-> --------------------------------- ------- {"name": "mypuppetorg-httpd"、 "version": "0.1.0"、 "author": "mypuppetorg"、 "summary": "Apache Webサーバーをインストールして構成します"、 "license": "Apache-2.0"、 "source": ""、 "project_page":null、 "issues_url":null、 "dependencies":[{"name": "puppetlabs-stdlib"、 "version_requirement": "> =1.0.0 "}]、" data_provider ":null} ----------------------------------- -----このメタデータを生成しようとしています。継続する? [n / Y]-> Y注意:/ etc / puppetlabs / code / environment / product / modules / httpdでモジュールを生成しています...注意:テンプレートにデータを入力しています...終了しました。モジュールはhttpd.httpd/Gemfilehttpd / Rakefilehttpd / exampleshttpd / examples / init.pphttpd/manifestshttpd/manifests/init.pphttpd/spechttpd/spec/classeshttpd/spec/classes/init_spec.rbhttpd/spec/spec_helper.rbhttpd/README.mdhttpdで生成されます/metadata.jsonステップ4 :モジュールが作成されます。例: httpd その構造は次のようになります:
#ls httpd /examplesGemfileマニフェストmetadata.jsonRakefileREADME.md仕様ステップ5 :モジュールをカスタマイズする
手順4では、モジュールディレクトリ構造と init.pp という名前のメインマニフェストファイル(モジュール用)を作成します。 。 ファイルを開いて外観を確認すると、ファイルの最後に空の httpd があります。 クラス。
class httpd {}ステップ6 :Apacheサービスのインストール(install.pp)、構成(configure.pp)、および開始(start.pp)用に個別のクラスを作成しましょう。
Apacheをインストールするためのサブクラスの作成: install.ppという新しいマニフェストファイルを作成します (class modulename ::install)
#pwd / etc / puppetlabs / code / environment / product / modules / httpd#vimmanifests / install.pp以下のコードをコピーして貼り付けます:
#==クラス:httpd ::installclass httpd ::installはhttpdを継承します{package{'httpd':ensure => installed、}}ここでは、サブクラス「 install ‘はメインクラスを継承します httpd 。また、構文パッケージに注意してください。 、これはパペットタイプと保証を意味します 属性は、上記のパッケージがインストールされていることを確認します。
httpd(configure.pp – class modulename ::configure)を構成するためのサブクラスの作成
#pwd / etc / puppetlabs / code / environment / product / modules / httpd#vimmanifests / configure.pp以下のコードをコピーして貼り付け、 httpd.conf ファイルは適切に保護されています。
class httpd::configureはhttpd{file{'/etc/httpd/conf/httpd.conf':sure => file、owner =>'root'、>'root'、 '、}}開始するサブクラスの作成httpd サービス(start.pp –クラスmodulename ::start):
#pwd / etc / puppetlabs / code / environment / product / modules / httpd#vimmanifests / start.pp以下のコードをコピーして貼り付けます:
class httpd::startはhttpd{service{'httpd':ensure => running、enable => true、hasstatus => true、hasrestart => true、require => Package ['httpd']、}}これで、サブクラスが作成されました。
- install.pp – httpdをインストールする パッケージ
- configure.pp – httpd.confの適切な権限を構成する ファイル
- start.pp –有効にして httpdを開始します サービス。
ステップ7: ここで、メインクラスを httpd サブクラスについて知るために(インストール 、設定 および開始 )。これを行うには、モジュールのメインクラスを開き、サブクラスを含めます。
#vimmanifests / init.ppインクルードステートメントは次のようになります:
class httpd {include httpd ::installinclude httpd ::configureinclude httpd ::start}ステップ8: これでクラスは終了です。ただし、カタログを実装するノードをPuppetに指示する必要があります。その方法は次のとおりです。
メインのマニフェストファイルに移動します( / etc / puppetlabs / code / environment / Production / manifests の下) )
#vim site.pp以下のコードをコピーして貼り付けます。ここでhttpd ApacheWebサーバーを管理するために作成されたメインクラスです。
node default {include httpd}それでおしまい! Puppet Agentノードがカタログを自動的にダウンロードするまで待つか、手動でトリガーすることができます。 Puppet Agentノードに移動し、以下のコマンドを実行します。
ステップ9:
[Agent]#/ opt / puppetlabs / puppet / bin / puppet agent -t情報:構成済み環境の使用'本番環境'情報:pluginfactsの取得情報:プラグイン情報の取得:puppetagent.test.inのカタログのキャッシュ情報:構成の適用バージョン'1472036234'通知:/ Stage [main] / Httpd ::Install / Package [httpd] / ensure:created通知:/ Stage [main] / Httpd ::Configure / File [/etc/httpd/conf/httpd.conf ] / mode:モードが「0600」から「0644」に変更されました通知:/ Stage [main] / Httpd ::Start / Service [httpd] / ensure:「stopped」が「running」に変更されたことを確認してください情報:/ Stage [main] / Httpd ::Start / Service [httpd]:Service [httpd]の更新のスケジュールを解除します通知:5.88秒でカタログを適用しましたこれは最初のモジュールであるため、パッケージがインストールされ、サービスが正しく開始されているかどうかを確認することをお勧めします。
[Agent]#rpm -qa | grep httpdhttpd-tools-2.4.6-40.el7.centos.4.x86_64httpd-2.4.6-40.el7.centos.4.x86_64[Agent]#service httpd statusRedirecting to / bin / systemctl status httpd.servicehttpd.service-Apache HTTPサーバーがロードされました:ロードされました(/usr/lib/systemd/system/httpd.service;有効;ベンダープリセット:無効)アクティブ:2016年8月24日水曜日からアクティブ(実行中)17:29:29 IST; 6分前結論
それでおしまい!これで、サービスのインストール、構成、および有効化のために独自のPuppetモジュールを作成することができました。ただし、このチュートリアルは、Puppetで驚異的なことを行うための出発点にすぎません。ハッピーパペット!
Linux