task automation using ansible playbooks
機密データを保護するためのAnsibleプレイブックとAnsibleボールトを使用したタスクの自動化について学びます。
以前のAnsibleチュートリアル#1で 、Ansibleのさまざまなコンポーネントと、このツールをさまざまなモジュールでインストールおよび構成する方法について学びました。また、モジュールを使用して1つの機能またはタスクを実行する方法も確認しました。
このパートでは、AnsibleプレイブックとAnsibleボールトを使用して機密データを保護するタスクの自動化について説明します。
推奨読書=> DevOpsの学習ガイド
最高の無料のPCクリーナーウィンドウズ7
学習内容:
AnsiblePlaybooks
モジュールを使用して単一のタスクまたは1回限りのタスクを実行する方法を見てきましたが、複数のタスクを実行する必要がある場合はどうなりますか?プレイブックは、スクリプト化された方法でそれらを実行するのに役立ちます。
プレイブックは、変数、構成、展開手順を定義し、役割を割り当て、複数のタスクを実行します。ために 例えば。 ファイルとフォルダのコピー/削除、パッケージのインストール、サービスの開始。そのため、主にプレイブックは、複数のマシンまたはサーバーへのステップを調整し、それらすべてを特定の望ましい状態にするように定義されています。
プレイブックはで書かれています YAML形式 .ymlファイル拡張子付き。非常に敏感になるフォーマットと配置に非常に注意する必要があります。
次のセクションが含まれています。
- すべてのプレイブックは3つのハイフン「—」で始まります
- ホストセクション –プレイブックを実行するターゲットマシンを定義します。これは、Ansibleインベントリファイルに基づいています。
- 可変セクション –これはオプションであり、プレイブックで必要なすべての変数を宣言できます。いくつかの例も見ていきます。
- タスクセクション –このセクションでは、ターゲットマシンで実行する必要のあるすべてのタスクを一覧表示します。モジュールの使用を指定します。すべてのタスクには、タスクが実行する内容の簡単な説明である名前があり、プレイブックの実行中に一覧表示されます。
例えば、
Tomcatをインストールして構成する必要がある場合は、次のタスクで構成されます。
- Tomcatをダウンロードしてインストールします
- Tomcatを構成する
- Tomcatを起動します
同様に、別の例DevOpsの継続的デリバリーで使用されるTomcatの使用法の場合、タスクは次のようになります。
- アプリケーションを停止します
- アプリケーションをアンインストールします
- 新しいバージョンのWARファイルをインストールします。
- アプリケーションを起動します
プレイブックのサンプルフォーマット
--- Playbook start - hosts: webservers Specify the group or servers as per inventory to execute tasks become: true tasks: - name: Copy Tomcat ZIP file to install location Short description of the task copy: src=/home/ansible/niranjan/apache-tomcat-8.5.31.tar.gz dest=/opt/niranjan/tomcat
上記のスクリプトでは、配置を上から見て、それを維持する必要があります。そうしないと、構文エラーが発生します。
プレイブックを実行するには、次のコマンドを使用します
$ ansible-playbook
プレイブックで構文エラーをチェックするには
$ ansible-playbook --syntax-check
ホストリストを表示するには
$ ansible-playbook --list-hosts
例を使用したプレイブックの作成
このセクションでは、定期的に実行する必要があるプレイブックを作成する方法の複数の例を示します。これらのプレイブックは、制御マシンから作成して実行する必要があります。
以下のすべてのプレイブックを.ymlファイルに保存し、以下に示すように実行します。
$ ansible-playbook filename.yml
例1: インベントリファイルとウェブサーバーのグループに記載されているように、ターゲットマシンまたはサーバーでファイルを作成し、以下のコードを.yml拡張子で保存して、プレイブックを実行します。
- hosts: webservers become: true tasks: - name: Create a file file: path=/home/ansible/niranjan.txt state=touch
上記の例では、 ファイル ファイルを作成するモジュール。
例2: モードを775、所有者/グループをAnsibleとしてディレクトリを作成します。
--- - hosts: webservers become: true tasks: - name: Create directory file: path=/home/ansible/niranjan state=directory mode=775 owner=ansible group=ansible
例3: 複数のディレクトリを作成します。 1つのタスクで複数のディレクトリを作成するには、ループを使用できます with_items ステートメント。したがって、以下のプレイブックを実行すると、3つの異なるタスクとして解釈されます。
--- - hosts: webservers become: true tasks: - name: Create multiple directories file: path={{item}} state=directory with_items: - '/home/ansible/vn1' - '/home/ansible/vn2' - '/home/ansible/vn3'
例4: ユーザーを作成します。見てみましょう ユーザー プレイブックでユーザーを作成および削除するモジュール。
--- - hosts: webservers become: true tasks: - name: Create User user: name=niranjan password=niranjan groups=ansible shell=/bin/bash
例5: ユーザーを削除します。ユーザーの削除は非常に簡単で、必要になります 状態 に設定する 不在 。これは、 userdel Linuxのコマンド。
--- - hosts: webservers become: true tasks: - name: Remove User user: name=niranjan state=absent remove=yes force=yes
上記のプレイブックでは、 remove = yes ホームディレクトリを削除し、 force = yes ディレクトリ内のファイルを削除します。
例6: コピーモジュールを使用して、コンテンツをファイルにコピーします。
ターゲットマシンまたはサーバーにファイルをコピーする必要がある場合は、 src そして dest コピーモジュールで。
--- - hosts: webservers become: true tasks: - name: Copy content to file copy: content='Hello World Niranjan
' dest=/home/ansible/niranjan.txt
例えば、
copy: src=/home/ansible/niranjan.txt dest=/tmp/niranjan.txt
例7: 文字列のすべてのインスタンスを置き換えます。
使用する 交換 モジュールある単語を別の単語に置き換えることができます。 replaceモジュールには、「path」、「regexp」(特定の単語を検索するため)、「replace」(置換用に別の単語を提供する)の3つのパラメーターが必要です。
- hosts: webservers tasks: - name: Replace example replace: path: /home/ansible/niranjan.txt regexp: 'hello' replace: 'world'
例8: アーカイブまたはZIPファイルとフォルダ
Ansibleの使用 アーカイブ モジュールでは、ファイルまたはフォルダを「zip」、「。gz」、または「bz2」形式に圧縮できます。
注意 : 圧縮するファイルまたはフォルダーは、ターゲットサーバーで使用可能であり、tar、bzip2、gzip、zipファイルのパッケージがインストールされている必要があります。これらのパッケージをインストールするための個別のプレイブックタスクを持つことができます。
--- - hosts: all become: true tasks: - name: Ansible zip file example archive: path: /home/ansible/niranjan.txt dest: /home/ansible/niranjan.zip format: zip
上記のプレイブックは、ファイルniranjan.txtをniranjan.zipファイルに圧縮します。
--- - hosts: all tasks: - name: Ansible zip multiple files example archive: path: - /home/ansible/niranjan1.txt - /home/ansible/niranjan2.txt dest: /home/ansible/niranjan.zip format: zip
上記のプレイブックは、複数のファイルをniranjan.zipファイルに圧縮します。
- hosts: all tasks: - name: Ansible zip directory example archive: path: - /home/ansible dest: /home/ansible/niranjan.zip format: zip
上記のプレイブックは、/ home / ansibleディレクトリ内のすべてのファイルを圧縮します。
例9: 日付とタイムスタンプの操作
システムの日付とタイムスタンプを使用すると、特定のステータスまたはログ記録の目的に役立ちます。 Ansibleファクトは、リモートサーバーまたはターゲットサーバーの日付と時刻へのアクセスを提供します。だから私たちは使用することができます デバッグモジュール と一緒に出力を印刷するには どこ 以下に示す属性。
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.date
上記のプレイブックには日付が表示されています。
--- - hosts: webservers become: true tasks: - name: Date and Time Example in Ansible debug: var=ansible_date_time.time
上記のプレイブックは時間を表示します。
- hosts: all tasks: - name: Ansible timestamp filename example command: touch niranjan{{ansible_date_time.date}}.log
上記のプレイブックは、の現在の日付に基づいて動的ファイルを作成します 例えば 。 niranjan2018-07-15.log
例10: 変数の例
変数は値を格納するために使用されます。以下の例では、変数を宣言しています 名前 価値のある ニランジャン 。出力は次のようになります ニランジャン 。
- hosts: all vars: name: niranjan tasks: - name: Ansible Basic Variable Example debug: msg: '{{ name }}'
以下のように、配列または変数のリストを作成することもできます。 例 。
- hosts: all vars: name: - Vasudevamurthy - Niranjan tasks: - name: Ansible Array Example debug: msg: '{{ name(1) }}'
配列のインデックス付けは、ゼロ(0)から始まります。したがって、上記の例の出力はNiranjanになります。
例11: レジスタ変数
タスクの出力をレジスタ変数にキャプチャすることもできます。
- hosts: all tasks: - name: Ansible register variable basic example shell: 'find *.txt' args: chdir: '/home/Ansible' register: reg_output - debug: var: reg_output
注:表示するには– msg属性を使用し、値をキャプチャするには–debugモジュールのvar属性を使用します
例12: ターゲットサーバーまたはマシンにvimエディターとGITをインストールするためのプレイブック。
このプレイブックでは、 ヤム ソフトウェアパッケージの最新バージョンをインストールするモジュール。
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=vim,git state=latest
例13: Apacheサーバーをインストールします。以下のコードを保存し、以下に示すようにプレイブックを実行します。
--- - hosts: webservers become: true tasks: - name: Install Package yum: name=httpd state=present - name: Start httpd service service: name=httpd state=started
離れて ヤム モジュール、 サービス モジュールは、httpdサービスを開始するためにも使用されます。タスクは上から下に同期して実行されます。
例14: JDKをインストールします
次のハンドブックは、すべてのターゲットマシンまたはサーバーにJDK8をインストールするように自動化します。 JDKは、MavenやTomcatなどの他のほとんどのソフトウェアパッケージの前提条件です。
--- - hosts: webservers become: true vars: download_url: http://download.oracle.com/otn-pub/java/jdk/8u171-b11/512cd62ec5174c3487ac17c61aaa89e8/jdk-8u171-linux-x64.rpm tasks: - name: Download JDK 8 RPM file command: 'wget --no-check-certificate --no-cookies --header 'Cookie: oraclelicense=accept-securebackup-cookie' {{download_url}} ' - name: Install JDK 8 command: 'rpm -ivh jdk-8u171-linux-x64.rpm'
例15: Mavenをインストールします
実行されるタスクは、URLからMavenファイルをダウンロードすることです。 get_url モジュール、ダウンロードしたファイルを抽出し、それをより小さなディレクトリに移動し、Mavenがパスに追加されているプロファイルを更新して実行します。
--- - hosts: webservers become: true tasks: - name: Download Maven get_url: url=http://www-us.apache.org/dist/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz dest=/opt/niranjan/apache-maven-3.5.3-bin.tar.gz - name: Extract Maven command: tar xvf /opt/niranjan/apache-maven-3.5.3-bin.tar.gz -C /opt/niranjan - name: Move to a smaller directory command: mv /opt/niranjan/apache-maven-3.5.3 /opt/niranjan/maven - name: Update Profile copy: content='export M2_HOME=/opt/niranjan/maven
' dest=/etc/profile.d/maven.sh # lineinfile is used to add additional or append lines to existing files. - lineinfile: path: /etc/profile.d/maven.sh line: 'export PATH=${M2_HOME}/bin:${PATH}' - name: Source profile shell: source /etc/profile.d/maven.sh
例16: Tomcat8をインストールします
以下のプレイブックは、Tomcat8をターゲットマシンまたはサーバーにインストールして起動するのに役立ちます。
c ++インタビューの質問と回答pdf
クリックできます ここに Tomcat8の最新バージョンのリンクの場所をコピーするには ここに このハンドブックで使用したTomcat8tarファイルを含むURL。
--- - hosts: webservers become: true gather_facts: no tasks: - name: Download Tomcat get_url: url=http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.32/bin/apache-tomcat-8.5.32.tar.gz dest=/home/ansible - name: Extract the file downloaded tomcat file command: tar xvf apache-tomcat-8.5.32.tar.gz - name: Move the Tomcat directory to a smaller one command: mv apache-tomcat-8.5.32 tomcat - name: Change Ownership and group of the Tomcat directory file: path=/home/ansible/tomcat owner=ansible group=ansible mode=775 state=directory recurse=yes - name: Start Tomcat command: nohup /home/ansible/tomcat/bin/startup.sh # Execute command even after you have exited from the shell prompt become: true become_user: ansible
例17: pre_tasks、post_tasks、およびタグ
使用できます pre_tasksとpost_tasks メインタスクの実行前または実行後に特定のタスクを実行します。
通常、プレイブックには、実行されるタスクが非常に多くあります。特定のタスクのみを実行する必要がある場合はどうなりますか?タグはそれに対する答えです。 3つのオプションすべてを含む以下のオプションを見てみましょう。 2つのタスクがあります。1つはTAGあり、もう1つはTAGなしです。
--- - name: Pre , Post tasks and Tags example hosts: localhost become: true tags: - niranjan pre_tasks: - debug: msg='Started task with tag - niranjan. tasks: - name: Going to execute the main task debug: msg='Currently in the target server' post_tasks: - debug: msg='Completed task with tag - niranjan. - name: Play without tags hosts: localhost become: true tasks: - name: Command to list files shell: ls -lrt > niranjan.txt
–list-tagsオプションを使用してプレイブックを実行しているときに何が起こるか見てみましょう
$ ansible-playbook preposttagseg.yml --list-tags
上記の出力はより良く、明確に見えます。 Play#1にはタグniranjanがありますが、Play#2にはタグがありません。
タグniranjanを使用してタスクを実行する必要がある場合、実行するコマンドは次のようになります。
$ ansible-playbook preposttagseg.yml --tags niranjan
2回目の再生は実行されず、ファイルは作成されません。
例18: ハンドラー
すべてのソフトウェアパッケージには構成ファイルがあり、それに対する変更はサービスが再起動されたときにのみ有効になります。したがって、サービスを再起動するように設定する必要があります。ために 例えば。 以下のプレイブックでは、複数回実行すると、変更の有無に関係なくサービスが再起動しますが、これは正しくありません。
--- - hosts: webservers tasks: - name: Install the apache Package yum: name=httpd state=latest - name: Copy httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html
# This service below is executed irrespective of changes done or not to any config files - name: Start and Enable httpd service service: name=httpd state= restarted enabled=yes
したがって、構成ファイルに変更が加えられた場合にのみ、サービスを再起動する必要があります。 ハンドラー その機能を提供します。
したがって、ハンドラーを使用した適切なフローは、 通知する オプション。
--- - hosts: webservers become: true tasks: - name: Install httpd package yum: name=httpd state=latest - name: Copy the httpd configuration file copy: src=/home/ansible/httpd.final dest=/etc/httpd/conf/httpd.conf - name: Copy index.html file copy: src=/home/ansible/index.html dest=/var/www/html notify: - restart httpd - name: Start httpd service service: name=httpd state=started enabled=yes handlers: - name: restart httpd service: name=httpd state=restarted
そのため、初めてApacheサーバーがインストールされて起動されます。変更を加えずにプレイブックを再実行しても、httpdサービスはすでに開始されているため再起動しません。
構成ファイルに変更があった場合、またはHTMLファイルが変更された場合、プレイブックが実行されると、ハンドラーはサービスを再起動するように通知されます。通知セクションとハンドラーの名前は同じである必要があります。ハンドラーは他のタスクと同じように作成されますが、変更があった場合にのみ呼び出されます。
Ansible Vault
機密データをプレイブックで保護する必要がある場合、ほとんどの場合、すべての人が読み取れるテキストファイルに保存するのではなく、暗号化することができます。 Ansible Vaultを使用すると、ハンドブックを暗号化して機密データを保護できます。
Javaプラットフォームのコンポーネントは何ですか?
例えば、機密の雇用契約がコピーされている次のタスクを検討してください。
このような場合、AnsibleVaultが必要になります。
--- - hosts: webservers become: true tasks: - name: Copying Confidential Job Agreement copy: content='This is a Confidential Job Agreement' dest=/home/ansible/jobagreement.txt
上記のプレイブックファイルを暗号化するために必要な手順は次のとおりです。
#1)新しい暗号化ファイルの作成
ボールトを使用して新しい暗号化ファイルを作成するには、 ansible-vault create コマンド。
$ ansible-vault create jobagreement.yml
パスワードを確認すると、編集ウィンドウが開き、ファイルにコンテンツが追加されます。
Ansibleは、ファイルを閉じるときにコンテンツを暗号化します。実際のコンテンツを表示する代わりに、暗号化されたブロックが表示されます。
#2)既存のymlファイルを暗号化するには、以下を使用します
$ ansible-vault encrypt existingfile.yml
パスワードは再び暗号化を求められます。
#3)暗号化されたファイルの表示
コマンドを使用する ansible-vaultビュー ファイルの実際の内容を確認します。
$ ansible-vault view jobagreement.yml
ファイルの内容を確認するために、もう一度パスワードの入力を求められます。
#4)暗号化されたファイルの編集
ファイルを編集する必要がある場合は、コマンドを使用します ansible-vault編集
$ ansible-vault edit users.yml
パスワードを入力してファイルを編集します。
#5)暗号化されたファイルのパスワードを変更する
コマンドを使用する ansible-vaultキーの再生成 ファイルのパスワードを変更します。
$ ansible-vault rekey jobagreement.yml
#6)暗号化されたAnsibleプレイブックファイルを実行する
ansible-playbookコマンドでオプション–ask-vault-passを使用します。
$ ansible-playbook users.yml --ask-vault-pass
#7)暗号化されたファイルを手動で復号化する
コマンドansible-vaultdecryptコマンドを使用します。
$ ansible-vault decrypt jobagreement.yml
概要
このチュートリアルでは、構成管理の2つの最も重要な側面を確認しました。 AnsiblePlaybookとAnsibleVaultsを使用した機密データの保護。
上記のプレイブックの例は、ソフトウェア配信中にさまざまなシナリオでさまざまなタスクを自動化する方法についてのアイデアを提供します。
今後のチュートリアルでは、Ansibleロールを使用してPlaybookをモジュール化し、Jenkinsと統合する方法と、AWSインスタンスを管理するためのAnsible S3およびEC2モジュール(EC2インスタンスの作成と終了)を操作するための最も重要な側面について説明します。
推奨読書
- Ansibleチュートリアル:Ansibleモジュールを使用したインストールと使用法
- SeeTest Automationコマンド:例を含む詳細な説明
- Ansibleロール、DevOpsでのJenkinsとの統合、およびEC2モジュール
- トップ5の最も人気のあるテスト自動化フレームワークを使用してテストスクリプトを開発する方法(例)
- スクリプトレステスト自動化フレームワーク:ツールと例
- 例を含むPythonDateTimeチュートリアル
- 例を使用したUnixのカットコマンド
- テスト自動化–それは専門的なキャリアですか?通常のテスターも自動化を行うことができますか?