役割のAnsible役割

  A、役割のプロフィール

  階層構造の組織化脚本のために、バージョン1.2で導入された新機能からansible。役割は階層的なファイル構造、タスクや他のハンドラに応じて自動的に変数にロードすることができます。指定したロールを使用するためにだけ使用することはで脚本に含めます。簡単に言えば、役割は、それぞれ変数を使用しているファイル、タスク、テンプレート、およびプロセッサは、別のディレクトリに配置され、その組織の一つで命令を含めるメカニズムを使用することが便利であろう。ロールは、一般的に、ホストベースの構築サービスシナリオのために使用されているが、また、デーモンのシーンを構築するために使用することができます。私たちは、コードの再利用度の高い、複雑なシーンの役割を使用することをお勧めします。

  二、役割のディレクトリ構造

  ロール上に示したディレクトリ構造は、各役割は、階層ディレクトリ構造の特定に編成されます。役割/ディレクトリには、このようなグラフとして、各文字のディレクトリであることを特徴それぞれ役割、タスク、ファイル、ディレクトリのようvarsは、ファイル/ディレクトリまたはスクリプトと呼ばれる主記憶コピーモジュールを2つのgitの、ユーザーの役割を持っています他のタスク/定義されたタスク、役割の基本的な要素、および少なくともmain.ymlという名前のファイルが含まれている必要があります(このファイルは、ディレクトリエントリファイルのタスクである);ドキュメント;必要な主記憶モジュールテンプレートテンプレートファイルを検索するためのテンプレート/ディレクトリこのファイルに含めるファイルの必要性がで行わなどが、少なくともファイルと同じ入口main.ymlを持って、文書ファイルの内容は、その命令で参照を含めるハンドラ/ストアディレクトリメインタスクYMLのトリガファイルは、それが含まれています。varsは/メインファイルの変数の定義を格納するディレクトリは、またmain.yml書類を持っている必要があります。メタ/ディレクトリの特別な役割を定義するために、現在の依存関係を設定し、この同じカタログもmain.ymlエントリー文書を持っている必要があります。デフォルト/デフォルト設定とき変数このディレクトリにmain.ymlファイルを使用します。

  プロセスが指定されたディレクトリのための標準化プロセスの役割を使用して理解することができるので、上記の説明を通じて、役割を見つけるのは難しいことではありませんが、ネーミングおよびディレクトリの配置に依存して、デフォルトのタスク/ main.ymlは、すべてのタスクへの入り口です。すべての割り当てられたタスクを実行する機能、タスク/ main.ymlデフォルトそのタスクのmain.yml定義されたセットによって、各ディレクトリの下に。役割のplaybook_roles.ymlを次のように内容があるファイルを呼び出します

---
- ホスト:websers
  REMOTE_USER:ルート
  
  役割:
    -  roles_name  

  説明:私たちは役割を呼び出すための良好な役割playbook.yml呼び出しを記述する必要が役割を定義し、我々はリモートホスト上の役割を実行するユーザーにそれらのホスト(ホスト上で実行されたもの)のための役割を指定する必要がありますそしてそれらの役割を実行します。

  エグゼクティブ・脚本で役割を実行する方法であって、我々は唯一の呼び出しを定義するための脚本の役割を実行する必要があります。ディレクトリ内の役割は/etc/ansible/ansible.cfgに配置することができ、「roles_pathは、」パスを定義し、また、ファイルエントリの脚本に保存することができます同じディレクトリに、ansibleなし必須要件は、管理する事前に計画されたディレクトリのコードセットにコードを保存することをお勧めします。

  第三には、ロールを作成します

  ステップは、一般的に以下の4つのステップを持つロールを作成します。

  1)ロールに名前のディレクトリを作成します。

  2)それぞれの役割は等nginxの、などのディレクトリにおける役割であるにちなんで名付けられたディレクトリを作成します

  3)ファイル、ハンドラ、メタ、タスク、テンプレートを作成し、そのディレクトリという名前の各役割のディレクトリに、それぞれ、varsは、以下のディレクトリの役割よりは、空のディレクトリをすることができた場合、あなたが作成することはできません

  4)プレイブックファイルでは、それぞれの役割を呼び出します

例:私たちは脚本修正役割を書いた前に

脚本コード、およびディレクトリ構造は次のとおりです。

[ルート@テスト〜] #tree
├──install_nginx.yml
└──テンプレート
    ├──centos6_nginx.conf.j2
    └──centos7_nginx.conf.j2

