2番目の部分では、プレイブックの出力を把握し、Ansibleスクリプトをデバッグして再利用する方法を学びました。
第3部では、さまざまなオペレーティングシステム(たとえば、rpmとdebを使用)用に単一のAnsibleプレイブックを作成する方法、多くのホストにサービスを提供し、それらすべてをインベントリに書き込まない方法、およびサーバーをクラウドリージョン別にグループ化する方法を学びました。 Ansible変数とインベントリファイルの使用を検討しました。
このパートでは、Ansibleモジュールを使用してサーバーを構成する方法を学習します:最も一般的なスクリプトをリモートサーバーで実行する方法、構成ファイルにテンプレートモードを使用する、必要な変数を置き換える、およびバージョン管理システムを使用してサーバーにコードを取得する方法を理解します。
Ansibleのモジュール
Ansibleは、システム、ネットワーク、データベース、ファイルなどの200以上のモジュールを提供します。 モジュールを使用してITインフラストラクチャを構成できます。
コマンドモジュール
モジュールはコマンド名と引数を受け入れます。 シェル変数または操作(<、>、|、&)は、コマンドモジュールでは機能しません。 シェルによって処理されます。 コマンドモジュールは、次のパラメーターを受け入れます。
- chdir :コマンドが実行される現在のディレクトリを変更するために使用されます
- creates :ファイルを作成します
- removes :ファイルを削除します。
最も単純なサーバー再起動タスクを作成しましょう。
- name: Reboot machine command: /sbin/shutdown -r now sudo: yes
生のコマンドモジュール
このモジュールは、他のコマンドモジュールを使用できない場合に使用する必要があります。 これは、SSH経由でサーバーにリモートコマンドを実行する簡単な方法です。 このモジュールは、Pythonがインストールされていないサーバーでも機能します。
vimパッケージをインストールする簡単な例:
- name: Install vim raw: yum -y install vim-common sudo: yes
パッケージがインストールされていることがわかりますが、タスクは変更済みとしてマークされません。 可能な場合は、未加工モジュールを使用しないことをお勧めします。
スクリプトコマンドモジュール
このモジュールは、スクリプトをリモートマシンにコピーして実行するために使用されます。 モジュールは 、 オプションの 作成と削除をサポートします 。
/ etcのディレクトリ数を表示し、リモートサーバーで実行するスクリプトを作成してみましょう(〜/ ansible / playbooks / scripts / list_number_of_directories.sh ):
#/bin/bash ls -l /etc | egrep '^d' | wc -l
スクリプトモジュールを使用したタスクは次のようになります。
- name: List directories in /etc script: ~/ansible/playbooks/scripts/list_number_of_directories.sh /etc sudo: yes
スクリプトファイルへのパスは、スクリプトモジュールを使用するファイルの場所に相対的です。 たとえば、このタスクがプレイブックにインポートされたタスクファイルに記述されている場合、スクリプトの場所は、プレイブックではなくタスクファイルを基準にして設定されます。
プレイブック実行の出力から、デバッグ情報-vvを/ etc 91ディレクトリに出力するとわかるように。
シェルコマンドモジュール
シェルモジュールとコマンドモジュールの主な違いは、コマンドを実行するためにデフォルトで/ bin / shを使用することです。 シェル変数およびその他のシェル関数を使用できます。
ファイルモジュール:ファイル
ファイルモジュールを使用すると、ファイルの属性を変更できます。 ファイルの作成、ディレクトリの再帰的な作成または削除、シンボリックリンクの作成または削除ができます。
httpd.confに正しい権利と所有権があることを確認しましょう。
- name: Ensure httpd conf has right permissions and owner/group file: path=/etc/httpd/conf/httpd.conf owner=root group=root mode=0644 sudo: yes
Ansibleスクリプトを使用すると、スクリプトの再起動時に目的の状態を実現できるため、スクリプトを再起動すると、必要に応じてファイルアクセス権を確認および修正できます。
シンボリックリンクの作成方法を見てみましょう。
- name: Create a symlink in /tmp for httpd.conf file: src=/etc/httpd/conf/httpd.conf dest=/tmp/httpd.conf owner=root group=root state=link sudo: yes
ディレクトリを再帰的に作成します。
- name: Create recursive directories file: path=/tmp/dir1/dir2/dir3 owner=root group=root mode=0777 sudo: yes
テンプレートファイルモジュール
AnsibleはJinja2テンプレート言語を使用してテンプレートを作成します。 テンプレートモジュールを使用すると、サーバー上にファイルを作成することもできます。
シンプルなテンプレートを作成しましょう(〜/ ansible / playbooks / templates / ansible_hostname )。
This is a test file on {{ ansible_hostname }}
タスクは次のようになります。
- name: Create a test template template: src=test dest=/tmp/testfile mode=644
Ansibleはサーバー上にテストファイルを作成し、テンプレートを適用しました。 「Ansible-for-config」はホスト名の値です。
テンプレートモジュールには、ファイルをコピーする前にチェックする便利な検証オプションがあります。 典型的な例は、Apache構成ファイルです。 構文チェックを開始するには、次のコマンドを使用します。
httpd -t -f /etc/httpd/httpd.conf
すべて問題なければ、「構文OK」と表示されます。 そうでない場合は、エラーが表示されます。
プレイブックで同じチェックを行う方法を見てみましょう:
– name: Create a virtual host template: src=test.conf dest=test.conf mode=644 validate='httpd -t -f %s' sudo: yes
使用するソフトウェアで構成を確認できる場合は、検証オプションを使用して構成をより安全に適用できます。
ファイルモジュールのコピー
コピーモジュールを使用すると、ファイルをサーバーにコピーできます。
- name: Copy file remotely copy: src=test2.conf dest=/etc/test2.conf owner=root group=root mode=0644 sudo: yes
Gitバージョン管理システムモジュール
Ansibleはさまざまなバージョン管理システム(svn、bzr、hgなど)をサポートしていますが、gitモジュールを見ていきます。
サーバーにgitをインストールします。
- yum: name=git state=installed sudo: yes
これらの記事のスクリプトを使用してリポジトリを取得します。
- name: Checkout ansible–playground repository git: repo=https://github.com/trukhinyuri/ansible-playground.git dest=~/checkout sudo: yes
タスクが完了する前後に、SHAが考慮されます。これにより、リポジトリが更新されたかどうかを理解できます。
SSH経由でファイルを受信する場合は、 accept_keyおよびkey_fileパラメーターを使用して、リポジトリにアクセスするためのキーを設定します。 accept_key = yesキーを使用する必要がある場合。 key_fileはキーパスを指します。 キーが〜/ .sshにある場合、key_fileを指定する必要はありません。
おわりに
この記事の執筆は、 Learning Ansibleという本と、もちろん公式文書によって大いに助けられました。
Ansibleのすべての実験はInfoboxCloudで便利に実行されます。各仮想サーバーは、既製のテンプレートからVMを選択するのではなく、タスクに必要なリソースの量を正確に設定できるためです(CPU / RAM /ディスクは互いに独立)。 実験が行われない場合-VMをオフにして、ディスクのコストのみを支払うことができます。
記事に間違いを見つけた場合、著者は喜んで修正します。 PMに連絡するか、それについて電子メールを送信してください。 そこで、後続の記事で取り上げるAnsibleの質問をすることができます。
パート5:local_action、条件、ループ、および役割
成功しました!