1つのディレクトリ、3つのファイル
[ルート@テスト〜] #cat install_nginx.yml 
---
- ホスト:websers
  REMOTE_USER:ルート

  タスク:
    - 名前:nginxのインストール
      YUM:名前= nginxの
    - 名前:テンプレート設定ファイルcentos6
      テンプレート:SRC = centos6_nginx.conf.j2 DEST =の/ etc / nginxの/ nginx.conf
      通知:再起動nginxの
      とき:ansible_distribution_major_version == "6"
    - 名前:テンプレート設定ファイルのCentOSの7
      テンプレート:SRC = centos7_nginx.conf.j2 DEST =の/ etc / nginxの/ nginx.conf
      通知:再起動nginxの
      とき:ansible_distribution_major_version == "7"
    - 名前:開始サービス
      サービス:名前= nginxの状態=開始 
  ハンドラ:
    - 名前:再起動nginxの
      サービス:再起動名= nginxの状態=

[ルート@テスト〜]#

次のようにそれぞれのディレクトリとファイルのディレクトリ構造の役割に適応

[ルート@テスト〜] #tree
├──install_nginx.yml
├──nginx_role.yml
├──役割
│└──nginxの
│├──ハンドラ
││├──main.yml
││└──restart_nginx.yml
│├──タスク
││├──install_nginx.yml
││├──main.yml
││├──nginx_service.yml
││└──template_config_file.yml
│└──テンプレート
│├──centos6_nginx.conf.j2
│└──centos7_nginx.conf.j2
└──テンプレート
    ├──centos6_nginx.conf.j2
    └──centos7_nginx.conf.j2

6つのディレクトリ、12個のファイル
[ルート@テスト〜] #cat役割/ nginxの/タスク/ install_nginx.yml 
- 名前:nginxのインストール
  YUM:名前= nginxの
[ルート@テスト〜] #cat役割/ nginxの/タスク/ template_config_file.yml 
- 名前:テンプレート設定ファイルcentos6
  テンプレート:SRC = centos6_nginx.conf.j2 DEST =の/ etc / nginxの/ nginx.conf
  通知:再起動nginxの
  とき:ansible_distribution_major_version == "6"
- 名前:tmeplates設定ファイルcentos7
  テンプレート:SRC = centos7_nginx.conf.j2 DEST =の/ etc / nginxの/ nginx.conf
  通知:再起動nginxの
  とき:ansible_distribution_major_version == "7"

[ルート@テスト〜] #cat役割/ nginxの/タスク/ nginx_service.yml 
- 名前:開始サービス
  サービス:名前= nginxの状態=開始 
[ルート@テスト〜] #cat役割/ nginxの/タスク/ main.yml 
- 次のとおりです。install_nginx.ymlを
- 次のとおりです。template_config_file.ymlを
- 次のとおりです。nginx_service.yml
[ルート@テスト〜] #cat役割/ nginxの/ハンドラ/ restart_nginx.yml 
- 名前:再起動nginxの
  サービス:再起動名= nginxの状態=
[ルート@テスト〜] #cat役割/ nginxの/ハンドラ/ main.yml 
- 次のとおりです。restart_nginx.yml
[ルート@テスト〜]#

  注:シンプルな役割を達成するために、上記のディレクトリレイアウト、我々はコンテンツの脚本ファイルに保存され、その後、各ディレクトリを定義するためのmain.ymlファイルで実行され、ここでの役割の良い定義があり、我々は書く必要があります役割を呼び出すための脚本をすることができます。

[ルート@テスト〜] #cat nginx_role.yml 
---
- ホスト:websers
  REMOTE_USER:ルート

  役割:
    -  nginxの
[ルート@テスト〜]#

  注:上記のは我々だけnginxの役割の脚本を振り付けしているコールです。私たちの前に書かれた脚本とまったく同じ機能と同等の脚本の役割以上のコールを、運ぶためにansilble・脚本順序を持ちます。

[ルート@テスト〜]#ansible、脚本nginx_role.yml 

PLAY [websers] ********************************************** ************************************************** ******

TASK [収集の事実] ********************************************* *************************************************
[OK]:[192.168.0.128]
[OK]:[192.168.0.218]

TASKは[nginxの:nginxのインストール] ******************************************* *********************************************
変更:[192.168.0.128]
変更:[192.168.0.218]

TASK [nginxの:テンプレート設定ファイルcentos6] ***************************************** *******************************
変更:[192.168.0.128]
変更:[192.168.0.218]

TASK [nginxの:tmeplates設定ファイルcentos7] ***************************************** *******************************
スキップ:[192.168.0.128]
スキップ:[192.168.0.218]

TASK [nginxの:開始サービス] ******************************************* *********************************************
変更:[192.168.0.128]
変更:[192.168.0.218]

******************************************:HANDLER [再起動nginxのnginxの]を実行しています***********************************
変更:[192.168.0.128]
変更:[192.168.0.218]

PLAYのRECAP ************************************************ ************************************************** ********
192.168.0.128:OK = 5 = 0失敗= 4到達不能= 0を変更   
192.168.0.218:OK = 5 = 0失敗= 4到達不能= 0を変更   

[ルート@テスト〜] #ansible websers -mシェル-a 'のSS -ntl'     
192.168.0.128 | SUCCESS | RC = 0 >>
国家のRecv-Q送信-Qローカルアドレス:ポートピアアドレス:ポート 
LISTEN 0 128 ::: 80 ::: *     
0 128 *をLISTEN:80 *:*     
LISTEN 0 128 ::: 22 ::: *     
0 128 *をLISTEN:22 *:*     

192.168.0.218 | SUCCESS | RC = 0 >>
国家のRecv-Q送信-Qローカルアドレス:ポートピアアドレス:ポート 
35725 *:* 0 128 * LISTEN     
0 128 ::: 111をLISTEN ::: *     
0 128 *をLISTEN:111 *:*     
LISTEN 0 128 ::: 80 ::: *     
0 128 *をLISTEN:80 *:*     
LISTEN 0 128 ::: 22 ::: *     
0 128 *をLISTEN:22 *:*     
* 0 128 127.0.0.1:631をLISTEN:*     
LISTEN 0 128 :: 1:631 ::: *     
LISTEN 0 100 :: 1:25 ::: *     
* 0 100 127.0.0.1:25をLISTEN:*     
LISTEN 0 128 ::: 47546 ::: *     

[ルート@テスト〜]#

  説明:私たちは脚本が書かれた私たちの脚本の実施結果と役割に適応見ることができますが、すべて同じ機能を実現するために、同じです。

   第四に、ロールコール

  方法の一つ:呼び出されるロールのリストを作成します

---
- ホスト:websers
  REMOTE_USER:ルート
 
  役割:
    -  mysqlの
    -  nginxの
    -  memcachedの        

  説明:このメソッドは、上記のように、我々はこれらの役割を呼び出す必要が同じ例で、ちょうどロールリストに、書き込みに必要なロール名

  方法2:可変トランスミッションしばらく役割へのコールの役割、

---
- ホスト:websers
  REMOTE_USER:ルート
 
  役割:
    -  mysqlの
    -  {役割:nginxの、ユーザ名:nginxの}                                                                                  
    -  memcachedの

  説明:このメソッドは、同時にnginxの役割と呼ばれ、戻されnginxの役割と変数値が、指定されたロールロールの鍵が、役割に変数を渡すために、K / V複数に従ってもよいです。

  方法3:ロールベースの条件付きテストコールを実装

---
- ホスト:websers
  REMOTE_USER:ルート
 
  役割:
    -  mysqlの
    -  {役割:nginxの、ユーザ名:nginxの}
    -  {役割:memcachedを、:ansible_distribution_major_version == "7"、ユーザ名:memcachedを}     

  説明:それは、ターゲットシステムのバージョン7システムはmemchched役割を呼び出すことができますが、それはまた、スクリプトに変数を渡すことができた場合にのみ、他の言葉では、memcachedの役割をシステムのバージョン7を呼び出すとき場合は、この方法が実現されます。

  五、役割はタグの使用をプレイブック

上記の文字が私たちを呼ばれたときは、3つの方法が、実際には、我々だけではなく、以下に示すように、我々はまた、指定されたタグを持つ役割を実行するだけで実現することができるラベルを指定脚本を実行することによって、役割にタグを付けることができ、変数を渡す役割を与えます

---
- ホスト:websers
  REMOTE_USER:ルート
 
  役割:
    -  {役割:MySQLの、タグ:[ "MySQLの"、 "DB"]}
    -  {役割:marridb、タグ:[ "MySQLの"、 "DB"]}
    -  {役割:nginxの、タグ:[ "nginxの"、 "ウェブ"]には、ユーザ名:nginxの}
    -  {役割:memcachedを、:ansible_distribution_major_version == "7"、ユーザ名:memcachedを}
    -  {役割:HTTPD、タグ:[ "のhttpd"、 "ウェブ"]}
    -  {役割:PHP、タグ:PHP}                                                                 

  注:私たちは、文字を呼び出すときに、私たちは役割以上のラベルにマークすることができ、その役割は非常に似役割は同じラベルをマークされ、その脚本の実装では、我々は選択的に、ある特定のタグの役割を実行することができますそのような「ウェブ」役割上記のように、我々のラベルの実装として、我々は唯一のhttpd、ターゲットホストにnginxのこれらの二つの役割を実行する目的を達成することができますのでこと、脚本の実装に-tオプションを指定して「ウェブ」を指定することができます。我々はマークされた文字を与える場合は複数のタグは、ラベル名を囲むように複数のブラケットと、リストの形で書かれる必要がある、文字列のラベル、あなたがする必要があることを各タグの間にカンマで区切って、ノートそれが引用されることになります。

おすすめ

転載: www.cnblogs.com/qiuhom-1874/p/11902172.html