diff --git a/README.ja.md b/README.ja.md index 19bb85934..a831506a5 100644 --- a/README.ja.md +++ b/README.ja.md @@ -1,41 +1,46 @@ # Red Hat Ansible Automation Platform Workshops -**Read this in other languages**: -
![uk](./images/uk.png) [English](README.md), ![japan](./images/japan.png)[日本語](README.ja.md) +**他の言語でもお読みいただけます**: +
![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png)[日本語](README.ja.md) Red Hat Ansible Automation Workshops -プロジェクトは、インストラクター主導のワークショップまたは自己ペースで、Ansible の機能を効果的にデモンストレーションすることを目的としています。 +プロジェクトは、インストラクター主導のワークショップまたは自己ペースの演習で、Ansible +の機能を効果的にデモンストレーションすることを目的としています。 ## Web サイト -- [http://ansible.github.io/workshops](http://ansible.github.io/workshops) - -[Github ページ](https://pages.github.com/) を使用してマークダウンファイルから自動的にレンダリングされるオプションの -Web サイトをご覧ください。既に Web サイトを閲覧している場合は、このセクションは無視してください。 +- [http://aap2.demoredhat.com](http://aap2.demoredhat.com) - [Github +ページ](https://pages.github.com/) を使用してマークダウンファイルから自動的にレンダリングされるオプションの Web +サイトをご覧ください。既に Web サイトを閲覧している場合は、このセクションは無視してください。 ## インストラクター主導のワークショップ 6 時間のワークショップ: - -| ワークショップ | プレゼンテーションデッキ | 演習 | Workshop Type Var | -|---|---|---|---| -| **Ansible Red Hat Enterprise Linux ワークショップ**
主に Red Hat Enterprise Linux のような自動化 Linux プラットフォーム | [Deck](./decks/ansible_rhel.pdf) | [演習](./exercises/ansible_rhel) | `workshop_type: rhel` | -| **Ansible Network Automation ワークショップ**
主に Arista、Cisco、Juniper | [Deck](./decks/ansible_network.pdf) | [演習](./exercises/ansible_network) | `workshop_type: network` | -| **Ansible F5 ワークショップ**
主に F5 BIG-IP の自動化 | [Deck](./decks/ansible_f5.pdf) | [演習](./exercises/ansible_f5) | `workshop_type: f5` | -| **Ansible Security 自動化**
主に Check Point Firewall、IBM QRadar や IDS Snort | [Deck](./decks/ansible_security.pdf) | [演習](./exercises/ansible_security) | `workshop_type: security` | -| **Ansible Windows Automation ワークショップ**
主に Microsoft Windows の自動化 | [Deck](./decks/ansible_windows.pdf) | [演習](./exercises/ansible_windows) | `workshop_type: windows` | +>**注記** +> +>Google Source は Red Hat 従業員の場合にのみ機能します。一般向けには、PDF が提供されます。 + +| Workshop | Public Deck | Red Hat Internal | Exercises | Workshop Type Var | +|---|---|---|---|---| +| **[Ansible Red Hat Enterprise Linux Workshop](./exercises/ansible_rhel)**
focused on automating Linux platforms like Red Hat Enterprise Linux | [PDF](./decks/ansible_rhel.pdf) | [Google Source](https://docs.google.com/presentation/d/1O2Gj5r_fhjM5Pi5FizrZRInmZ37IlpeKPTP6jSZxEKs/edit?usp=sharing) | [Exercises](./exercises/ansible_rhel) | `workshop_type: rhel` | +| **[Ansible Network Automation Workshop](./exercises/ansible_network)**
focused on router and switch platforms like Arista, Cisco, Juniper | [PDF](./decks/ansible_network.pdf) | [Google Source](https://docs.google.com/presentation/d/1PIT-kGAGMVEEK8PsuZCoyzFC5CIzLBwdnftnUsdUNWQ/edit?usp=sharing) | [Exercises](./exercises/ansible_network) | `workshop_type: network` | +| **[Ansible F5 Workshop](./exercises/ansible_f5)**
focused on automation of F5 BIG-IP | [PDF](./decks/ansible_f5.pdf) | [Google Source](https://docs.google.com/presentation/d/1eSZHx_tVZ59U-nAYysehEXsSAJgLBr9SrgpjOfLUg84) | [Exercises](./exercises/ansible_f5) | `workshop_type: f5` | +| **[Ansible Security Automation](./exercises/ansible_security)**
focused on automation of security tools like Check Point Firewall, IBM QRadar and the IDS Snort | [PDF](./decks/ansible_security.pdf) | [Google Source](https://docs.google.com/presentation/d/19gVCBz1BmxC15tDDj-FUlUd_jUUUKay81E8F24cyUjk/edit?usp=sharing) | [Exercises](./exercises/ansible_security) | `workshop_type: security` | +| **[Ansible Windows Automation Workshop](./exercises/ansible_windows)**
focused on automation of Microsoft Windows | [PDF](./decks/ansible_windows.pdf) | [Google Source](https://docs.google.com/presentation/d/1fGHBNpkvXBfwBC385QswcSOBz0xNzDxEc8ZhbuyIoAE) | [Exercises](./exercises/ansible_windows) | `workshop_type: windows` | +| \[WIP\] **[Smart Management Automation Workshop](./exercises/ansible_smart_mgmt)**
focused on automation of security and lifecycle management with Red Hat Satellite Server | - | - | [Exercises](./exercises/ansible_smart_mgmt) | `workshop_type: smart_mgmt` 90 分の短縮バージョン: -| ワークショップ | プレゼンテーションデッキ | 演習 | Workshop Type Var | -|---|---|---|---| -| **Ansible Red Hat Enterprise Linux ワークショップ**
主に Red Hat Enterprise Linux の自動化 | [Deck](./decks/ansible_rhel_90.pdf) | [演習](./exercises/ansible_rhel_90) | `workshop_type: rhel_90` | +| Workshop | Public Deck | Red Hat Internal | Exercises | Workshop Type Var | +|---|---|---|---|---| +| **[Ansible Red Hat Enterprise Linux Workshop](./exercises/ansible_rhel_90)**
focused on automating Linux platforms like Red Hat Enterprise Linux | [PDF](./decks/ansible_rhel_90.pdf) | [Google Source](https://docs.google.com/presentation/d/1PY1uMh76ChJ0l4v4EANkzwWGXOIT4ktzyu2QOE2MKIk) | [Exercises](./exercises/ansible_rhel_90) | `workshop_type: rhel_90` | ## 自己ペースの演習 -- [Vagrant Lab](vagrant-demo) - 個人のラップトップで実行できる自己ペースのネットワーク自動化演習 - [Katacoda -ラボ](https://developers.redhat.com/products/ansible/getting-started) - -developers.redhat.com での自己ペースのブラウザーで行える演習。Ansible をはじめる (Getting Started -with Ansible) には、複数のレッスンがあります。 +- [Ansible Automation Platform 自己ペースラボ +](https://www.redhat.com/ja/engage/redhat-ansible-automation-202108061218) - +このインタラクティブな学習シナリオが提供する事前設定済みの Ansible Automation Platform +環境により、プラットフォームが実際の問題の解決にどのように役立つかを体験し、学習し、理解することができます。この環境はすべてご自分のブラウザーで実行されるので、お好きな時にご自分のペースで弊社のテクノロジーをより詳しく知ることができます。 ## 製品デモ @@ -44,7 +49,8 @@ with Ansible) には、複数のレッスンがあります。 ## ワークショップのドキュメント -- [貢献方法](docs/contribute.md) - [AWS Lab Provisioner +- [ワークショップ参加用 Web サイト](docs/attendance/attendance.md) - +[貢献方法](docs/contribute.md) - [AWS Lab Provisioner の使い方](provisioner/README.md) - [FAQ](docs/faq.md) - [リリースプロセス](docs/release.md) @@ -54,27 +60,45 @@ with Ansible) には、複数のレッスンがあります。 のトライアルサブスクリプションの取得](http://red.ht/try_ansible) - [Ansible Blog - The Inside Playbook](https://www.ansible.com/blog) - [Ansible YouTube](https://youtube.com/ansibleautomation) - [Ansible -入門ガイド](https://docs.ansible.com/ansible/latest/user_guide/index.html#get) - -[Ansible Network Automation - -入門](https://docs.ansible.com/ansible/latest/network/getting_started/index.html) +スタートガイド](https://docs.ansible.com/ansible/latest/user_guide/index.html#get) +- [Ansible Network Automation - +スタートガイド](https://docs.ansible.com/ansible/latest/network/getting_started/index.html) +- [Red Hat Ansible Automation Platform 向け Red Hat +トレーニングと認定資格](https://red.ht/aap_training) + +## Slack コミュニティー + +- [Ansible Network Slack +に参加する](https://join.slack.com/t/ansiblenetwork/shared_invite/zt-3zeqmhhx-zuID9uJqbbpZ2KdVeTwvzw) ## 電子書籍 - [The Automated Enterprise](https://www.redhat.com/en/engage/automated-enterprise-ebook-20171107?intcmp=7013a000002DXg8AAG) -- Ansible Security Automation - - - [Simplify your security operations - center](https://www.redhat.com/en/resources/security-automation-ebook?extIdCarryOver=true&sc_cid=7013a000002gyQ2AAI) -- Ansible ネットワークオートメーション +### Ansible Network Automation 向け電子書籍 - - [Part 1: Red Hat + - [パート 1: Red Hat によるネットワークの近代化](https://www.ansible.com/resources/ebooks/network-automation-for-everyone?hsLang=en-us) - - [Part 2: Red Hat - によるネットワークの自動化](https://www.ansible.com/resources/ebooks/automate-your-network?hsLang=en-us) + - [パート 2: Red Hat + によるネットワークの自動化](https://www.redhat.com/en/engage/network-automation-ebook-s-202104291219) -- [Ansible.com のその他電子書籍](https://www.ansible.com/resources/ebooks) +#### その他の言語 + + - ![chinese](https://github.com/ansible/workshops/raw/devel/images/cn.png) + [借助红帽实现网络自动化](https://www.redhat.com/rhdc/managed-files/ma-network-automation-technical-e-book-f28378-202104-a4-zh.pdf) + - ![french](https://github.com/ansible/workshops/raw/devel/images/fr.png) + [Automatiser votre réseau avec Red + Hat](https://www.redhat.com/rhdc/managed-files/ma-network-automation-technical-e-book-f28378-202104-a4-fr.pdf) + - ![italian](https://github.com/ansible/workshops/raw/devel/images/it.png) + [Automatizzare la rete con Red + Hat](https://www.redhat.com/rhdc/managed-files/ma-network-automation-technical-e-book-f28378-202104-a4-it.pdf) + +### Ansible Security Automation 向け電子書籍 + + - [Simplify your security operations + center](https://www.redhat.com/en/resources/security-automation-ebook?extIdCarryOver=true&sc_cid=7013a000002gyQ2AAI) --- -![Red Hat Ansible Automation](images/rh-ansible-automation-platform.png) +![Red Hat Ansible +Automation](https://github.com/ansible/workshops/raw/devel/images/rh-ansible-automation-platform.png) diff --git a/exercises/ansible_collections/1-create-collections/README.ja.md b/exercises/ansible_collections/1-create-collections/README.ja.md new file mode 100644 index 000000000..ced5d5cfe --- /dev/null +++ b/exercises/ansible_collections/1-create-collections/README.ja.md @@ -0,0 +1,648 @@ +# 演習 1 - コレクションのインストールと作成 + +## 目次 + +- [目的](#objective) +- [ガイド](#guide) + - [ステップ 1: + コマンドラインからのコレクションのインストール](#step-1-installing-collections-from-the-command-line) + - [演習環境の準備](#preparing-the-cgi-environment) + - [デフォルトのコレクションパスでのインストール](#installing-in-the-default-collections-path) + - [カスタムコレクションパスでのインストール](#instaling-in-a-custom-collections-path) + - [コレクションの内容の検証](#inspecting-the-contents-of-the-collection) + - [ステップ 2: + コマンドラインからのコレクションの作成](#step-2-creating-collections-from-the-command-line) + - [Git リポジトリーの初期化](#initializing-the-git-repository) + - [ステップ 3: + コレクションへのカスタムモジュールおよびプラグインの追加](#step-3-adding-custom-modules-and-plugins-to-the-collection) + - [ステップ 4: + コレクションへのカスタムロールの追加](#step-4-adding-custom-roles-to-the-collection) + - [ステップ 5: + コレクションの構築とインストール](#step-5-building-and-installing-collections) + - [ステップ 6: ローカルでのコレクションのテスト](#step-6-testing-collections-locally) + - [テスト Playbook の実行](#running-the-test-playbook) + - [ローカルコンテナーの実行](#running-the-local-container) +- [重要なこと](#takeaways) + +# 目的 + +この演習により、ユーザーは、コレクションのインストール、作成、カスタマイズの方法について理解できるようになります。以下のトピックについて説明します。 + +- `ansible-galaxy` ユーティリティーを使用したコマンドラインからの Ansible +コレクションのインストールに関連する手順を紹介します。 - `ansible-galaxy` +ユーティリティーを使用した新しいコレクションの作成に関連する手順を紹介します。 - +新たに作成されたコレクション内でのカスタムロールの作成を紹介します。 - 新しく作成されたコレクションでの新しいカスタムプラグイン (基本的な +Ansible モジュール) の作成を紹介します。 + +# ガイド + +## ステップ 1: コマンドラインからのコレクションのインストール + +Ansible コレクションは、Ansible Galaxy および Red Hat Automation Hub +から検索およびインストールできます。インストール後に、コレクションはローカルで使用でき、そのプラグイン、モジュール、およびロールは、複雑な +Ansible ベースのプロジェクトにインポートして実行できます。 + +### 演習環境の準備 + +ラボに `dir_name` という名前のディレクトリーを作成し、そのディレクトリーに移動します。このディレクトリーは、演習全体で使用されます。 + +```bash +mkdir exercise-01 +cd exercise-01 +``` + +コレクションには、検索されるデフォルトの検索パスが 2 つあります。 + +- ユーザースコープパス `/home//.ansible/collections` + +- システムスコープパス `/usr/share/ansible/collections` + +> **ヒント**: ユーザーは、 +> `ansible.cfg` ファイルの `collections_path` キーを変更するか、または環境変数 `ANSIBLE_COLLECTIONS_PATHS` を必要な +> 検索パスで設定することで、コレクションパスをカスタマイズすることができます。 + +### デフォルトのコレクションパスでのインストール + +まず、ユーザースコープパスにコレクションをインストールする方法を説明します。簡素化するために、コレクション +[newswangerd.collection_demo](https://galaxy.ansible.com/newswangerd/collection_demo) +を使用します。これは、デモ目的で作成された基本的なコレクションです。 + +これには基本的なロールと非常にシンプルなモジュールが含まれており、モジュールやロールロジックに関与せずに、コレクションがどのように機能するかを理解するための良い例となります。 + +追加オプションを指定せずに `ansible galaxy collection install` コマンドを使用し、コレクションをインストールします。 + +```bash +$ ansible-galaxy collection install newswangerd.collection_demo +Process install dependency map +Starting collection install process +Installing 'newswangerd.collection_demo:1.0.10' to '/home//.ansible/collections/ansible_collections/newswangerd/collection_demo' +``` + +コレクションがユーザーのホームディレクトリーにインストールされ、Playbook およびロールで使用できるようになりました。 + +### カスタムコレクションパスでのインストール + +`-p` フラグの後にカスタムインストールパスを使用して、現在の作業ディレクトリーにコレクションをインストールします。 + +```bash +ansible-galaxy collection install -p . newswangerd.collection_demo +``` + +> **注記**: コレクション検索パスに含まれていないカスタムパスにインストールする場合は、標準の警告メッセージが発行されます: +> +> ```bash +> [WARNING]: The specified collections path '/home/gbsalinetti/Labs/collections-lab' is not part of the configured Ansible collections paths +> '/home/gbsalinetti/.ansible/collections:/usr/share/ansible/collections'. The installed collection won't be picked up in an Ansible run. +> ``` + +インストールされたパスは、標準のパターン `ansible_collections//` に従います。 + +`tree` コマンドを実行してコンテンツを検証します。 + +```bash +$ tree +. +└── ansible_collections + └── newswangerd + └── collection_demo + ├── docs + │   └── test_guide.md + ├── FILES.json + ├── MANIFEST.json + ├── plugins + │   └── modules + │   └── real_facts.py + ├── README.md + ├── releases + │   ├── newswangerd-collection_demo-1.0.0.tar.gz + │   ├── newswangerd-collection_demo-1.0.1.tar.gz + │   ├── newswangerd-collection_demo-1.0.2.tar.gz + │   ├── newswangerd-collection_demo-1.0.3.tar.gz + │   ├── newswangerd-collection_demo-1.0.4.tar.gz + │   └── newswangerd-collection_demo-1.0.5.tar.gz + └── roles + ├── deltoid + │   ├── meta + │   │   └── main.yaml + │   ├── README.md + │   └── tasks + │   └── main.yml + └── factoid + ├── meta + │   └── main.yaml + ├── README.md + └── tasks + └── main.yml +``` + +### コレクションの内容の検証 + +コレクションには、モジュール、プラグイン、ロール、および Playbook を保持できる標準的な構造があります。 + +```bash +collection/ +├── docs/ +├── galaxy.yml +├── plugins/ +│ ├── modules/ +│ │ └── module1.py +│ ├── inventory/ +│ └── .../ +├── README.md +├── roles/ +│ ├── role1/ +│ ├── role2/ +│ └── .../ +├── playbooks/ +│ ├── files/ +│ ├── vars/ +│ ├── templates/ +│ └── tasks/ +└── tests/ +``` + +コレクション構造の簡単な説明: + +- `plugins` フォルダーは、Playbook およびロールで再利用できるプラグイン、モジュール、および module_utils + を保持します。 +- `roles` フォルダーは、カスタムロールをホストしますが、すべてのコレクション Playbook は `playbooks` + フォルダーに保存する必要があります。 +- `docs` フォルダーは、コレクションのドキュメントや、コレクションおよびそのコンテンツの記述に使用されるメインの `README.md` + ファイルに使用できます。 +- `tests` フォルダーは、コレクション用に記述されたテストを保持します。 +- `galaxy.yml` ファイルは、コレクションをインデックス化するために Ansible Galaxy ハブで使用されるすべてのメタデータを含む + YAML テキストファイルです。また、コレクションの依存関係を一覧表示するためにも使用されます(ある場合)。 + +`ansible-galaxy collection install` でコレクションをダウンロードすると、さらに 2 +つのファイルがインストールされます。 + +- `MANIFEST.json`: JSON 形式で追加の Galaxy メタデータを保持します。 + +- `FILES.json`: すべてのファイルの SHA256 チェックサムが含まれる JSON オブジェクト。 + +## ステップ 2: コマンドラインからのコレクションの作成 + +ユーザーは独自のコレクションを作成し、それらにロール、Playbook、プラグイン、およびモジュールを設定することができます。ユーザー定義のコレクションのスケルトンは、手動で作成するか、`ansible-galaxy +collection init` コマンドで作成することができます。これにより、後でカスタマイズできる標準スケルトンが作成されます。 + +以下のコレクションを作成します。 + +```bash +ansible-galaxy collection init --init-path ansible_collections redhat.workshop_demo_collection +``` + +`--init-path` フラグは、スケルトンが初期化されるカスタムパスを定義するために使用されます。 +コレクション名は常にパターン `` に従います。上記の例では、 +`redhat` namespace に `workshop_demo_collection` を作成します。 + +このコマンドは、以下のスケルトンを作成しました。 + +```bash +$ tree ansible_collections/redhat/workshop_demo_collection/ +ansible_collections/redhat/workshop_demo_collection/ +├── docs +├── galaxy.yml +├── plugins +│   └── README.md +├── README.md +└── roles +``` + +スケルトンは実際には最小限です。テンプレートの README ファイルのほかに、Galaxy メタデータを定義するテンプレート `galaxy.yml` +ファイルが作成されます。 + +### Git リポジトリーの初期化 + +Galaxy でコレクションを公開する場合は、コレクションで Git リポジトリーを初期化することが推奨されます。 + +```bash +cd ansible_collections/redhat/workshop_demo_collection && git init . +``` + +変更すると、`git add` を使用してステージングエリアにファイルが追加され、`git commit` コマンドでコミットされます。 + +GitHub でコレクションを公開するには、リモートを追加する必要があります。 + +```bash +git remote add origin https://github.com//workshop_demo_collection.git +``` + +`workshop_demo_collection` リポジトリーは GitHub +にすでに存在している必要があります。新しいリポジトリーを作成するには、公式の GitHub +[ドキュメント](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-new-repository). +に従ってください。 + +## ステップ 3: コレクションへのカスタムモジュールおよびプラグインの追加 + +コレクションは、さまざまな種類のプラグインおよびモジュールでカスタマイズできます。完全な一覧は、`plugins` フォルダーの `README.md` +ファイルを参照してください。 + +このワークショップでは、最小限の *Hello World* モジュールを作成し、`plugins/modules` +ディレクトリーにインストールします。 + +まず、`plugins/modules` ディレクトリーを作成します。 + +```bash +cd ansible_collections/redhat/workshop_demo_collection +mkdir plugins/modules +``` + +新しいフォルダーに `demo_hello.py` モジュールを作成します。モジュールコードは、この演習の `solutions/modules` +フォルダーにあります。 + +```bash +cp /workshops/exercises/ansible_collections/1-create-collections/modules/demo_hello.py plugins/modules/ +``` + +`demo_hello` モジュールは、カスタム定義されたユーザーにさまざまな言語で Hello +と言います。時間をかけてモジュールコードを確認し、その動作を理解してください。 + +```bash +#!/usr/bin/python + + +ANSIBLE_METADATA = { + 'metadata_version': '1.0', + 'status': ['preview'], + 'supported_by': 'community' +} + +DOCUMENTATION = ''' +--- +module: demo_hello +short_description: A module that says hello in many languages +version_added: "2.8" +description: + - "A module that says hello in many languages." +options: + name: + description: + - Name of the person to salute. If no value is provided the default + value will be used. + required: false + type: str + default: John Doe +author: + - Gianni Salinetti (@giannisalinetti) +''' + +EXAMPLES = ''' +# Pass in a custom name +- name: Say hello to Linus Torwalds + demo_hello: + name: "Linus Torwalds" +''' + +RETURN = ''' +fact: + description: Hello string + type: str + sample: Hello John Doe! +''' + +import random +from ansible.module_utils.basic import AnsibleModule + + +FACTS = [ + "Hello {name}!", + "Bonjour {name}!", + "Hola {name}!", + "Ciao {name}!", + "Hallo {name}!", + "Hei {name}!", +] + + +def run_module(): + module_args = dict( + name=dict(type='str', default='John Doe'), + ) + + module = AnsibleModule( + argument_spec=module_args, + supports_check_mode=True + ) + + result = dict( + changed=False, + fact='' + ) + + result['fact'] = random.choice(FACTS).format( + name=module.params['name'] + ) + + if module.check_mode: + return result + + module.exit_json(**result) + + +def main(): + run_module() + + +if __name__ == '__main__': + main() +``` + +Ansible モジュールは基本的に、`run_module()` と呼ばれる最小限の関数で作成され、実行される AnsibleModule +クラスの実装になります。ご覧のとおり、モジュールには、プレーンな Python 実行可能ファイルのような `main()` +関数があります。ただし、個別に実行することは意図されていません。 + +## ステップ 4: コレクションへのカスタムロールの追加 + +この演習の最後のステップは、カスタムコレクション内のロール作成に重点を置いています。以前のモジュールを使用して、index.html +内でグリーティングを動的に生成し、podman で OCI +イメージ内にビルドする基本的なロールをデプロイします。イメージは最終的にカスタマイズ可能なプライベートレジストリーにプッシュされます。 + +> **ヒント**: ラボの速度を上げる場合は、演習 `solutions/roles` フォルダーから完了したロールをコピーできます。 + +`ansible-galaxy init` コマンドを使用して、新しいロールスケルトンを生成します。 + +```bash +ansible-galaxy init --init-path roles demo_image_builder +``` + +`roles/demo_image_builder/tasks/main.yml` ファイルに以下のタスクを作成します。 + +```yaml +--- +# tasks file for demo_image_builder +- name: Ensure podman is present in the host + dnf: + name: podman + state: present + become: true + +- name: Generate greeting and store result + demo_hello: + name: "{{ friend_name }}" + register: demo_greeting + +- name: Create build directory + file: + path: "{{ build_dir_path }}" + state: directory + mode: 0755 + +- name: Copy Dockerfile + copy: + src: files/Dockerfile + dest: "{{ build_dir_path }}" + mode: 0644 + +- name: Copy custom index.html + template: + src: templates/index.html.j2 + dest: "{{ build_dir_path }}/index.html" + mode: 0644 + +- name: Build and Push OCI image + podman_image: + name: demo-nginx + path: "{{ build_dir_path }}" + build: + annotation: + app: nginx + function: demo + info: Demo app for Ansible Collections workshop + format: oci + push: true + force: true + push_args: + dest: "{{ image_registry }}/{{ registry_username }}" +``` + +コレクションにインストールされている `demo_hello` モジュールを使用して、greeting 文字列を生成することに注意してください。 + +> **注記**: コレクションロールが同じコレクション namespace のモジュールを呼び出すと、モジュールは自動的に解決されます。 + +`roles/demo_image_builder/defaults/main.yml` に以下の変数を作成します。 + +```yaml +--- +# defaults file for demo_image_builder +friend_name: "John Doe" +build_dir_path: "/tmp/demo_nginx_build" +image_registry: "quay.io" +registry_username: "" +``` + +`roles/demo_image_builder/files/` フォルダーでビルドプロセスで使用される Dockerfile を作成します。 + +```bash +cat > roles/demo_nginx/files/ << EOF +FROM nginx +COPY index.html /usr/share/nginx/html +EOF +``` + +`roles/demo_image_builder/templates/` フォルダーで Jinja2 テンプレートとして動作する +index.html.j2 ファイルを作成します。 + +```bash +cat > roles/demo_image_builder/templates/index.html.j2 << EOF + + + + + + + Ansible Collections Workshop + + + + + + + + +

+ {{ demo_greeting.fact }} +

+ + +EOF +``` + +スケルトンは、完全な構造ファイルとフォルダーを生成します。未使用のものはクリーンアップできます。 + +```bash +rm -rf roles/demo_image_builder/{handlers,vars,tests} +``` + +`roles/demo_image_builder/meta/main.yml` ファイルをカスタマイズして、Galaxy +メタデータおよびロールの潜在的な依存関係を定義します。以下の最小限のコンテンツのサンプルを使用します。 + +```yaml +galaxy_info: + author: Ansible Automation Platform Hackathon Team + description: Basic builder role based on podman + company: Red Hat + + license: Apache-2.0 + + min_ansible_version: 2.8 + + + platforms: + - name: Fedora + versions: + - 31 + - 32 + - 33 + + galaxy_tags: ["demo", "podman"] + +dependencies: [] +``` + +## ステップ 5: コレクションの構築とインストール + +作成タスクが完了したら、コレクションをビルドし、ローカルにインストールしたり、Galaxy にアップロードしたりできる .tar.gz +ファイルを生成できます。 + +コレクションフォルダーから、以下のコマンドを実行します。 + +```bash +ansible-galaxy collection build +``` + +上記のコマンドは、`redhat-workshop_demo_collection-1.0.0.tar.gz` ファイルを作成します。セマンティック +x.y.z バージョンニングに注意してください。 + +作成後、ファイルを `COLLECTIONS_PATH` にインストールし、ローカルでテストできます。 + +```bash +ansible-galaxy collection install redhat-workshop_demo_collection-1.0.0.tar.gz +``` + +デフォルトでは、コレクションは `~/.ansible/collections/ansible_collections` +フォルダーにインストールされます。これで、コレクションをローカルでテストできるようになりました。 + +## ステップ 6: ローカルでのコレクションのテスト + +`exercise-01/collections_test` フォルダーを作成し、ローカルテストを実行します。 + +```bash +cd .. +mkdir collections_test +``` + +以下の内容で基本的な `playbook.yml` ファイルを作成します。 + +```bash +cat > playbook.yml << EOF +--- +- hosts: localhost + remote_user: root + vars: + image_registry: quay.io + registry_username: + friend_name: Heisenberg + tasks: + - import_role: + name: redhat.workshop_demo_collection.demo_image_builder +EOF +``` + +`` フィールドを有効な quay.io ユーザー名に置き換えます。 +テスト Playbook を実行する前に、レジストリーに対して認証を行うための有効な認証トークンがあることを確認します。以下のコマンドを実行し、`~/.docker/config.json` ファイルに保存されているトークンを生成する有効な認証情報を渡すことで、認証することができます。 + +```bash +podman login quay.io +``` + +### テスト Playbook の実行 + +テスト Playbook を実行します。一部のタスクには権限昇格が必要なため、`-K` オプションを使用して sudo 経由で認証します。 + +```bash +$ ansible-playbook playbook.yml -K +BECOME password: +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' + +PLAY [localhost] ************************************************************************************************************************************************************************************************** + +TASK [Gathering Facts] ******************************************************************************************************************************************************************************************** +ok: [localhost] + +TASK [redhat.workshop_demo_collection.demo_image_builder : Ensure podman is present in the host] ****************************************************************************************************************** +ok: [localhost] + +TASK [redhat.workshop_demo_collection.demo_image_builder : Generate greeting and store result] ******************************************************************************************************************** +ok: [localhost] + +TASK [redhat.workshop_demo_collection.demo_image_builder : Create build directory] ******************************************************************************************************************************** +ok: [localhost] + +TASK [redhat.workshop_demo_collection.demo_image_builder : Copy Dockerfile] *************************************************************************************************************************************** +ok: [localhost] + +TASK [redhat.workshop_demo_collection.demo_image_builder : Copy custom index.html] ******************************************************************************************************************************** +changed: [localhost] + +TASK [redhat.workshop_demo_collection.demo_image_builder : Build and Push OCI image] *************************************************************************************************************************************** +changed: [localhost] + +PLAY RECAP ******************************************************************************************************************************************************************************************************** +localhost : ok=7 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +### ローカルコンテナーの実行 + +podman を使用してビルドされたコンテナーイメージをローカルでテストし、コレクションのモジュールおよびロールの予想される動作を示します。 + +```bash +podman run -d --rm -d -p 8080:80 localhost/demo-nginx +``` + +nginx Web サーバーをテストし、ボディーセクションを検査して、h1 セクションで生成された文字列を見つけます。 + +```bash +$ curl localhost:8080 + + + + + + + Ansible Collections Workshop + + + + + + + + +

+ Hei Heisenberg! +

+ + +``` + +# 重要なこと + +- コレクションは、Red Hat Automation Hub の Galaxy +からインストールできます。デフォルトのコレクション検索パスまたはカスタムパスを使用できます。 + +- コレクションは、`ansible-galaxy collection init` +コマンドを使用して作成できます。ユーザーは、ニーズとビジネスロジックに合わせてコレクションコンテンツを開発できます。 + +- コレクションプラグインは、あらゆる種類の Ansible +プラグインまたはモジュールになります。多くの場合、モジュールはコレクション内で開発され、メインの Ansible +アップストリームから自律的なライフサイクルを作成します。 + +- コレクションロールは、ローカルコレクションプラグインおよびモジュールを使用できます。 + +---- +**ナビゲーション** +
+[次の演習](../2-collections-from-playbook) + +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md) diff --git a/exercises/ansible_collections/1-create-collections/solutions/roles/demo_image_builder/README.ja.md b/exercises/ansible_collections/1-create-collections/solutions/roles/demo_image_builder/README.ja.md new file mode 100644 index 000000000..f0395a90e --- /dev/null +++ b/exercises/ansible_collections/1-create-collections/solutions/roles/demo_image_builder/README.ja.md @@ -0,0 +1,48 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role +should be mentioned here. For instance, if the role uses the EC2 module, it +may be a good idea to mention in this section that the boto package is +required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, +including any variables that are in defaults/main.yml, vars/main.yml, and +any variables that can/should be set via parameters to the role. Any +variables that are read from other roles and/or the global scope +(ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in +regards to parameters that may need to be set for other roles, or variables +that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables +passed in as parameters) is always nice for users too: + + - hosts: servers roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or +a website (HTML is not allowed). diff --git a/exercises/ansible_collections/2-collections-from-playbook/README.ja.md b/exercises/ansible_collections/2-collections-from-playbook/README.ja.md new file mode 100644 index 000000000..5a23a9217 --- /dev/null +++ b/exercises/ansible_collections/2-collections-from-playbook/README.ja.md @@ -0,0 +1,158 @@ +# 演習 2: Ansible コレクションの使用 + +## 目次 + +- [目的](#objective) +- [ガイド](#guide) + - [ステップ 1 - Ansible + コレクションのインストール](#step-1---install-the-ansible-collection) + - [ステップ 2 - Ansible Playbook の記述](#step-2---write-an-ansible-playbook) + - [ステップ 3 - Playbook のテスト](#step-3---test-the-playbook) + - [ステップ 4 - namespace の簡素化](#step-4---simplify-the-namespace) + - [ステップ 5: 変更をテストする](#step-5-test-the-change) + +# 目的 + +ラボのこの部分では、Playbook で Ansible コレクションを使用する方法を説明します。Ansible +コレクションから特定のモジュールを識別するには、完全修飾コレクション名を使用する必要があります。この名前は、作成者名、コレクション名、およびモジュール名で成り立っています。 + + .. + +以下の演習では、Ansible Core Team が作成したコレクションを使用します。作成者の名前は "ansible" です。Ansible +Core Team によって書かれたすべてのモジュールとコレクションの一覧は、[Ansible +Galaxy](https://galaxy.ansible.com/ansible). で確認できます。 + +ここでは、コレクションとロールを複数維持しています。これらのコレクションの 1 つは "posix" +と呼ばれます。ドキュメントと詳細については、[Ansible Galaxy POSIX +Collection](https://galaxy.ansible.com/ansible/posix) を参照してください。 + +このコレクションが提供するモジュールの 1 +つで、[SELinux](https://www.redhat.com/en/topics/linux/what-is-selinux) +設定を管理できます。そのため、このモジュールの完全修飾コレクション名は `ansible.posix.selinux` になります。 + +[コレクションの使用](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html)) +の詳細は、[Ansible ドキュメント](https://docs.ansible.com/). を参照してください。 + +# ガイド + +## ステップ 1 - Ansible コレクションのインストール + +本演習に使用する `ansible.posix.selinux` モジュールは、`ansible.posix` +コレクションの一部になります。モジュールを使用する前に、このコレクションを最初にインストールする必要があります。`ansible-galaxy` +コマンドラインツールを使用し、インストールを自動化できます。[Ansible Galaxy](https://galaxy.ansible.com/) +でロールとコレクションを検索するように事前設定されているので、コレクション名を指定するだけで、あとは処理されます。 + + ansible-galaxy collection install ansible.posix + +これにより、システムにコレクションがインストールされますが、まだインストールされていない場合に限ります。インストールを強制するには、たとえば、最新バージョンを使用していることを確認するために、強制スイッチ +`-f` を追加できます + + ansible-galaxy collection install -f ansible.posix + +これにより、すでに最新の状態であっても最新バージョンが常にダウンロードされ、インストールされます。Ansible コレクションには、他の Ansible +コレクションにも依存関係を持つことができます。これらの依存関係も確実に更新する場合は、`--force-with-deps` スイッチを使用できます。 + +デフォルトでは、インストールはローカルの `~/.ansible` ディレクトリーに保存されます。これは、`-p +/path/to/collection` スイッチを使用して上書きできます。ただし、`ansible.cfg` +を適宜変更した場合にのみ、`ansible-playbook` がそのディレクトリを使用することに注意してください。 + +## ステップ 2 - ドキュメント + +`ansible-doc` +コマンドは、システムディレクトリーのみでドキュメントの検索を行います。ただし、完全修飾コレクション名を使用して、Ansible +コレクションからインストールしたモジュールを読み取るために引き続きこれを使用できます。 + +演習の次の部分で使用する `selinux` モジュールのモジュールドキュメントを見てみましょう。 + +```bash +ansible-doc ansible.posix.selinux +``` + +> **注記**: 画面の解像度によっては、ドキュメントビューアを終了するために `q` を押す必要がある場合があります。 + +## ステップ 3 - Ansible Playbook を記述します。 + +SELinux モジュールを使用して、Enforcing モードに設定されていることを確認します。SELinux は、Linux +システムに追加のセキュリティーをもたらすカーネル機能です。これは、常に有効にし、Enforcing モードに保つことが強く推奨されます。SELinux +を初めて使用する場合は、[What is +SELinux](https://www.redhat.com/en/topics/linux/what-is-selinux) +の記事を参照してください。 + +SELinux を有効にし、ローカルマシンで Enforcing モードに設定する簡単な Playbook を記述してみましょう。 + +```yaml +--- +- name: set SELinux to enforcing + hosts: localhost + become: yes + tasks: + - name: set SElinux to enforcing + ansible.posix.selinux: + policy: targeted + state: enforcing +``` + +後で使用するために Playbook を `enforce-selinux.yml` として保存します。 + +> **注記**: モジュール名に特に注意してください。通常、`selinux` のような内容が表示されますが、Ansible コレクションで提供されるモジュールを使用しているため、完全修飾モジュール名を指定する必要があります。 + +## ステップ 4 - Playbook のテスト + +Playbook を実行し、結果を確認します。 + + ansible-playbook enforce-selinux.yml + +以下のような出力が表示されるはずです。 + + [警告]: ホストの一覧が空の場合、ローカルホストのみが使用可能です。暗黙的な localhost は 'all' と一致しないことに注意してください。 + + PLAY [set SELinux to enforcing] *********************************************************************************** + + TASK [Gathering Facts] ******************************************************************************************** + ok: [localhost] + + TASK [set SElinux to enforcing] *********************************************************************************** + ok: [localhost] + + PLAY RECAP ******************************************************************************************************** + localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + +SELinux が Enforcing に設定されていなかった場合は、ok ではなく "changed" が表示されることがあります。"changed" +と表示され、2 回目を実行すると、今度は "ok" と表示されるはずです。これは、[Ansible +の冪等性](https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html). +のマジックになります。 + +## ステップ 5 - namespace の簡素化 + +Playbook で Ansible コレクションから多くのモジュールを使用する場合、. の接頭辞を付けると邪魔となり、Playbook を読むことが困難になる可能性があります。 + +`collections` キー単語を使用すると、すべてのタスクで namespace の定義を省略できます。 + +```yaml +--- +- name: set SELinux to enforcing + hosts: localhost + become: yes + collections: + - ansible.posix + tasks: + - name: set SElinux to enforcing + selinux: + policy: targeted + state: enforcing +``` + +> **注記**: 構文はロールの指定方法と似ていますが、動作が異なります。キーワード `roles` は各ロールで `tasks/main.yml` を実行します。`collections` キーワードは単なるショートカットであるため、タスクでモジュールを使用するたびに作成者と namespace はスキップできます。 + +## ステップ 6: 変更をテストする + +Playbook を再度実行しても、実際には出力に違いは見られないはずです。前述したように、`collections` キーワードは Playbook +を書くことのみを簡素化します。 + +---- +**ナビゲーション** +
+[前の演習](../1-create-collections/) - [次の演習](../3-collections-from-roles) + +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md) diff --git a/exercises/ansible_collections/3-collections-from-roles/README.ja.md b/exercises/ansible_collections/3-collections-from-roles/README.ja.md new file mode 100644 index 000000000..b49a2465d --- /dev/null +++ b/exercises/ansible_collections/3-collections-from-roles/README.ja.md @@ -0,0 +1,298 @@ +# 演習 3 - ロールからのコレクションの実行 + +## 目次 + +- [目的](#objective) +- [ガイド](#guide) + - [ステップ 1: コレクション検索について](#step-1-understand-collections-lookup) + - [ステップ 2: ロールからのコレクションの実行](step-2-running-collections-from-a-role) +- [重要なこと](#takeaways) + +# 目的 + +この演習により、ユーザーは、ロール内からコレクションがどのように使用されるかを理解できるようになります。 + +以下のトピックについて説明します: + +- コレクションの解決ロジックを説明します。 + +- コレクション完全修飾コレクション名 (FQCN) を使用してロールからコレクションを呼び出す方法を説明します。 + +# ガイド + +## ステップ 1: コレクション検索について + +Ansible コレクションは単純な方法を使用してコレクションの namespace を定義します。Playbook が `collections` +キーと 1 つ以上のロールを使用してコレクションを読み込む場合、ロールは Playbook によって設定されたコレクションを継承しません。 + +これは、この演習のメイントピックにつながります。つまり、ロールには、ロールのメタデータに基づいた独立したコレクションの読み込み方法があります。ロール内のタスクのコレクション検索を制御するために、ユーザーは +2 つのアプローチから選択することができます。 + +- **アプローチ 1**: ロール内の `meta/main.yml` ファイル内の `collections` + フィールドでコレクションの一覧を渡します。これにより、ロールによって検索されるコレクションの一覧は、Playbook + のコレクション一覧よりも優先度が高くなります。Ansible は、ロールを呼び出す Playbook が別の `collections` + キーワードエントリーで異なるコレクションを定義する場合でも、ロール内で定義されたコレクション一覧を使用します。 + + ```yaml + # myrole/meta/main.yml + collections: + - my_namespace.first_collection + - my_namespace.second_collection + - other_namespace.other_collection + ``` + +- **アプローチ 2**: ロールのタスクから直接コレクション完全修飾コレクション名 (FQCN) を使用します。これにより、コレクションは常に一意の + FQCN で呼び出され、Playbook の他のルックアップを上書きします。 + + ```yaml + - name: Create an EC2 instance using collection by FQCN + amazon.aws.ec2: + key_name: mykey + instance_type: t2.micro + image: ami-123456 + wait: yes + group: webserver + count: 3 + vpc_subnet_id: subnet-29e63245 + assign_public_ip: yes + ``` + +コレクション **内** +で定義されるロールは、独自のコレクションを常に暗黙的に最初に検索します。そのため、モジュール、プラグイン、またはその他のロールにアクセスするために、ロールメタデータで +`collections` キーワードを使用する必要はありません。 + +## ステップ 2: ロールからのコレクションの実行 + +演習フォルダーを作成します。 + +```bash +mkdir exercise-03 +cd esercise--3 +``` + +このラボでは、`ansible.posix` コレクションを使用します。これには、システム管理用の一連の POSIX +指向モジュールおよびプラグインが含まれます。 + +```bash +ansible-galaxy collection install ansible.posix +``` + +### アプローチ 1: メタデータとして読み込まれたコレクション + +> **ヒント**: 演習のステップを実行したり、`solutions/selinux_manage_meta` から完了したロールをコピーしたりできます。 + +`ansible-galaxy init` コマンドを使用して新しいロールを作成します。 + +```bash +ansible-galaxy init --init-path roles selinux_manage_meta +``` + +`roles/selinux_manage_meta/meta/main.yml` ファイルを編集し、列 1 +から始まるファイルの最後に以下の行を追加します。 + +```yaml +# Collections list +collections: + - ansible.posix +``` + +`roles/selinux_manage_meta/tasks/main.yml` ファイルを編集し、以下のタスクを追加します。 + +```yaml +--- +# tasks file for selinux_manage_meta +- name: Enable SELinux enforcing mode + selinux: + policy: targeted + state: "{{ selinux_mode }}" + +- name: Enable booleans + seboolean: + name: "{{ item }}" + state: true + persistent: true + loop: "{{ sebooleans_enable }}" + +- name: Disable booleans + seboolean: + name: "{{ item }}" + state: false + persistent: true + loop: "{{ sebooleans_disable }}" +``` + +> **注記:** 簡単なモジュール名を使用しています。Ansible は、メタデータファイルの +> `collections` 一覧からの情報を使用し、使用されるコレクションを見つけます。 + +`roles/selinux_manage_meta/defaults/main.yml` を編集して、ロール変数のデフォルト値を定義します。 + +```yaml +--- +# defaults file for selinux_manage_meta +selinux_mode: enforcing +sebooleans_enable: [] +sebooleans_disable: [] +``` + +ロール内の未使用のフォルダーをクリーンアップします。 + +```bash +rm -rf roles/selinux_manage_meta/{tests,vars,handlers,files,templates} +``` + +これで、基本的な Playbook で新しいロールをテストできます。以下の内容で現在のフォルダーに `playbook.yml` ファイルを作成します。 + +```yaml +--- +- hosts: localhost + become: true + vars: + sebooleans_enable: + - httpd_can_network_connect + - httpd_mod_auth_pam + sebooleans_disable: + - httpd_enable_cgi + roles: + - selinux_manage_meta +``` + +Playbook を実行して結果を確認します。 + +```bash +$ ansible-playbook playbook.yml +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' + +PLAY [localhost] ****************************************************************************************************** + +TASK [Gathering Facts] ************************************************************************************************ +ok: [localhost] + +TASK [selinux_manage_meta : Enable SELinux enforcing mode] ************************************************************ +ok: [localhost] + +TASK [selinux_manage_meta : Enable booleans] ************************************************************************** +changed: [localhost] => (item=httpd_can_network_connect) +changed: [localhost] => (item=httpd_mod_auth_pam) + +TASK [selinux_manage_meta : Disable booleans] ************************************************************************* +changed: [localhost] => (item=httpd_can_network_connect) + +PLAY RECAP ************************************************************************************************************ +localhost : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +### アプローチ 2: FQCN で読み込まれるコレクション + +2 つ目のアプローチは、コレクションの FQCN +を使用して関連モジュールおよびプラグインを呼び出します。違いをよりよく示すために、内部ロジックを変更せずに、FQCN +アプローチで以前のロールの新しいバージョンを実装します。 + +> **ヒント**: 演習のステップを実行したり、`solutions/selinux_manage_fqcn` から完了したロールをコピーしたりできます。 + +`ansible-galaxy init` コマンドを使用して新しいロールを作成します。 + +```bash +ansible-galaxy init --init-path roles selinux_manage_fqcn +``` + +`roles/selinux_manage_fqcn/tasks/main.yml` ファイルを編集し、以下のタスクを追加します。 + +```yaml +--- +# tasks file for selinux_manage_fqcn +- name: Enable SELinux enforcing mode + ansible.posix.selinux: + policy: targeted + state: "{{ selinux_mode }}" + +- name: Enable booleans + ansible.posix.seboolean: + name: "{{ item }}" + state: true + persistent: true + loop: "{{ sebooleans_enable }}" + +- name: Disable booleans + ansible.posix.seboolean: + name: "{{ item }}" + state: false + persistent: true + loop: "{{ sebooleans_disable }}" +``` + +> **注記**: ロールタスクでのモジュール FQCN の使用方法に注意してください。Ansible は直接、 +> `collections` キーワードが Playbook レベルで定義されている場合でも、 +> ロールタスク内からインストールされたコレクションを検索します。 + +`roles/selinux_manage_fqcn/defaults/main.yml` を編集して、ロール変数のデフォルト値を定義します。 + +```yaml +--- +# defaults file for selinux_manage_fqcn +selinux_mode: enforcing +sebooleans_enable: [] +sebooleans_disable: [] +``` + +ロール内の未使用のフォルダーをクリーンアップします。 + +```bash +rm -rf roles/selinux_manage_meta/{tests,vars,handlers,files,templates} +``` + +新しいロールを使用するように、以前の `playbook.yml` ファイルを変更します。 + +```yaml +--- +- hosts: localhost + become: true + vars: + sebooleans_enable: + - httpd_can_network_connect + - httpd_mod_auth_pam + sebooleans_disable: + - httpd_enable_cgi + roles: + - selinux_manage_FQCN +``` + +Playbook を再度実行し、結果を確認します。 + +```bash +$ ansible-playbook playbook.yml +[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all' + +PLAY [localhost] ****************************************************************************************************** + +TASK [Gathering Facts] ************************************************************************************************ +ok: [localhost] + +TASK [selinux_manage_meta : Enable SELinux enforcing mode] ************************************************************ +ok: [localhost] + +TASK [selinux_manage_meta : Enable booleans] ************************************************************************** +changed: [localhost] => (item=httpd_can_network_connect) +ok: [localhost] => (item=httpd_mod_auth_pam) + +TASK [selinux_manage_meta : Disable booleans] ************************************************************************* +changed: [localhost] => (item=httpd_can_network_connect) + +PLAY RECAP ************************************************************************************************************ +localhost : ok=4 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +これでガイド付きの演習は終了となります。 + +# 重要なこと + +- コレクションは、`meta/main.yml` で定義されている `collections` リストを使用して、ロールから呼び出すことができます。 + +- コレクションは、ロールタスクから直接 FQCN を使用して、ロールから呼び出すことができます。 + +---- +**ナビゲーション** +
+[前の演習](../2-collections-from-playbook/) - [次の演習](../4-collections-from-tower) + +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md) diff --git a/exercises/ansible_collections/3-collections-from-roles/solutions/selinux_manage_fqcn/README.ja.md b/exercises/ansible_collections/3-collections-from-roles/solutions/selinux_manage_fqcn/README.ja.md new file mode 100644 index 000000000..f0395a90e --- /dev/null +++ b/exercises/ansible_collections/3-collections-from-roles/solutions/selinux_manage_fqcn/README.ja.md @@ -0,0 +1,48 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role +should be mentioned here. For instance, if the role uses the EC2 module, it +may be a good idea to mention in this section that the boto package is +required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, +including any variables that are in defaults/main.yml, vars/main.yml, and +any variables that can/should be set via parameters to the role. Any +variables that are read from other roles and/or the global scope +(ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in +regards to parameters that may need to be set for other roles, or variables +that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables +passed in as parameters) is always nice for users too: + + - hosts: servers roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or +a website (HTML is not allowed). diff --git a/exercises/ansible_collections/3-collections-from-roles/solutions/selinux_manage_meta/README.ja.md b/exercises/ansible_collections/3-collections-from-roles/solutions/selinux_manage_meta/README.ja.md new file mode 100644 index 000000000..f0395a90e --- /dev/null +++ b/exercises/ansible_collections/3-collections-from-roles/solutions/selinux_manage_meta/README.ja.md @@ -0,0 +1,48 @@ +Role Name +========= + +A brief description of the role goes here. + +Requirements +------------ + +Any pre-requisites that may not be covered by Ansible itself or the role +should be mentioned here. For instance, if the role uses the EC2 module, it +may be a good idea to mention in this section that the boto package is +required. + +Role Variables +-------------- + +A description of the settable variables for this role should go here, +including any variables that are in defaults/main.yml, vars/main.yml, and +any variables that can/should be set via parameters to the role. Any +variables that are read from other roles and/or the global scope +(ie. hostvars, group vars, etc.) should be mentioned here as well. + +Dependencies +------------ + +A list of other roles hosted on Galaxy should go here, plus any details in +regards to parameters that may need to be set for other roles, or variables +that are used from other roles. + +Example Playbook +---------------- + +Including an example of how to use your role (for instance, with variables +passed in as parameters) is always nice for users too: + + - hosts: servers roles: + - { role: username.rolename, x: 42 } + +License +------- + +BSD + +Author Information +------------------ + +An optional section for the role authors to include contact information, or +a website (HTML is not allowed). diff --git a/exercises/ansible_collections/4-collections-from-tower/README.ja.md b/exercises/ansible_collections/4-collections-from-tower/README.ja.md new file mode 100644 index 000000000..ced10f900 --- /dev/null +++ b/exercises/ansible_collections/4-collections-from-tower/README.ja.md @@ -0,0 +1,74 @@ +# 演習 4 - Red Hat Ansible Tower でコレクションを使用する方法 + +## 目次 + +- [目的](#objective) +- [ガイド](#guide) + - [ステップ 1 - requirements.yml の記述](#step-1---write-a-requirementsyml) + - [ステップ 2 - ジョブテンプレートの作成](#step-2---create-job-template) +- [トラブルシューティング](#troubleshooting) + +# 目的 + +Red Hat Ansible Tower は、バージョン 3.5 以降の Ansible +コレクションをサポートします。以前のバージョンは自動的にインストールされず、設定されません。Ansible コレクションが Red Hat +Ansible Tower で認識されていることを確認するには、要件ファイルが必要であり、適切なディレクトリーに保存する必要があります。 + +Ansible Galaxy はデフォルトですでに設定されていますが、Red Hat Ansible Tower で Red Hat +Automation Hub からコンテンツを優先してフェッチする場合は、追加の設定変更が必要になります。これについては、このラボの +[Automation Hub の使用](../7-use-automation-hub/) の章で説明されています。 + +# ガイド + +この演習では、Red Hat Ansible Tower が認識する形式で Ansible コレクションを要件として定義する方法を説明します。 + +## ステップ 1 - requirements.yml を記述します。 + +Red Hat Ansible Tower は、ジョブテンプレートを実行する前に Ansible +コレクションを自動的にダウンロードしてインストールできます。`collections/requirements.yml` +が存在する場合は解析され、このファイルで指定された Ansibleコレクションが自動的にインストールされます。 + +> **注記**: Red Hat Ansible Tower 3.6 以降では、ジョブテンプレートの作業ディレクトリーは `/tmp` にあります。ジョブテンプレートが実行される前に Ansible コレクションがこのディレクトリーにダウンロードされるため、`/var/lib/awx/projects/` では Ansible コレクションの一時ファイルを見つけることはできません。 + +Ansible コレクションの `requirements.yml` の形式は、ロールの形式と非常に似ていますが、フォルダー `collections` +に保存することが非常に重要となります。 + +以下は、`ansible.posix` Ansible コレクションを要件として設定する例になります。 + +```yaml +--- +collections: +- ansible.posix +``` + +## ステップ 2 - ジョブテンプレートの作成 + +Playbook で Ansible コレクションを使用する場合、Red Hat Ansible Tower +ジョブテンプレートに設定する追加オプションはありません。Playbook +が保存されているリポジトリー、インベントリー、認証情報、およびその他のパラメーターを指定し、**Launch** ボタンをクリックして実行します。 + +# トラブルシューティング + +Red Hat Ansible Tower は、Playbook を保存したリポジトリーの更新のみをチェックするため、Playbook で使用される +Ansible コレクションに変更があった場合は更新を行わない可能性があります。特に、ロールとコレクションも組み合わせた場合に発生します。 + +この場合は、**Delete on Update** +オプションを確認する必要があります。これは、更新時にローカルディレクトリー全体を削除するオプションです。 + +`requirements.yml` の解析中に問題が発生した場合は、`ansible-galaxy` コマンドでテストすることが推奨されます。Red +Hat Ansible Tower +は基本的に、適切なパラメーターでコマンドを実行するだけなので、手動での動作のテストは意味があることを覚えておいてください。 + +```bash +ansible-galaxy collections install -r collections/requirements.yml -f +``` + +> **注記**: `-f` スイッチは、指定された Ansible コレクションの新規インストールを強制します。そうでない場合、`ansible-galaxy` は、指定された Ansible コレクションがインストールされていない場合は単にこれをインストールします。また、`--force-with-deps` スイッチを使用して、他への依存関係のある Ansible コレクションも更新されるようにすることもできます。 + +---- +**ナビゲーション** +
+[前の演習](../3-collections-from-roles/) - [次の演習](../5-use-automation-hub) + +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md) diff --git a/exercises/ansible_collections/5-use-automation-hub/README.ja.md b/exercises/ansible_collections/5-use-automation-hub/README.ja.md new file mode 100644 index 000000000..640b78a89 --- /dev/null +++ b/exercises/ansible_collections/5-use-automation-hub/README.ja.md @@ -0,0 +1,118 @@ +# 演習 5 - Red Hat Automation Hub の使用方法 + +## 目次 + +- [目的](#objective) +- [Red Hat Automation Hub](#red-hat-automation-hub) + - [認定コンテンツ](#certified-content) + - [サポートされる自動化](#supported-automation) +- [Ansible Galaxy](#ansible-galaxy) +- [Automation Hub の使用方法](#how-to-use-automation-hub) + - [コレクションへのアクセス](#accessing-collections) + - [トークンの作成](#creating-a-token) + - [認証トークンの使用](#using-authentication-token) + - [コレクションの使用](#using-collections) + - [Automation Hub への Tower の認証](#authenticate-tower-to-automation-hub) +- [重要なこと](#takeaways) + +# 目的 + +このラボでは、Red Hat Automation Hub の価値の提案と、提供されているコンテンツの使用方法について説明します。 + +# Red Hat Automation Hub + +これは、Red Hat SaaS オファリングの一部として提供されるサービスです。これは、Red Hat およびそのパートナーがサポートし、認定する +Ansible +コンテンツコレクションのみを検出およびダウンロードする場所で構成されます。これらのコンテンツコレクションには、自動化の使用方法、これをインフラストラクチャーで実装するためのガイドが含まれます。Automation +Hub のサポートは Red Hat Automation Platform サブスクリプションに含まれています。 + +> **注記**: [https://cloud.redhat.com/ansible/automation-hub](https://cloud.redhat.com/ansible/automation-hub): にある Red Hat Automation Hub には、Red Hat カスタマーポータルの認証情報と有効な Red Hat Automation Platform サブスクリプションが必要です。 + +## 認定コンテンツ + +Automation Hub のポータルで、ユーザーは Red Hat +および認定パートナーの信頼できるコンテンツコレクションに直接アクセスできます。認定コレクションは、Red Hat +およびそのパートナーによって開発、テスト、構築、配信、サポートされています。サポート範囲の詳細については、[Ansible 認定コンテンツ +FAQ](https://access.redhat.com/articles/4916901) を参照してください。 + +## サポートされる自動化 + +Automation Hub は、Red Hat のサポートに支えられた、Ansible +コンテンツのワンストップショップで、お客様にさらなる安心感を提供するものです。これらのコレクションに対する追加のサポートは、"Maintained +and Supported By" の下、Red Hat パートナーのいずれかによって提供される場合があります。 + +# Ansible Galaxy + +これは、Ansible ロールと呼ばれる事前にパッケージ化された作業単位を最初に提供し始めたより広い Ansible +コミュニティーの場所になります。ロールを Ansible Playbook にドロップして、すぐに動作させることができます。Galaxy +の最近のバージョンでは、Ansible コンテンツコレクションの提供も開始しました。 + +Ansible Galaxy は [https://galaxy.ansible.com/](https://galaxy.ansible.com/) +にあります。 + +# Automation Hub の使用方法 + +## コレクションへのアクセス + +Ansible +コレクションは、複数の場所から使用したり、ダウンロードしたりできます。これらのコレクションは、要件ファイルを使用してダウンロードし、git +リポジトリーに静的に含めるか、または最終的に仮想環境に個別にインストールすることができます。 + +この演習内では、Automation Hub からコンテンツにアクセスする方法に焦点を当てています。これには、認証トークンと認証 URL +が必要です。アクセスするには、Ansible Tower で一部の設定手順を実行する必要があります。 + +## Automation Hub への Tower の認証 + +### トークンの作成 + +Ansible Tower を認証するには、トークンが必要です。トークは、以下の手順を使用して取得できます。 + +1. [https://cloud.redhat.com/ansible/automation-hub/token/](https://cloud.redhat.com/ansible/automation-hub/token/) + に移動します。 + + ![Load token|845x550,20%](screenshots/create-token.png) + +1. **Load Token** をクリックします。 + +1. **copy icon** をクリックして、API トークンをクリップボードにコピーします。 + + ![Copy token|845x550,20%](screenshots/copy-token.png) + +### 認証トークンの使用 + +1. ユーザー管理者として、*Settings l> Jobs* に移動します。 + +1. **PRIMARY GALAXY SERVER URL** を + `https://cloud.redhat.com/api/automation-hub/` に設定します。 + +1. **PRIMARY GALAXY AUTHENTICATION** URL を + `https://sso.redhat.com/auth/realms/redhat-external/protocol/openid-connect/token` + に設定します。 + +1. **PRIMARY GALAXY SERVER TOKEN** を に設定します。 + +> **ヒント**: Red Hat Automation Hub をプライマリー Galaxy Server URL として使用して、Red Hat Ansible Automation サブスクリプションを介して Red Hat およびそのパートナーによる認定およびサポート対象のコンテンツを使用することが推奨されます。 + + ![test image size](screenshots/token.png) + +### コレクションの使用 + +Automation Hub にアクセスするために Ansible Tower +を認証した後に、`collections/requirements.yml` ファイルを使用することで、最初のソースとして Automation Hub +からコンテンツコレクションを自動的に取得します。 + +# 重要なこと + +- Red Hat Automation Hub は、Red Hat およびそのパートナーがサポートする認定コレクションを提供します。これは、Red +Hat Ansible Automation Platform を介して利用できます。 - Ansible Galaxy +はアップストリームのコミュニティーコンテンツコレクションをホストします。 - Red Hat Ansible Tower は、Tower +内の特定のプロジェクトで使用される認定およびサポート対象のコンテンツコレクションを取得するために、Red Hat Automation Hub +に対して認証を行うように設定できます。 + +---- +**ナビゲーション** +
+[前の演習](../4-collections-from-tower/) + +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md) diff --git a/exercises/ansible_collections/5-use-automation-hub/screenshots/README.ja.md b/exercises/ansible_collections/5-use-automation-hub/screenshots/README.ja.md new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/exercises/ansible_collections/5-use-automation-hub/screenshots/README.ja.md @@ -0,0 +1 @@ + diff --git a/exercises/ansible_collections/README.ja.md b/exercises/ansible_collections/README.ja.md new file mode 100644 index 000000000..df7ea456e --- /dev/null +++ b/exercises/ansible_collections/README.ja.md @@ -0,0 +1,61 @@ +# Ansible コレクションのワークショップ + +**これは Ansible Automation Platform 2 のドキュメントです** + +このワークショップは、Ansible コレクションの機能と利点を紹介するステップバイステップの演習です。Ansible +コレクションは、Playbook、ロール、モジュール、プラグインをパッケージ化および配布するために使用できる Ansible +コンテンツの独自のディストリビューション形式になります。 + +## ワークショップの平均時間 + +このワークショップの平均時間は、ユーザーの Ansible のスキルによって異なってきます。Ansible の上級ユーザーの場合の平均時間は約 3 +時間となります。 + +すべての演習は読むだけで理解できるものであり、ラボ全体を通して参加者をガイドします。概念を紹介する際にその説明があり、実践的な演習も用意しております。 + +## 前提条件 + +- Ansible v2.9 + +- RHEL/CentOS 8.x、CentOS Stream、Fedora 31+ の中から OS を選択する + +## Ansible コレクションの演習 + +ワークショップは、コレクションの作成、Playbook、ロール、Tower からの使用法、および Ansible Automation Hub +の概要などを網羅した、理解度を確認する一連の演習で構成されています。 + +- [演習 1 - コレクションの作成](./1-create-collections) + +- [演習 2 - Playbook のコレクション](./2-collections-from-playbook) + +- [演習 3 - ロールのコレクション](./3-collections-from-roles) + +- [演習 4 - Tower のコレクション](./4-collections-from-tower) + +- [演習 5 - Automation Hub の使用](./5-use-automation-hub) + +## 追加情報 + +- [Ansible Docs: Using +Collections](https://docs.ansible.com/ansible/latest/user_guide/collections_using.html) + +- [Ansible Collections +Overview](https://github.com/ansible-collections/overview) + +- [Ansible Docs: Developing +Collections](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html) + +- [Blog Post: Introducing: The AWX and Ansible Tower +Collections](https://www.ansible.com/blog/introducing-the-awx-collection) + +## 作成者 + +Ansible Automation Platform 1.1 Hackfest - チーム 1 + +- Christian Jung + +- Gianni Salinetti + +- David Sastre Medina + +- Ismail Dhaoui diff --git a/exercises/ansible_demo/README.ja.md b/exercises/ansible_demo/README.ja.md new file mode 100644 index 000000000..793e4b27b --- /dev/null +++ b/exercises/ansible_demo/README.ja.md @@ -0,0 +1 @@ +This is a placeholder for demo mode. diff --git a/exercises/ansible_f5/1.1-get-facts/README.ja.md b/exercises/ansible_f5/1.1-get-facts/README.ja.md index be7fd792b..31b91c6be 100644 --- a/exercises/ansible_f5/1.1-get-facts/README.ja.md +++ b/exercises/ansible_f5/1.1-get-facts/README.ja.md @@ -1,42 +1,36 @@ -# 演習 1.1 - Ansible による F5 BIG-IP の情報収集 +# 演習 1.1: bigip_device_info モジュールの使用 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbookの出力](#playbookの出力) -- [解答](#解答) -- [より深く](#より深く) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) - [より高度な操作のために](#going-further) # 目的 -[BIG-IP Facts module](https://docs.ansible.com/ansible/latest/modules/bigip_device_facts_module.html) を使って F5 BIG-IP 機器から情報を取得し、[debug module](https://docs.ansible.com/ansible/latest/modules/debug_module.html) でターミナルに情報を表示します。 +[BIG-IP Info module](https://docs.ansible.com/ansible/latest/collections/f5networks/f5_modules/bigip_device_info_module.html) を使用して F5 BIG-IP デバイスからファクト(便利な情報)を取得し、[debug module](https://docs.ansible.com/ansible/latest/modules/debug_module.html) を使用してターミナルウィンドウに表示する方法を説明します。 -# 解説 +# ガイド -ホームディレクトリにいることを確認してください。 +探索/ラボセットアップ演習で説明されているように、 VSCode ターミナルを開きます。ホームディレクトリーにいることを確認してください -``` -[student1@ansible f5-workshop]$ cd ~ -``` +![picture of file browser](images/vscode-homefolder.png) -## Step 1: +## ステップ 1: -テキストエディタを使って `bigip-facts.yml` ファイルを作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-info.yml` という名前の新しいファイルを作成します。 + +![picture of create file icon](images/vscode-openfile_icon.png) -``` -[student1@ansible ~]$ nano bigip-facts.yml -``` ->`vim` と`nano` がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。 -## Step 2: +## ステップ 2: -Ansible の playbook は **YAML** ファイルです。YAML は構造化されたエンコードで人にとって読みやすい形式です(JSON と違い・・・) +Ansible Playbook は **YAML** ファイルです。YAML +は構造化されたエンコーディング形式であり、人間が非常に読みやすくなっています (JSON 形式のサブセットとは異なり)。 -以下の play 定義を `bigip-facts.yml` に追加してください: +次のプレイ定義を `bigip-info.yml` に入力します。 ``` yaml --- @@ -46,22 +40,22 @@ Ansible の playbook は **YAML** ファイルです。YAML は構造化され gather_facts: false ``` -- ファイルの先頭の `---` はこのファイルが YAML であることを示します。 -- `hosts: f5` はこの play が F5 BIG-IP 機器のグループに対して実行されることを示します。 -- `connection: local` は Playbook がローカル実行されることを示します。 -- `gather_facts: false` Fact 情報の収集を無効にします。この演習では Playbook の中で Fact 情報を利用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 +- `hosts: f5` は、プレイが F5 BIG-IP デバイスでのみ実行されることを示します +- `connection: local` は、(自身に SSH 接続するのではなく)ローカルで実行するように Playbook に指示します +- `gather_facts: no` はファクト収集を無効にします。 -まだエディタを閉じないでください。 -## Step 3 +## ステップ 3 -次に最初の `task` を追加します。 このタスクでは `device_facts` モジュールを利用して BIG-IP から情報を取得します。 +次に、最初の `task` を追加します。このタスクは、`bigip_device_info` モジュールを使用して BIG-IP +デバイスから有用な情報を取得します。 {% raw %} ``` yaml tasks: - name: COLLECT BIG-IP FACTS - f5networks.f5_modules.bigip_device_facts: + f5networks.f5_modules.bigip_device_info: gather_subset: - system-info provider: @@ -74,22 +68,26 @@ Ansible の playbook は **YAML** ファイルです。YAML は構造化され ``` {% endraw %} ->`play` はタスクのリストです。タスクとリストは1:1の関係を持ちます。Ansible モジュールは再利用可能で、Ansible API、`ansible` `ansible-playbook` コマンドから利用できるスタンドアローンなスクリプトです。実行されたモジュールは Ansible に JSON 形式の文字列を返します。 +>プレイはタスクのリストです。タスクとモジュールには 1:1 の相関があります。Ansible モジュールは再利用可能なスタンドアロンのスクリプトで、Ansible API または ansibleやansible-playbook プログラムで使用できます。これらは、終了する前に JSON 文字列を stdout に出力して Ansible に情報を返します。 -- `name: COLLECT BIG-IP FACTS` は利用者が定義するタスクの説明文で、この内容がターミナルに表示されます。 -- `bigip_device_facts:` はタスクで使用されるモジュール名を指定します。`register` 以外のモジュールパラメーターはドキュメントページで説明されています。 -- `gather_subset: system_info` モジュールのパラメーターです。モジュールに対してシステムレベルの情報のみを取得するように指示します。 -- `provider:` BIG-IP の詳細な接続情報のオブジェクト。 -- `server: "{{private_ip}}"` モジュールのパラメーターです。モジュールがどのBIG-IPのIPアドレスに接続するかを指定します。ここではインベントリーで定義された`private_ip`が指定されています。 -- `user: "{{ansible_user}}"` モジュールのパラメーターです。BIP-IPにログインするユーザー名を設定しています。 -- `password: "{{ansible_password}}"` モジュールのパラメーターです。BIG-IPにログインするパスワードを指定します。 -- `server_port: 8443` モジュールのパラメーターです。BIP-IPに接続する際のポート番号を指定します。 -- `validate_certs: false` : (あくまで演習用ラボなので)SSL証明書の検証を行わないように設定します。 -- `register: device_facts` このタスクで取得された情報を変数 `device_facts` へ格納するように指示しています。 +- `name: COLLECT BIG-IP FACTS` は、ターミナル出力に表示されるユーザー定義の説明です。 - +`bigip_device_info:` は、使用するモジュールをタスクに指示します。`register` +以外は、すべてモジュールのドキュメントページで定義されるモジュールパラメーターです。 - `gather_subset: system_info` +パラメーターは、システムレベルの情報だけを取得することをモジュールに指示します。 - `provider:` パラメーターは、BIG-IP +の接続詳細のグループです。 - `server: "{{private_ip}}"` パラメーターは、F5 BIG-IP IP +アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` として保存されます - `user: +"{{ansible_user}}"` パラメーターは、F5 BIG-IP デバイスにログインするためのユーザー名をモジュールに指示します - +`password: "{{ansible_password}}"` パラメーターは、F5 BIG-IP +デバイスにログインするためのパスワードをモジュールに指示します - `server_port: 8443` パラメーターは、F5 BIG-IP +デバイスに接続するためのポートをモジュールに指示します。8443 +は、このラボで使用されるポートです。ただし、デプロイメントによって異なる場合があります。 - `validate_certs: false` +パラメーターは、SSL 証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。 - `register: +device_facts` は、出力を変数 bigip_device_info に保存するようにタスクに指示します -## Step 4 +## ステップ 4 -次に2つ目の `task` を追加します。 このタスクでは `debug` モジュールを使って、register された `bigip_device_facts variable` 変数の値を出力します。 +次に、2 番目の `task` を上記に追加します。このタスクは `debug` モジュールを使用して、ファクトを登録した device_facts +変数からの出力を出力します。 {% raw %} ```yaml @@ -99,23 +97,23 @@ Ansible の playbook は **YAML** ファイルです。YAML は構造化され ``` {% endraw %} -- `name: COMPLETE BIG-IP SYSTEM INFORMATION` はユーザーが指定するタスクの説明文です。この内容がターミナルへ表示されます。 -- `debug:` タスクで使用するモジュール指定しています。 -- `var: device_facts` モジュールのパラメーターです。`device_facts` 変数の値を出力するように指定しています。 +- `name: COMPLETE BIG-IP SYSTEM INFORMATION` は、ターミナル出力に表示されるユーザー定義の説明です。 - +`debug:` は、デバッグモジュールを使用するようにタスクに指示します。 - `var: device_facts` +パラメーターは、モジュールに変数 bigip_device_info を表示するように指示します。 -ファイルを保存して、エディタを終了してください。 +ファイルを保存して、エディターを終了します。 -## Step 5 +## ステップ 5 -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +Playbook を実行します。コントロールホストの VS Code サーバーでターミナルを開き、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-facts.yml +[student1@ansible ~]$ ansible-navigator run bigip-info.yml --mode stdout ``` -出力は以下のようになります。 -```yaml -[student1@ansible ~]$ ansible-playbook bigip-facts.yml +出力は次のようになります。 +``` yaml +[student1@ansible ~]$ ansible-navigator run bigip-info.yml --mode stdout PLAY [GRAB F5 FACTS] ********************************************************** @@ -171,12 +169,13 @@ ok: [f5] => PLAY RECAP ******************************************************************** f5 : ok=2 changed=0 unreachable=0 failed=0 ``` -## Step 6 +## ステップ 6 -最後に、2つのタスクを追加して取得したファクト情報から特定の情報を取得します。 +最後に、収集したファクトからさらに具体的な情報を取得するために、上記の Playbook にさらに 2 つのタスクを追加します。 {% raw %} ```yaml + - name: DISPLAY ONLY THE MAC ADDRESS debug: var: device_facts['system_info']['base_mac_address'] @@ -187,28 +186,28 @@ f5 : ok=2 changed=0 unreachable=0 failed=0 ``` {% endraw %} +- `var: device_facts['system_info']['base_mac_address']` は、Big-IP デバイスの +Management IP の MAC アドレスを表示します - +`device_facts['system_info']['product_version']` は、BIG-IP +デバイスの製品バージョンを表示します。 -- `var: device_facts['system_info']['base_mac_address']` BIG-IP のMACアドレスを取得します。 -- `var: device_facts['system_info']['product_version']` BIG-IP のバージョン情報を取得します。 - ->`bigip_device_facts` モジュールは構造化されたデータを返すため、やっかいな正規表現やフィルターを使わずに必要な情報へと簡単にアクセスできます。Fact モジュールは後続のタスクに渡すデータを取得したり、動的なドキュメント作成(報告書, csv ファイル, markdown)するためにとても有益です。 +>bigip_device_info モジュールは構造化データで有用な情報を返すため、正規表現やフィルターを使用せずに特定の情報を簡単に取得することができます。ファクトモジュールは、特定のデバイス情報を取得するための非常に強力なツールです。取得した情報は、後続のタスクや、動的なドキュメント(レポート、csv ファイル、マークダウン)の作成に使用できます。 +## ステップ 7 -## Step 7 - -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +Playbook を実行します。ファイルを保存し、コントロールホストの VS Code のターミナルウィンドウを使用し、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-facts.yml +[student1@ansible ~]$ ansible-navigator run bigip-info.yml --mode stdout ``` -# Playbookの出力 +# Playbook の出力 -以下のような出力となるはずです。 +出力は次のようになります。 {% raw %} ```yaml -[student1@ansible ~]$ ansible-playbook bigip-facts.yml +[student1@ansible ~]$ ansible-navigator run bigip-info.yml --mode stdout PLAY [GRAB F5 FACTS] ********************************************************** @@ -274,14 +273,15 @@ f5 : ok=4 changed=0 unreachable=0 failed=0 ``` {% endraw %} +# ソリューション -# 解答 - -完成したPlaybookのサンプルは [bigip-facts.yml](./bigip-facts.yml) から参照できます。 +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-info.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.1-get-facts/bigip-info.yml) +を表示するには、ここをクリックしてください。 -# より深く +# より高度な操作のために -オプション演習で `tags: debug` パラメーターを1つの debug タスクに追加してみましょう。 +この追加演習では、`tags: debug` パラメーター(タスクレベルで)を既存のデバッグタスクに追加します。 ```yaml - name: DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION @@ -290,12 +290,14 @@ f5 : ok=4 changed=0 unreachable=0 failed=0 tags: debug ``` -`--skip-tags=debug` オプションをつけてコマンドを実行します。 +`--skip-tags-debug` コマンドラインオプションを使用して、Playbook を再実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-facts.yml --skip-tags=debug +ansible-navigator run bigip-info.yml --skip-tags=debug --mode stdout ``` -`DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION` タスクがスキップされ、3つのタスクの結果が表示されたはずです。 +Ansible Navigator は、`DISPLAY COMPLETE BIG-IP SYSTEM INFORMATION` タスクを省略して 3 +つのタスクのみを実行します。 -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/1.2-add-node/README.ja.md b/exercises/ansible_f5/1.2-add-node/README.ja.md index 5f7c0556b..7f30adf4d 100644 --- a/exercises/ansible_f5/1.2-add-node/README.ja.md +++ b/exercises/ansible_f5/1.2-add-node/README.ja.md @@ -1,34 +1,32 @@ -# 演習 1.2 - F5 BIG-IP へのノード追加 +# 演習 1.2 - F5 BIG-IP へのノードの追加 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) - [ソリューションの確認](#verifying-the-solution) # 目的 -本演習では、[BIG-IP node module](https://docs.ansible.com/ansible/latest/modules/bigip_node_module.html)を使用して、BIG-IP Load Balancer (以下、BIG-IP)へ、ウェブサーバーとなる2台のRHEL(Red Hat Enterprise Linux)を"ノード"として追加する方法を紹介します。 +[BIG-IP +ノードモジュール](https://docs.ansible.com/ansible/latest/modules/bigip_node_module.html) +を使用して、2 つの RHEL (Red Hat Enterprise Linux) Web サーバーを BIG-IP +ロードバランサーのノードとして追加する方法を説明します。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディタを使って、`bigip-node.yml` というファイルを新規作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-node.yml` という名前の新しいファイルを作成します。 -``` -[student1@ansible ~]$ nano bigip-node.yml -``` +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) ->`vim` と `nano` はコントロールノード上で利用可能です。RDP経由でのVisual Studio と Atom も同様です。 -## Step 2: +## ステップ 2: -以下の定義を `bigip-node.yml` に入力します : +次のプレイ定義を `bigip-node.yml` に入力します。 ``` yaml --- @@ -38,18 +36,19 @@ gather_facts: false ``` -- このファイルの最初の `---` は、このファイルがYAMLであることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` で、このプレイブックが(自分自身にSSH接続をするのではなく)ローカル実行されることを指示しています。 -- `gather_facts: false` で、FACTの収集を無効化します。このプレイブックではFACT変数を使用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: lb` は、プレイが lb +グループでのみ実行されることを示します。技術的には、F5 デバイスは 1 つだけしか存在しませんが、複数あれば、それぞれが同時に設定されます。 - +`connection: local` は、(自身に SSH 接続するのではなく)ローカルで実行するように Playbook に指示します - +`gather_facts: false` はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -まだエディタを閉じないでください。 +まだエディターを閉じないでください。 -## Step 3 +## ステップ 3 -次に、最初のタスクを追加します。このタスクは、`bigip_node` モジュールを使用して、BIG-IP上に、2つの RHEL (Webサーバー)をノードとして設定します。 +次に、最初の `task` を上記の Playbook に追加します。このタスクは、`bigip_node` モジュールを使用して 2 つの RHEL +Web サーバーを BIG-IP F5 ロードバランサー上のノードとして設定します。 -{% raw %} + ``` yaml tasks: - name: CREATE NODES @@ -64,39 +63,41 @@ name: "{{hostvars[item].inventory_hostname}}" loop: "{{ groups['web'] }}" ``` -{% endraw %} + ->[loop](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html) は指定された一覧に対して、タスクを繰り返し実行します。 この演習では、二つのWebサーバーに対して一度づつタスクを実行します。 +>[loop](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html) は、タスクに指定したリストのタスクを繰り返します。この場合は、2 つの Web サーバーのそれぞれに対して 1 回ずつ、合計 2 回ループします。 +- `name: CREATE NODES` は、ターミナル出力に表示されるユーザー定義の説明です。 - `bigip_node:` +は、使用するモジュールをタスクに指示します。`loop` 以外は、すべてモジュールのドキュメントページで定義されるモジュールパラメーターです。 - +`server: "{{private_ip}}"` パラメーターは、F5 BIG-IP IP +アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` として保存されます - +`provider:` パラメーターは、BIG-IP の接続詳細のグループです。 - `user: "{{ansible_user}}"` +パラメーターは、F5 BIG-IP デバイスにログインするためのユーザー名をモジュールに指示します - `password: +"{{ansible_password}}"` パラメーターは、F5 BIG-IP デバイスにログインするためのパスワードをモジュールに指示します - +`server_port: 8443` パラメーターは、F5 BIG-IP デバイスに接続するためのポートをモジュールに指示します - `host: +"{{hostvars[item].ansible_host}}"` パラメーターは、すでにインベントリーに定義されている Web サーバーの IP +アドレスを追加するようにモジュールに指示します。 - `name: "{{hostvars[item].inventory_hostname}}"` +パラメーターは、名前に `inventory_hostname` (node1 および node2) を使用するようにモジュールに指示します。 - +`validate_certs: false` パラメーターは、SSL +証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。 - `loop:` +は、指定したリストをループするようにタスクに指示します。ここでのリストは、2 つの RHEL ホストが含まれるグループ Web です。 -- `name: CREATE NODES` : ユーザーが定義する説明文です。これは実行時に端末に表示されることになります。 -- `bigip_node:` : 使用するモジュールを宣言しています。 `loop` を除く全てのものは、モジュールのドキュメント上で定義されている、モジュールパラメータです。 -- `provider:` : BIG-IP の詳細な接続情報のオブジェクト。 -- `server: "{{private_ip}}"` : 接続先となるBIG-IPのIPアドレスを指定します。これはインベントリ内で `private_ip` として登録されているものです。 -- `user: "{{ansible_user}}"` : BIG-IP へログインするユーザー名を指定します。 -- `password: "{{ansible_password}}"` : BIG-IPへログインする際のパスワードを指定します。 -- `server_port: 8443` : BIG-IPへ接続する際のポート番号を指定します。 -- `validate_certs: false` : (あくまで演習用ラボなので)SSL証明書の検証を行わないように設定します。 -- `host: "{{hostvars[item].ansible_host}}"` : モジュールへインベントリに登録済みのWebサーバーのIPアドレスを追加します。 -- `name: "{{hostvars[item].inventory_hostname}}"` : `inventory_hostname` をホスト名(node1、node2 となります)として使うことを指示します。 -- `loop:` : 与えられた一覧に対してタスクをループ実行することを指定します。この演習では、二つのRHELホストを含む web グループが一覧となります。 +ファイルを保存して、エディターを終了します。 -ファイルを保存して、エディタを終了します。 +## ステップ 4 -## Step 4 - -プレイブックの実行 - コントロールホストのコマンドラインで以下を実行します。 +Playbook を実行します。コントロールホストの VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-node.yml +[student1@ansible ~]$ ansible-navigator run bigip-node.yml --mode stdout ``` -# Playbookの出力 +# Playbook の出力 -出力は以下のようになります。 +出力は次のようになります。 ```yaml -[student1@ansible]$ ansible-playbook bigip-node.yml +[student1@ansible]$ ansible-navigator run bigip-node.yml --mode stdout PLAY [BIG-IP SETUP] ************************************************************ @@ -108,20 +109,21 @@ PLAY RECAP ********************************************************************* f5 : ok=1 changed=1 unreachable=0 failed=0 ``` -# 解答 - -完成形のAnsible Playbook はこちらから参照可能です。 [bigip-node.yml](./bigip-node.yml). +# ソリューション +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-node.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.2-add-node/bigip-node.yml) +を表示するには、ここをクリックしてください。 -# 確認 +# ソリューションの確認 -ブラウザでBIG-IPへログインして設定されたものを確認してみましょう。lab_inventory/hosts ファイルからBIG-IPのIPアドレスを確認して、https://X.X.X.X:8443/ のようにアクセスします。 +Web ブラウザーで F5 にログインし、設定された内容を確認します。lab_inventory/hosts ファイルから F5 ロードバランサーの +IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 -BIG-IP へのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供、デフォルトは ansible** -画面左のメニューからノード一覧が確認できます。**Local Traffic** -> **Nodes** とクリックします。 +ノードのリストは、左側のメニューからナビゲーションして探すことができます。Local Traffic をクリックし、続いて Nodes をクリックします。 ![f5web](nodes.png) -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/1.3-add-pool/README.ja.md b/exercises/ansible_f5/1.3-add-pool/README.ja.md index de9bbf0a6..0642d16a0 100644 --- a/exercises/ansible_f5/1.3-add-pool/README.ja.md +++ b/exercises/ansible_f5/1.3-add-pool/README.ja.md @@ -1,34 +1,32 @@ -# 演習 1.3 - プールの追加 +# 演習 1.3 - ロードバランシングプールの追加 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) - [ソリューションの確認](#verifying-the-solution) # 目的 -本演習では、[BIG-IP pool module](https://docs.ansible.com/ansible/latest/modules/bigip_pool_module.html) を使って、BIG-IPへ負荷分散プール(省略して「プール」と表記する場合もあります)の設定を行います。負荷分散プールとは、トラフィックの受信および負荷分散を行うための論理的なデバイス(例:Webサーバー)の集合です。 +[BIG-IP +プールモジュール](https://docs.ansible.com/ansible/latest/modules/bigip_pool_module.html) +を使用して BIG-IP +デバイスでロードバランシングプールを設定する方法を説明します。ロードバランシングプールは、トラフィックを受信して処理するためにグループ化する、Web +サーバーなどのデバイスの論理セットです。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディタを使って `bigip-pool.yml` というファイルを新規作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-pool.yml` という名前の新しいファイルを作成します。 -``` -[student1@ansible ~]$ nano bigip-pool.yml -``` - ->`vim` と `nano` はコントロールノード上で利用可能です。RDP経由でのVisual Studio と Atom も同様です。 +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) -## Step 2: +## ステップ 2: -`bigip-pool.yml` へ、以下のプレイブック定義を記述します。 +次のプレイ定義を `bigip-pool.yml` に入力します。 ``` yaml --- @@ -38,18 +36,20 @@ gather_facts: false ``` -- このファイルの最初の `---` は、このファイルがYAMLであることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` で、このプレイブックが(自分自身にSSH接続をするのではなく)ローカル実行されることを指示しています。 -- `gather_facts: false` で、FACTの収集を無効化します。このプレイブックではFACT変数を使用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: lb` は、プレイが lb +グループでのみ実行されることを示します。技術的には、F5 デバイスは 1 つだけしか存在しませんが、複数あれば、それぞれが同時に設定されます。 - +`connection: local` は、(自身に SSH 接続するのではなく)ローカルで実行するように Playbook に指示します - +`gather_facts: false` はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -まだエディタを閉じないでください。 +まだエディターを終了しないでください。 -## Step 3 +## ステップ 3 -次に、タスクを追加します。このタスクは、`bigip_pool` モジュールを使用して、BIG-IP上に、http_poolという名前のプールを設定します。 +次に、最初の `task` を上記の Playbook に追加します。このタスクは、`bigip_pool` モジュールを使用して 2 つの RHEL +Web サーバーを BIG-IP F5 ロードバランサー上のノードとして設定します。 + + -{% raw %} ``` yaml tasks: - name: CREATE POOL @@ -64,40 +64,40 @@ lb_method: "round-robin" monitors: "/Common/http" monitor_type: "and_list" - ``` -{% endraw %} + -- `name: CREATE POOL` : ユーザーが定義する説明文です。これは実行時に端末に表示されることになります。 -- `bigip_pool:` : 使用するモジュールを宣言しています。 -- `provider:` : BIG-IP の詳細な接続情報のオブジェクト。 -- `server: "{{private_ip}}"` : 接続先となるBIG-IPのIPアドレスを指定します。これはインベントリ内で `private_ip` として登録されているものです。 -- `user: "{{ansible_user}}"` : BIG-IP へログインするユーザー名を指定します。 -- `password: "{{ansible_password}}"` : BIG-IPへログインする際のパスワードを指定します。 -- `server_port: 8443` : BIG-IPへ接続する際のポート番号を指定します。 -- `validate_certs: false` : (あくまで演習用ラボなので)SSL証明書の検証を行わないように設定します。 -- `name: "http_pool"` : 作成するプールの名前を指定します。 -- `lb_method: "round-robin"` : 負荷分散方式を round-robin に指定します。全ての設定可能な負荷分散方式は bigip_pool モジュールのドキュメンテーションで確認できます。 -- `monitors: "/Common/http"` : http_poolというプールはHTTPトラフィックだけを扱うことを指定します。 -- `monitor_type: "and_list"` : 全てのモニターがチェックされるように指定します。 +- `name: CREATE POOL` は、ターミナル出力に表示されるユーザー定義の説明です。 - `bigip_pool:` +は、使用するモジュールをタスクに指示します。 - `server: "{{private_ip}}"` パラメーターは、F5 BIG-IP IP +アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` として保存されます - +`provider:` パラメーターは、BIG-IP の接続詳細のグループです。 - `user: "{{ansible_user}}"` +パラメーターは、F5 BIG-IP デバイスにログインするためのユーザー名をモジュールに指示します - `password: +"{{ansible_password}}"` パラメーターは、F5 BIG-IP デバイスにログインするためのパスワードをモジュールに指示します - +`server_port: 8443` パラメーターは、F5 BIG-IP デバイスに接続するためのポートをモジュールに指示します - `name: +"http_pool"` パラメーターは、http_pool という名前のプールを作成するようにモジュールに指示します - `lb_method: +"round-robin"` パラメーターは、負荷分散方法がラウンドロビンであることをモジュールに指示します。方法の全リストは、bigip_pool +のドキュメントページに記載されています。 - `monitors: "/Common/http"` パラメーターは、http_pool が http +トラフィックだけを対象とすることをモジュールに指示します。 - `monitor_type: "and_list"` +は、すべてのモニターが確認されるようにします。 - `validate_certs: false` パラメーターは、SSL +証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。 -ファイルを保存して、エディタを終了してください。 +ファイルを保存して、エディターを終了します -## Step 4 +## ステップ 4 -プレイブックの実行 - コントロールホストのコマンドラインで以下を実行します。 +Playbook を実行します。コントロールホストの VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-pool.yml +[student1@ansible ~]$ ansible-navigator run bigip-pool.yml --mode stdout ``` # Playbook の出力 -出力は以下のようになります。 +出力は次のようになります。 ```yaml -[student1@ansible ~]$ ansible-playbook bigip-pool.yml +[student1@ansible ~]$ ansible-navigator run bigip-pool.yml --mode stdout PLAY [BIG-IP SETUP] ************************************************************ @@ -108,19 +108,21 @@ PLAY RECAP ********************************************************************* f5 : ok=1 changed=1 unreachable=0 failed=0 ``` -# 解答 +# ソリューション -完成形のAnsible Playbook はこちらから参照可能です。[bigip-pool.yml](./bigip-pool.yml). +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-pool.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.3-add-pool/bigip-pool.yml) +を表示するには、ここをクリックしてください。 -# 確認 +# ソリューションの確認 -ブラウザでBIG-IPへログインして設定されたものを確認してみましょう。lab_inventory/hosts ファイルからBIG-IPのIPアドレスを確認して、https://X.X.X.X:8443/ のようにアクセスします。 +Web ブラウザーで F5 にログインし、設定された内容を確認します。lab_inventory/hosts ファイルから F5 ロードバランサーの +IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 -BIG-IP へのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供、デフォルトは ansible** -画面左のメニューからプールが確認できます。**Local Traffic** -> **Pools** とクリックします。 +ロードバランサーのプールは、左側のメニューからナビゲーションして探すことができます。Local Traffic をクリックし、続いて Pools をクリックします。 ![f5pool](pool.png) -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/1.4-add-pool-members/README.ja.md b/exercises/ansible_f5/1.4-add-pool-members/README.ja.md index 3d4c1d3c1..f4d13dbe4 100644 --- a/exercises/ansible_f5/1.4-add-pool-members/README.ja.md +++ b/exercises/ansible_f5/1.4-add-pool-members/README.ja.md @@ -1,35 +1,30 @@ -# 演習 1.4 - メンバーをプールへ追加 +# 演習 1.4: F5 でのプールへのメンバーの追加 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [出力のパース](#出力のパース) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[出力の解釈](#output-parsing) - [ソリューション](#solution) - +[ソリューションの確認](#verifying-the-solution) # 目的 -本演習では、[BIG-IP pool member module](https://docs.ansible.com/ansible/latest/modules/bigip_pool_member_module.html) を使って、演習 1.3 で作成したプール `http_pool` にWebサーバーを追加します。 +[BIG-IP プールメンバーモジュール](https://docs.ansible.com/ansible/latest/modules/bigip_pool_module.html) を使用して、Web サーバーノードを前の演習で作成したロードバランシングプール `http_pool` に結びつける方法を説明します。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディタを使って、`bigip-pool-members.yml` というファイルを新規作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-pool-members.yml` +という名前の新しいファイルを作成します。 -``` -[student1@ansible ~]$ nano bigip-pool-members.yml -``` +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) ->`vim` と `nano` はコントロールノード上で利用可能です。RDP経由でのVisual Studio と Atom も同様です。 +## ステップ 2: -## Step 2: - -`bigip-pool-members.yml` へ、以下のプレイブック定義を記述します : +次のプレイ定義を `bigip-pool-members.yml` に入力します。 ``` yaml --- @@ -39,16 +34,17 @@ gather_facts: false ``` -- このファイルの最初の `---` は、このファイルがYAMLであることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` で、このプレイブックが(自分自身にSSH接続をするのではなく)ローカル実行されることを指示しています。 -- `gather_facts: false` で、FACTの収集を無効化します。このプレイブックではFACT変数を使用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: lb` は、プレイが lb +グループでのみ実行されることを示します。技術的には、F5 デバイスは 1 つだけしか存在しませんが、複数あれば、それぞれが同時に設定されます。 - +`connection: local` は、(自身に SSH 接続するのではなく)ローカルで実行するように Playbook に指示します - +`gather_facts: false` はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -まだエディタを閉じないでください。 +まだエディターを終了しないでください。 -## Step 3 +## ステップ 3 -次に、タスクを追加します。このタスクは、`bigip_pool_member` モジュールを使用して、BIG-IP上に、2つの RHEL (Webサーバー)をプールメンバーとして設定します。 +次に、最初の `task` を上記の Playbook に追加します。このタスクは、`bigip_pool_member` モジュールを使用して 2 +つの RHEL Web サーバーを BIG-IP F5 ロードバランサー上のノードとして設定します。 {% raw %} ``` yaml @@ -70,39 +66,42 @@ ``` {% endraw %} +タスク内の各行の説明: - `name: ADD POOL MEMBERS` は、ターミナル出力に表示されるユーザー定義の説明です。 - +`bigip_pool_member:` は、使用するモジュールをタスクに指示します。 -- `name: ADD POOL MEMBERS` : ユーザーが定義する説明文です。これは実行時に端末に表示されることになります。 -- `bigip_pool_member:` : 使用するモジュールを宣言しています。 -- `provider:` : BIG-IP の詳細な接続情報のオブジェクト。 -- `server: "{{private_ip}}"` : 接続先となるBIG-IPのIPアドレスを指定します。これはインベントリ内で `private_ip` として登録されているものです。 -- `user: "{{ansible_user}}"` : BIG-IP へログインするユーザー名を指定します。 -- `password: "{{ansible_password}}"` : BIG-IPへログインする際のパスワードを指定します。 -- `server_port: 8443` : BIG-IPへ接続する際のポート番号を指定します。 -- `validate_certs: false` : (あくまで演習用ラボなので)SSL証明書の検証を行わないように設定します。 -- `state: "present"` : プールメンバーを(削除ではなく)追加するように指定します。 -- `name: "{{hostvars[item].inventory_hostname}}"` : `inventory_hostname` をホスト名(node1、node2 となります)として使うことを指示します。 -- `host: "{{hostvars[item].ansible_host}}"` : モジュールへインベントリに登録済みのWebサーバーのIPアドレスを追加します。 -- `port`: プールメンバーポートを指定します。 -- `pool: "http_pool"` : Webサーバーを追加するプールとして、http_pool を指定します。 -最後に、(モジュール・パラメータではなく)タスクレベルのパラメータである、loop パラメータの指定です。 -- `loop:` : 与えられた一覧に対してタスクをループ実行することを指定します。この演習では、二つのRHELホストを含む web グループが一覧となります。 +次に、モジュールパラメータが来ます - `server: "{{private_ip}}"` パラメーターは、F5 BIG-IP IP +アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` として保存されます - +`provider:` パラメーターは、BIG-IP の接続詳細のグループです。 - `user: "{{ansible_user}}"` +パラメーターは、F5 BIG-IP デバイスにログインするためのユーザー名をモジュールに指示します - `password: +"{{ansible_password}}"` パラメーターは、F5 BIG-IP デバイスにログインするためのパスワードをモジュールに指示します - +`server_port: 8443` パラメーターは、F5 BIG-IP デバイスに接続するためのポートをモジュールに指示します - `state: +"present"` パラメーターは、これを削除するのではなく追加することをモジュールに指示します。 - `name: +"{{hostvars[item].inventory_hostname}}"` パラメーターは、名前に `inventory_hostname` +(node1 および node2) を使用するようにモジュールに指示します。 - `host: +"{{hostvars[item].ansible_host}}"` パラメーターは、すでにインベントリーに定義されている Web サーバーの IP +アドレスを追加するようにモジュールに指示します。 - `port` パラメーターは、プールメンバーのポートを指示します。 - `pool: +"http_pool"` パラメーターは、このノードを http_pool という名前のプールに配置するようにモジュールに指示します - +`validate_certs: "no"` パラメーターは、SSL +証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。最後に、タスクレベルの loop +パラメーターが来ます (モジュールパラメーターではなく、タスクレベルのパラメーターです)。 - `loop:` +は、指定されたリストをループオーバーするようにタスクに指示します。ここでは、リストは 2 つの RHEL ホストが含まれるグループ Web です。 -ファイルを保存して、エディタを終了してください。 +ファイルを保存して、エディターを終了します。 -## Step 4 +## ステップ 4 -プレイブックの実行 - コントロールホストのコマンドラインで以下を実行します。 +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-pool-members.yml +[student1@ansible ~]$ ansible-navigator run bigip-pool-members.yml --mode stdout ``` # Playbook の出力 -出力は以下のようになります。 +出力は次のようになります。 ```yaml -[student1@ansible ~]$ ansible-playbook bigip-pool-members.yml +[student1@ansible ~]$ ansible-navigator run bigip-pool-members.yml --mode stdout PLAY [BIG-IP SETUP] ************************************************************ @@ -113,16 +112,18 @@ changed: [f5] => (item=node2) PLAY RECAP ********************************************************************* f5 : ok=1 changed=1 unreachable=0 failed=0 ``` -# 出力のパース +# 出力の解釈 -bigip_device_facts モジュールを使って、BIG-IPに設定されたプールメンバー情報を確認してみましょう。 [JSON query](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#json-query-filter) は強力なフィルタリングツールです。演習を進める前に確認してみましょう。 +bigip_device_info を使用して BIG-IP 上のプールメンバーを収集してみましょう。[JSON +クエリー](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#json-query-filter) +は、使用できる強力なフィルターです。先に進む前に確認してください。 {% raw %} ``` [student1@ansible ~]$ nano display-pool-members.yml ``` -以下を記述します: +以下の設定を入力します。 ```yaml --- - name: "List pool members" @@ -148,24 +149,24 @@ bigip_device_facts モジュールを使って、BIG-IPに設定されたプー - name: "Show members belonging to pool" debug: "msg={{item}}" - loop: "{{bigip_device_facts.ltm_pools | json_query(query_string)}}" + loop: "{{bigip_device_facts.ltm_pools | community.general.json_query(query_string)}}" vars: query_string: "[?name=='http_pool'].members[*].name[]" ``` {% endraw %} -- `vars:` : モジュール内部で利用されるクエリ文字列を定義しています。 -- `query_String` : 'http_pool' というプールに含まれる全てのプールメンバーの名前を取得します。query_string を設定することで JSON の可読性が向上します。 +- モジュールの `vars:` は、モジュール自体で使用される変数 query_string を定義します。 +- `query_String` は、プール名 'http_pool' からのすべてのメンバーの名前を持ちます。json 文字列全体の読み取りを容易にするために、query_string が定義されます -プレイブックの実行 +VS Code ターミナルでの Playbook の実行 ``` -[student1@ansible ~]$ ansible-playbook display-pool-members.yml +[student1@ansible ~]$ ansible-navigator run display-pool-members.yml --mode stdout ``` 出力 -```yaml -[student1@ansible ~]$ ansible-playbook display-pool-members.yml +``` yaml +[student1@ansible 1.4-add-pool-members]$ ansible-navigator run display-pool-members.yml --mode stdout PLAY [List pool members] ****************************************************** @@ -239,22 +240,24 @@ ok: [f5] => (item=node2:80) => msg: node2:80 PLAY RECAP ******************************************************************** -f5 : ok=3 changed=0 unreachable=0 failed=0 +f5 : ok=3 changed=1 unreachable=0 failed=0 + ``` -# 解答 -完成形のAnsible Playbook はこちらから参照可能です。 [bigip-pool-members.yml](./bigip-pool-members.yml). +# ソリューション +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-pool-members.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.4-add-pool-members/bigip-pool-members.yml) +を表示するには、ここをクリックしてください。 -# 確認 +# ソリューションの確認 -ブラウザでBIG-IPへログインして設定されたものを確認してみましょう。lab_inventory/hosts ファイルからBIG-IPのIPアドレスを確認して、https://X.X.X.X:8443/ のようにアクセスします。 +Web ブラウザーで F5 にログインし、設定された内容を確認します。lab_inventory/hosts ファイルから F5 ロードバランサーの +IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 -BIG-IP へのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供**、デフォルトは ansible -プールに二つのメンバー(node1とnode2)が含まれていることを確認します。**Local Traffic** -> **Pools** とクリックします。そして、http_pool をクリックすることでより詳細な情報を確認します。Members タブをクリックすることで全てのプールメンバーが表示されます。 +プールには 2 つのメンバー(node1 および node2)が表示されるようになります。Local Traffic をクリックし、続いて Pools をクリックします。http_pool をクリックして、より詳細な情報を取得します。中央の Members タブをクリックし、すべてのメンバーを一覧表示します。 ![f5members](poolmembers.png) - -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/1.5-add-virtual-server/README.ja.md b/exercises/ansible_f5/1.5-add-virtual-server/README.ja.md index c07bc632b..a23be0f19 100644 --- a/exercises/ansible_f5/1.5-add-virtual-server/README.ja.md +++ b/exercises/ansible_f5/1.5-add-virtual-server/README.ja.md @@ -1,36 +1,34 @@ -# 演習 1.5 - Virtual Server の追加 +# 演習 1.5: bigip_virtual_server モジュールの使用 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) - [ソリューションの確認](#verifying-the-solution) # 目的 -本演習では、[BIG-IP virtual server module](https://docs.ansible.com/ansible/latest/modules/bigip_virtual_server_module.html) を使って、BIG-IPにVirtual Server を設定します。Virtual Server とは、IPとポート番号の組み合わせです。 +[BIG-IP +仮想サーバーモジュール](https://docs.ansible.com/ansible/latest/modules/bigip_virtual_server_module.html) +を使用して BIG-IP 上で仮想サーバーを設定する方法を説明します。仮想サーバーは IP:Port の組み合わせです。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディタを使って、`bigip-virtual-server.yml` というファイルを新規作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-virtual-server.yml` +という名前の新しいファイルを作成します。 -``` -[student1@ansible ~]$ nano bigip-virtual-server.yml -``` - ->`vim` と `nano` はコントロールノード上で利用可能です。RDP経由でのVisual Studio と Atom も同様です。 +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) -## Step 2: +## ステップ 2: -Ansible のプレイブックは **YAML** 形式のファイルです。YAMLは構造化されたフォーマットで、非常に読み易いものです。 +Ansible Playbook は **YAML** ファイルです。YAML +は構造化されたエンコーディング形式であり、人間が非常に読みやすくなっています (JSON 形式のサブセットとは異なり)。 -以下の定義を `bigip-virtual-server.yml` に入力します : +次のプレイ定義を `bigip-virtual-server.yml` に入力します。 ``` yaml --- @@ -40,18 +38,20 @@ Ansible のプレイブックは **YAML** 形式のファイルです。YAMLは gather_facts: false ``` -- このファイルの最初の `---` は、このファイルがYAMLであることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` で、このプレイブックが(自分自身にSSH接続をするのではなく)ローカル実行されることを指示しています。 -- `gather_facts: false` で、FACTの収集を無効化します。このプレイブックではFACT変数を使用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: f5` は、プレイが F5 BIG-IP +デバイスでのみ実行されることを示します。 - `connection: local` は、(自身に SSH +接続するのではなく)ローカルで実行するように Playbook に指示します - `gather_facts: no` +はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -まだエディタを閉じないでください。 +まだエディターを終了しないでください。 -## Step 3 +## ステップ 3 -次に、タスクを追加します。このタスクは、`bigip-virtual-server` モジュールを使用して、BIG-IP上にVirtual Server を設定します。 +次に、`task` を上記の Playbook に追加します。このタスクは、`bigip-virtual-server` を使用して BIG-IP +上で仮想サーバーを設定します。 + + -{% raw %} ``` yaml tasks: - name: ADD VIRTUAL SERVER @@ -71,78 +71,87 @@ Ansible のプレイブックは **YAML** 形式のファイルです。YAMLは snat: "Automap" ``` -{% endraw %} + ->プレイブックは一連のタスクから成ります。タスクとモジュールは1:1の関係性があります。モジュールは、Ansible API やansible / ansible-playbook から利用可能で、再利用可能なスタンドアロンスクリプトです。実行結果は、JSON文字列として標準出力へ出力されます。 +>プレイはタスクのリストです。タスクとモジュールには 1:1 の相関があります。Ansible モジュールは再利用可能なスタンドアロンのスクリプトで、Ansible API または ansibleやansible-playbook プログラムで使用できます。これらは、終了する前に JSON 文字列を stdout に出力して Ansible に情報を返します。 -- `name: ADD VIRTUAL SERVER` : ユーザーが定義する説明文です。これは実行時に端末に表示されることになります。 -- `bigip_virtual_server:` : 使用するモジュールを宣言しています。 -- `provider:` : BIG-IP の詳細な接続情報のオブジェクト。 -- `server: "{{private_ip}}"` : 接続先となるBIG-IPのIPアドレスを指定します。これはインベントリ内で `private_ip` として登録されているものです。 -- `user: "{{ansible_user}}"` : BIG-IP へログインするユーザー名を指定します。 -- `password: "{{ansible_password}}"` : BIG-IPへログインする際のパスワードを指定します。 -- `server_port: 8443` : BIG-IPへ接続する際のポート番号を指定します。 -- `validate_certs: false` : (あくまで演習用ラボなので)SSL証明書の検証を行わないように設定します。 -- `name: "vip"` : vip という名前のVirtual Server を作成することを指定します。 -- `destination"` : Virtual Server にIPアドレスを指定します。 -- `port` : Virtual Server がリッスンするポート番号を指定します。 -- `enabled_vlans` : Virtual Server が有効化されるVLANを指定します。 -- `all_profiles` : Virtual Server に全てのプロファイルをアサインします。 -- `pool` : Virtual Server に紐づけられるプールを指定します。 -- `snat` : Source NAT の指定をします。本演習では、Automap を設定しています。これにより、後段のWebサーバーへ送られるトラフィック(パケット)の送信元IPはBIG-IP自身のIPとなります。 +- `name: ADD VIRTUAL SERVER` は、ターミナル出力に表示されるユーザー定義の説明です。 - +`bigip_virtual_server:` は、使用するモジュールをタスクに指示します。 - `server: "{{private_ip}}"` +パラメーターは、F5 BIG-IP IP アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` +として保存されます - `provider:` パラメーターは、BIG-IP の接続詳細のグループです。 - `user: +"{{ansible_user}}"` パラメーターは、F5 BIG-IP デバイスにログインするためのユーザー名をモジュールに指示します - +`password: "{{ansible_password}}"` パラメーターは、F5 BIG-IP +デバイスにログインするためのパスワードをモジュールに指示します - `server_port: 8443` パラメーターは、F5 BIG-IP +デバイスに接続するためのポートをモジュールに指示します - `name: "vip"` パラメーターは、vip +という名前の仮想サーバーを作成するようにモジュールに指示します - `destination"` パラメーターは、仮想サーバーに割り当てる IP +アドレスをモジュールに指示します - `port` パラメーターは、仮想サーバーがリッスンするポートをモジュールに指示します - +`enabled_vlans` パラメーターは、仮想サーバーが有効なすべての vlan をモジュールに指示します - `all_profiles` +パラメーターは、仮想サーバーに割り当てられるすべてのプロファイルをモジュールに指示します - `pool` +パラメーターは、仮想サーバーに割り当てられるプールをモジュールに指示します - `snat` +パラメーターは、ソースネットワークアドレスをモジュールに指示します。このモジュールでは、自動マッピングされるように割り当てます。したがって、バックエンドサーバーに送信されるリクエストのソースアドレスは、BIG-IP +の自己 ip アドレスです - `validate_certs: "no"` パラメーターは、SSL +証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。 -ファイルを保存して、エディタを終了してください。 +ファイルを保存して、エディターを終了します -## Step 4 +## ステップ 4 -プレイブックの実行 - コントロールホストのコマンドラインで以下を実行します。 +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-virtual-server.yml +[student1@ansible ~]$ ansible-navigator run bigip-virtual-server.yml --mode stdout ``` # Playbook の出力 ```yaml -[student1@ansible]$ ansible-playbook bigip-virtual-server.yml +[student1@ansible]$ ansible-navigator run bigip-virtual-server.yml --mode stdout -PLAY [BIG-IP SETUP]************************************************************* +PLAY [BIG-IP SETUP] *********************************************************** -TASK [ADD VIRTUAL SERVER] ****************************************************** +TASK [ADD VIRTUAL SERVER] ***************************************************** changed: [f5] -PLAY RECAP ********************************************************************* +PLAY RECAP ******************************************************************** f5 : ok=1 changed=1 unreachable=0 failed=0 ``` -# 解答 +# ソリューション + +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-virtual-server.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.5-add-virtual-server/bigip-virtual-server.yml) +を表示するには、ここをクリックしてください。 -完成形のAnsible Playbook はこちらから参照可能です。 [bigip-virtual-server.yml](./bigip-virtual-server.yml). +# ソリューションの確認 -# 確認 +設定した **仮想サーバー** を表示するには、Web ブラウザーを使用して F5 ロードバランサーにログインします。 -ブラウザでBIG-IPへログインして設定されたものを確認してみましょう。lab_inventory/hosts ファイルからBIG-IPのIPアドレスを確認して、https://X.X.X.X:8443/ のようにアクセスします。 +>`/home/studentX/networking_workshop/lab_inventory/hosts` ファイルから F5 ロードバランサーの IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 -BIG-IP へのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供**、デフォルトは ansible -Virtual Serverは画面左のメニューから辿ることで確認できます。**Local Traffic** -> **Virtual Server** とクリックします。以下のスクリーンショットを参考にしてください。 -![f5 vip image](f5vip.png) +ロードバランサーの仮想サーバーは、左側のメニューからナビゲーションして探すことができます。**Local Traffic** +をクリックしてから、**Virtual Server** をクリックします。以下のスクリーンショットを参照してください。![f5 vip +image](f5vip.png) -## Webサーバーの確認 +## Web サーバーの確認 -それぞれのWebサーバー上ではApache HTTPD が実行されています。演習 1.1 から 1.5 までで、このWebサーバーからなるプールの負荷分散のセットアップが完了します。ブラウザで、BIG-IPのパブリックIPにアクセスします: +各 RHEL Web サーバーでは、すでに apache が実行されています。演習 1.1 から 1.5 では、Web +サーバーのプールのロードバランサーを正常に設定しました。Web ブラウザーで F5 ロードバランサーのパブリック IP を開きます。 ->ここでは、ポート番号は 8443ではなく 443 を指定します。 例: https://X.X.X.X:443/ +>今回は、ポート 8443 の代わりに 443 を使用します (例: https://X.X.X.X:443/) -ブラウザを再読み込みを行うたびに、**node1** と **node2** が入れかわり表示されるはずです。以下のアニメーションを参考にしてください。 +ホストをリフレッシュするたびに、**node1** と **node2** が切り替わります。ホストフィールドが変更されるアニメーションを、以下に示します。 ![animation](animation.gif) ->注:ブラウザの種類によっては、アニメーションが動かない可能性があります。 +>アニメーションは特定のブラウザーでは機能しない可能性があります。 -## もう一つの確認方法 +## その他の検証方法 -ブラウザを使用する代わりに、コントロールノードのコマンドラインを使うことも可能です。`curl` コマンドを `--insecure` と `--silent` オプションをつけて、BIG-IPのパブリックIP:443 に対して実行します。出力結果を、割り当てられたstudent 番号(例:student5)を使って grep コマンドにかけることで確認しやすくなります。 +ブラウザーウィンドウを使用する代わりに、Ansible コントロールノードでコマンドラインを使用することもできます。**ansible_host** +で、`--insecure` および `--silent` コマンドライン引数と組み合わせて `curl` コマンドを使用して、F5 +ロードバランサーのパブリック IP またはプライベート IP アドレスにアクセスします。ウェブサイト全体がコマンドラインで読み込まれるため、`| +grep` を使用して該当するワークベンチに割り当てられた学生番号を検索することを推奨します (例: student5 の場合は `| grep +student5`) ``` [studentX@ansible ~]$ curl https://172.16.26.136:443 --insecure --silent | grep studentX @@ -153,4 +162,5 @@ Virtual Serverは画面左のメニューから辿ることで確認できます

F5TEST-studentX-node1

``` -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/1.6-add-irules/README.ja.md b/exercises/ansible_f5/1.6-add-irules/README.ja.md index dae473820..06b6acbfa 100644 --- a/exercises/ansible_f5/1.6-add-irules/README.ja.md +++ b/exercises/ansible_f5/1.6-add-irules/README.ja.md @@ -1,36 +1,33 @@ -# 演習 1.6 - iRules の追加と Virtual Server へのアタッチ +# 演習 1.6: bigip_irule モジュールの使用 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) - [ソリューションの確認](#verifying-the-solution) # 目的 -本演習では、[BIG-IP irule module](https://docs.ansible.com/ansible/latest/modules/bigip_irule_module.html)を使って、iRulesをBIG-IPへ登録し、それをVirtual Server にアタッチします。 +[BIG-IP irule +モジュール](https://docs.ansible.com/ansible/latest/modules/bigip_irule_module.html) +を使用して iRules を BIG-IP に追加し、続いて iRules を仮想サーバーにアタッチする方法を説明します。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディタを使って、`bigip-irule.yml` というファイルを新規作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-irule.yml` という名前の新しいファイルを作成します。 -``` -[student1@ansible ~]$ nano bigip-irule.yml -``` +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) ->`vim` と `nano` はコントロールノード上で利用可能です。RDP経由でのVisual Studio と Atom も同様です。 +## ステップ 2: -## Step 2: +Ansible Playbook は **YAML** ファイルです。YAML +は構造化されたエンコーディング形式であり、人間が非常に読みやすくなっています (JSON 形式のサブセットとは異なり)。 -Ansible のプレイブックは **YAML** 形式のファイルです。YAMLは構造化されたフォーマットで、非常に読み易いものです。 - -以下の定義を `bigip-irule.yml` に記述します: +次のプレイ定義を `bigip-irule.yml` に入力します。 ``` yaml --- @@ -40,40 +37,37 @@ Ansible のプレイブックは **YAML** 形式のファイルです。YAMLは gather_facts: false ``` -- このファイルの最初の `---` は、このファイルがYAMLであることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` で、このプレイブックが(自分自身にSSH接続をするのではなく)ローカル実行されることを指示しています。 -- `gather_facts: false` で、FACTの収集を無効化します。このプレイブックではFACT変数を使用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: f5` は、プレイが F5 BIG-IP +デバイスでのみ実行されることを示します。 - `connection: local` は、(自身に SSH +接続するのではなく)ローカルで実行するように Playbook に指示します - `gather_facts: no` +はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -ファイルを保存して、エディタを終了してください。 +保存して、エディターを終了します。 -## Step 3 +## ステップ 3 -2つのダミーのiRules を作成します。それぞれ、'irule1' 'irule2' という名前にします。 +'irule1' と 'irule2' という名前のダミーの irules を 2 つ作成します。 +`irule1` の内容 ``` -[student1@ansible ~]$ nano irule1 - when HTTP_REQUEST { log local0. "Accessing iRule1" } - ``` ファイルを保存します。 +`irule2` の内容 ``` -[student1@ansible ~]$ nano irule2 - when HTTP_REQUEST { log local0. "Accessing iRule2" } - ``` ファイルを保存します。 -## Step 4 +## ステップ 4 -次に、`bigip-irule.yml` を開きタスクを追加します。このタスクは、`bigip-irule` モジュールを使用して、BIG-IPにiRulesを登録します。 +次に、`bigip-irule.yml` を再度開き、`task` を追加します。このタスクでは、`bigip-irule` を使用して irules +を BIG-IP に追加します。 {% raw %} ``` yaml @@ -96,30 +90,38 @@ when HTTP_REQUEST { ``` {% endraw %} ->プレイブックは一連のタスクから成ります。タスクとモジュールは1:1の関係性があります。モジュールは、Ansible API やansible / ansible-playbook から利用可能で、再利用可能なスタンドアロンスクリプトです。実行結果は、JSON文字列として標準出力へ出力されます。 - -- 変数 `'irules'` : 2つのiRules(つまり、'irule1'と'irule2')を設定します。 -- `name: ADD iRules` : ユーザーが定義する説明文です。これは実行時に端末に表示されることになります。 -- `bigip_irule:` : 使用するモジュールを宣言しています。 -- `provider:` : BIG-IP の詳細な接続情報のオブジェクト。 -- `server: "{{private_ip}}"` : 接続先となるBIG-IPのIPアドレスを指定します。これはインベントリ内で `private_ip` として登録されているものです。 -- `user: "{{ansible_user}}"` : BIG-IP へログインするユーザー名を指定します。 -- `password: "{{ansible_password}}"` : BIG-IPへログインする際のパスワードを指定します。 -- `server_port: 8443` : BIG-IPへ接続する際のポート番号を指定します。 -- `validate_certs: false` : (あくまで演習用ラボなので)SSL証明書の検証を行わないように設定します。 -- `module: ltm` : iRulesがBIG-IPのどの機能で使用するかを指定します。本演習では ltm を指定します。 -- `name: "{{item}}"` : 'irule1'と 'irule2' という名前の iRules を登録することを指定します。 -- `content: "{{lookup('file','{{item}}')}}" ` : [lookup plugin](https://docs.ansible.com/ansible/latest/plugins/lookup.html)を使って、iRulesに追加するコンテンツを指定します。 -- `loop:` 与えられた iRules のリストに対してタスクを実行するように指定します。 - -まだエディタを閉じないでください。 - -## Step 5 - -次に、タスクを実行します。このタスクは `bigip_virtual_server` モジュールを使って、BIG-IP上のVirtual Server へiRules をアタッチします。 +>プレイはタスクのリストです。タスクとモジュールには 1:1 の相関があります。Ansible モジュールは再利用可能なスタンドアロンのスクリプトで、Ansible API または ansibleやansible-playbook プログラムで使用できます。これらは、終了する前に JSON 文字列を stdout に出力して Ansible に情報を返します。 + +- `A variable 'irules'` は、2 つの irules ('irule1' と irule2') で定義されるリストです。 +- `name: ADD iRules` は、ターミナル出力に表示されるユーザー定義の説明です。 +- `bigip_irule:` は、使用するモジュールをタスクに指示します。 +- `server: "{{private_ip}}"` パラメーターは、F5 BIG-IP IP + アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` として保存されます +- `provider:` パラメーターは、BIG-IP の接続詳細のグループです。 +- `user: "{{ansible_user}}"` パラメーターは、F5 BIG-IP + デバイスにログインするためのユーザー名をモジュールに指示します +- `password: "{{ansible_password}}"` パラメーターは、F5 BIG-IP + デバイスにログインするためのパスワードをモジュールに指示します +- `server_port: 8443` パラメーターは、F5 BIG-IP デバイスに接続するためのポートをモジュールに指示します +- `module: ltm` パラメーターは、iRule が対象となっている BIG-IP モジュール (ltm) をモジュールに指示します。 +- `name: "{{item}}"` パラメーターは、モジュールに対し、'irule1' と 'irule2' という名前の iRule + を作成するように指示します。 +- `content: "{{lookup('file','{{item}}')}}" ` パラメーターは、[lookup + プラグイン]https://docs.ansible.com/ansible/latest/plugins/lookup.html) を使用して + iRule に追加するコンテンツをモジュールに指示します。 +- `validate_certs: "no"` パラメーターは、SSL + 証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。 +- `loop:` は、提供された一覧をループするようにタスクに指示を出します。ここでは、このリストは iRules の一覧です。 + + +## ステップ 5 + +次に、`task` を上記の Playbook に追加します。このタスクは、`bigip_virtual_server` を使用して iRules を +BIG-IP 上の仮想サーバーにアタッチします。 {% raw %} ``` yaml + - name: ATTACH iRules TO VIRTUAL SERVER f5networks.f5_modules.bigip_virtual_server: provider: @@ -133,58 +135,60 @@ when HTTP_REQUEST { ``` {% endraw %} +- `irules: "{{irules}}` は、仮想サーバー「irule1」および「irule2」にアタッチされる irules の一覧です。 -- `irules: "{{irules}}` : Virtual ServerにアタッチするiRulesのリストです。 'irule1'と'irule2' となります。 - -参考:[BIG-IP virtual_Server module](https://docs.ansible.com/ansible/latest/modules/bigip_irule_module.html) -or [演習 1.5](../1.5-add-virtual-server/bigip-virtual-server.yml) +[BIG-IP virtual_Server +モジュール](https://docs.ansible.com/ansible/latest/modules/bigip_irule_module.html) +の詳細または参照 [演習 +1.5](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.5-add-virtual-server/bigip-virtual-server.yml) -ファイルを保存して、エディタを終了してください。 +ファイルを保存します。 -## Step 6 +## ステップ 6 -プレイブックの実行 - コントロールホストのコマンドラインで以下を実行します。 +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-irule.yml +[student1@ansible ~]$ ansible-navigator run bigip-irule.yml --mode stdout ``` # Playbook の出力 ```yaml -[student1@ansible]$ ansible-playbook bigip-irule.yml +[student1@ansible]$ ansible-navigator run bigip-irule.yml --mode stdout -PLAY [BIG-IP SETUP] ********************************************************************************************************************************* +PLAY [BIG-IP SETUP] *********************************************************** -TASK [ADD iRules] ********************************************************************************************************************************* +TASK [ADD iRules] ******************************************************************************* changed: [f5] => (item=irule1) changed: [f5] => (item=irule2) -TASK [ATTACH iRules TO VIRTUAL SERVER] ********************************************************************************************************************** +TASK [ATTACH iRules TO VIRTUAL SERVER] **************************************** changed: [f5] -PLAY RECAP ********************************************************************************************************************************* +PLAY RECAP ******************************************************************************* f5 : ok=2 changed=2 unreachable=0 failed=0 ``` -# 解答 +# ソリューション -完成形のAnsible Playbook はこちらから参照可能です。 [bigip-irule.yml](./bigip-irule.yml). +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-irule.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.6-add-irules/bigip-irule.yml) +を表示するには、ここをクリックしてください。 -# 確認 +# ソリューションの確認 -設定された **iRules と Virtual Server** を確認するために, ブラウザでBIG-IPへログインします。 +設定した **iRules および仮想サーバー** を表示するには、Web ブラウザーを使用して F5 ロードバランサーにログインします。 -lab_inventory/hosts ファイルからBIG-IPのIPアドレスを確認して、https://X.X.X.X:8443/ のようにアクセスします。 +>`/home/studentX/networking_workshop/lab_inventory/hosts` ファイルから F5 ロードバランサーの IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 -BIG-IP へのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供**、デフォルトは ansible -登録されたiRulesの一覧は、画面左のメニューから辿ることで確認できます。**Local Traffic** -> **iRules** -> **iRules List** とクリックします。 +iRules の一覧は、左側のメニューからナビゲーションして探すことができます。Local Traffic -> iRules -> iRules List をクリックします。 -Virtual Server の詳細の確認は、**Local Traffic** -> **Virtual Servers** とクリックし 'resoruces' タブを参照することで、iRulesがVirtual Serverにアタッチされていることが確認できます。 +仮想サーバーを表示するには、Local Traffic -> Virtual Servers をクリックし、Virtual Server をクリックしてから 'resoruces' タブをクリックし、仮想サーバーにアタッチされた iRules を表示します ![irules](bigip-irule.png) -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/1.7-save-running-config/README.ja.md b/exercises/ansible_f5/1.7-save-running-config/README.ja.md index 9f256b119..e25fface4 100644 --- a/exercises/ansible_f5/1.7-save-running-config/README.ja.md +++ b/exercises/ansible_f5/1.7-save-running-config/README.ja.md @@ -1,35 +1,34 @@ -# 演習 1.7 - コンフィグの保存 +# 演習 1.7: bigip_config モジュールの使用 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbookの出力](#playbookの出力) -- [解答](#解答) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) # 目的 -[BIG-IP config module](https://docs.ansible.com/ansible/latest/modules/bigip_config_module.html) を使って、稼働中のコンフィグを保存する方法を確認する。 +[BIG-IP +設定モジュール](https://docs.ansible.com/ansible/latest/modules/bigip_config_module.html) +を使用して実行中の設定をディスクに保存する方法を説明します。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディアを使って `bigip-config.yml` ファイルを作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-config.yml` +という名前の新しいファイルを作成します。 -``` -[student1@ansible ~]$ nano bigip-config.yml -``` - ->`vim` と`nano` がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。 +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) -## Step 2: +## ステップ 2: -Ansible の playbook は **YAML** ファイルです。YAML は構造化されたエンコードで人にとって読みやすい形式です(JSON と違い・・・) +Ansible Playbook は **YAML** ファイルです。YAML +は構造化されたエンコーディング形式であり、人間が非常に読みやすくなっています (JSON 形式のサブセットとは異なり)。 -以下の play 定義を `bigip-config.yml` に追加してください: +次のプレイ定義を `bigip-config.yml` に入力します。 ``` yaml --- @@ -39,16 +38,14 @@ Ansible の playbook は **YAML** ファイルです。YAML は構造化され gather_facts: false ``` -- ファイルの先頭の `---` はこのファイルが YAML であることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` は Playbook がローカル実行されることを示します。 -- `gather_facts: false` Fact 情報の収集を無効にします。この演習では Playbook の中で Fact 情報を利用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: f5` は、プレイが F5 BIG-IP +デバイスでのみ実行されることを示します。 - `connection: local` は、(自身に SSH +接続するのではなく)ローカルで実行するように Playbook に指示します - `gather_facts: false` +はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -まだエディタを閉じないでください。 +## ステップ 3 -## Step 3 - -次に、`task` を追加します。このタスクは `bigip-config` を使って稼働中のコンフィグを保存します。 +次に `task` を追加します。このタスクは `bigip-config` を使用して、実行中の設定をディスクに保存します。 {% raw %} ``` yaml @@ -65,46 +62,51 @@ Ansible の playbook は **YAML** ファイルです。YAML は構造化され ``` {% endraw %} +>プレイはタスクのリストです。タスクとモジュールには 1:1 の相関があります。Ansible モジュールは再利用可能なスタンドアロンのスクリプトで、Ansible API または ansibleやansible-playbook プログラムで使用できます。これらは、終了する前に JSON 文字列を stdout に出力して Ansible に情報を返します。 ->`play` はタスクのリストです。タスクとリストは1:1の関係を持ちます。Ansible モジュールは再利用可能で、Ansible API、`ansible` `ansible-playbook` コマンドから利用できるスタンドアローンなスクリプトです。実行されたモジュールは Ansible に JSON 形式の文字列を返します。 - -- `name: SAVE RUNNING CONFIG ON BIG-IP` は利用者が定義するタスクの説明文で、この内容がターミナルに表示されます。 -- `bigip_config:` はタスクで使用されるモジュール名を指定します。 -- `provider:` : BIG-IP の詳細な接続情報のオブジェクト。 -- The `server: "{{private_ip}}"` モジュールのパラメーターです。モジュールがどのBIG-IPのIPアドレスに接続するかを指定します。ここではインベントリーで定義された`private_ip`が指定されています。 -- The `user: "{{ansible_user}}"` モジュールのパラメーターです。BIP-IPにログインするユーザー名を設定しています。 -- The`password: "{{ansible_password}}"` モジュールのパラメーターです。BIG-IPにログインするパスワードを指定します。 -- The `server_port: 8443` モジュールのパラメーターです。BIP-IPに接続する際のポート番号を指定します。 -- `validate_certs: "false"` モジュールのパラメーターです。証明書の検証を行いません。これは演習上のデモ環境のためです。 -- The `save: "yes""` モジュールのパラメーターです。running-config を startup-config へ保存するします。 - この操作は現在のコンフィグに変更が行われた後に実行されます。何も変更されなくても設定は startup-config に保存されます。このオプションは常に `changed` を返します。 +- `name: SAVE RUNNING CONFIG ON BIG-IP` は、ターミナル出力に表示されるユーザー定義の説明です。 +- `bigip_config:` は、使用するモジュールをタスクに指示します。 +- `server: "{{private_ip}}"` パラメーターは、F5 BIG-IP IP + アドレスに接続するようにモジュールに指示します。このアドレスは、インベントリーの変数 `private_ip` として保存されます +- `provider:` パラメーターは、BIG-IP の接続詳細のグループです。 +- `user: "{{ansible_user}}"` パラメーターは、F5 BIG-IP + デバイスにログインするためのユーザー名をモジュールに指示します +- `password: "{{ansible_password}}"` パラメーターは、F5 BIG-IP + デバイスにログインするためのパスワードをモジュールに指示します +- `server_port: 8443` パラメーターは、F5 BIG-IP デバイスに接続するためのポートをモジュールに指示します +- `save: "yes""` + パラメーターは、実行中の設定をスタートアップ設定に保存するようモジュールに指示します。この操作は、現在の実行中の設定に変更を加えた後に必ず実行されます。変更が行われない場合でも、設定はスタートアップ設定に保存されます。このオプションにより、モジュールは常に変更された状態に戻ります。 +- `validate_certs: "no"` パラメーターは、SSL 証明書を検証しないようにモジュールに指示します。これはラボなので、デモ目的のためにのみ使用されます。 -ファイルを保存して、エディタを終了してください。 +ファイルを保存します。 -## Step 4 +## ステップ 4 -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook bigip-config.yml +[student1@ansible ~]$ ansible-navigator run bigip-config.yml --mode stdout ``` -# Playbookの出力 +# Playbook の出力 ```yaml -[student1@ansible]$ ansible-playbook bigip-config.yml +[student1@ansible]$ ansible-navigator run bigip-config.yml --mode stdout -PLAY [BIG-IP SETUP] ************************************************************************************************************************ +PLAY [BIG-IP SETUP] ******************************************************************************* -TASK [SAVE RUNNING CONFIG ON BIG-IP] ************************************************************************************************************************ +TASK [SAVE RUNNING CONFIG ON BIG-IP] ******************************************************************************* changed: [f5] -PLAY RECAP ************************************************************************************************************* +PLAY RECAP ******************************************************************** f5 : ok=1 changed=1 unreachable=0 failed=0 ``` -# 解答 +# ソリューション -完成したPlaybookのサンプルは [bigip-config.yml](./bigip-config.yml) から参照できます。 +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-config.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/1.7-save-running-config/bigip-config.yml) +を表示するには、ここをクリックしてください。 -本演習は終了です。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/2.0-disable-pool-member/README.ja.md b/exercises/ansible_f5/2.0-disable-pool-member/README.ja.md index b02cd32ec..07b1827d4 100644 --- a/exercises/ansible_f5/2.0-disable-pool-member/README.ja.md +++ b/exercises/ansible_f5/2.0-disable-pool-member/README.ja.md @@ -1,44 +1,39 @@ # 演習 2.0 - プールメンバーの無効化 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) # 目的 -本演習では、ステップごとに完全なガイドを提供するのではなく、ステップごとのヒントを示した情報が提供されます。 -以下を実行する Playbook を構築して、プールからノードを削除します。 -- /Common/http_poolプールのBIG-IPからファクト情報を取得する。 -- プール メンバーのステータスを端末ウィンドウに表示する。 -- プール メンバーをファクト情報として格納する。 -- プール メンバーのIPおよびポート情報を端末ウィンドウに表示する。 -- プール内の特定メンバー、または全メンバーをDisableにするようにユーザにプロンプトを表示する。 -- プール メンバーをオフラインにする。 +この最後の演習では、ステップバイステップの順を追った説明ではなく、各ステップのヒントと共にフレームワークについて説明します。 -# 解説 +プールからのノードの削除を説明します。次の Playbook をビルドします。 + - BIG-IP にあるプール用に、BIG-IP からファクトを取得する(この例では 1 つのプールのみが存在します) + - 利用可能なプールを表示する + - ファクトとしてプール名を保存する + - プール => IP およびポート情報に属するすべてのプールメンバーをターミナルウインドウに表示する + - プールの特定のメンバーまたはすべてのメンバーを無効にするようにユーザーに要求する + - 適切なプールメンバーを強制的にオフラインにする -## Step 1: +# ガイド -テキストエディタを使用して、`disable-pool-member.yml`という名前の新しいファイルを作成します。 +## ステップ 1: -{% raw %} -``` -[student1@ansible ~]$ nano disable-pool-member.yml -``` -{% endraw %} +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`disable-pool-member.yml` +という名前の新しいファイルを作成します。 ->`vim`および`nano`は、コントロール ノードだけでなく、RDPを介してVisual StudioおよびAtomでも使用できます +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) -## Step 2: +## ステップ 2: -以下の定義を`disable-pool-member.yml`に Playbook に入力します: +次のプレイ定義を `disable-pool-member.yml` に入力します。 -{% raw %} + ``` yaml --- - name: Disabling a pool member @@ -47,15 +42,16 @@ gather_facts: false ``` -{% endraw %} + -## Step 3 +## ステップ 3 -次に、タスク セクションを追加して、上記の目的のためのタスクを作成します。 -一度プロバイダーを設定すると、各タスクに対して接続先サーバやユーザ・パスワードといった認証情報を定義する必要はありません。次回以降のタスクについて、本プロバイダー情報を再利用できます。 +tasks +セクションを追加してからプロバイダーのファクトを設定します。プロバイダーを設定したら、server/user/password/server_port +および validate_certs 情報を各タスクに提供する代わりに、将来のタスクでこのキーを再利用できます。 -{% raw %} -```yaml + +``` yaml tasks: - name: Setup provider set_fact: @@ -66,107 +62,105 @@ server_port: 8443 validate_certs: false ``` -{% endraw %} + -プロバイダーは以下のように利用します: +次のタスクで、以下のようにプロバイダーを使用できるようになりました。 -{% raw %} -```yaml + +``` yaml f5networks.f5_modules.bigip_device_info: provider: "{{provider}}" gather_subset: - ltm-pools ``` -{% endraw %} - -各モジュールで、接続先サーバやUser/passwordといった認証情報を入力する必要はありません。 - -## Step 4 + -次に下記のタスクを追加します。 +今後は、各モジュールに server_ip/user/password などを渡す必要はありません。 - - LTM Poolのサブセット情報をBIG-IPからファクト情報として取得する - -ヒント: -演習 1.1で実施したbigip_device_infoモジュールの利用。 +``` yaml +--- +- name: "Disabling a pool member" + hosts: lb + gather_facts: false + connection: local +``` -## Step 5 +## ステップ 4 -次に下記のタスクを追加します: +次に、以下に挙げる目的のためにタスクを追加します。 - - 端末ウィンドウにプール情報を表示 + - サブセット ltm-pools 用に BIG-IP からファクトを取得する ヒント: -上記 Step 出力内容の `loop` 検索、または debug moduleの利用となります +演習 1.1 の bigip_device_info モジュールを使用してみます -## Step 6 +## ステップ 5 -次に下記のタスクを追加します: +次に、以下に挙げる目的のためにタスクを追加します。 - - ファクト情報に従い、プール名を格納 + - ターミナルウィンドウにプール情報を表示する -ヒント: Playbook 内で動的に各ファクト情報を簡易設定する方法はset_fact moduleの利用となります。 +ヒント: +上記のステップの出力で `loop` する方法を思い出してください。デバッグモジュール を使用するのも忘れないでください -## Step 7 +## ステップ 6 -次に下記のタスクを追加します: +次に、以下に挙げる目的のためにタスクを追加します。 - - プールに所属しているメンバーを表示 + - プール名をファクトとして保存する -ヒント: -debug演習 1.4を参照してください。 +ヒント: Playbook 内でファクト変数を動的に設定する簡単な方法は、set_fact モジュール を使用することです -## Step 8 +## ステップ 7 -次に下記のタスクを追加します: +次に、以下に挙げる目的のためにタスクを追加します。 - - 特定メンバー、または全メンバーをdisableするためにHost:Port情報を入力するようにプロンプト表示 + - プールに属するメンバーを表示する ヒント: -prompts モジュールを利用してください。 +デバッグ を使用し、演習 1.4 を参照することを思い出してください -## Step 9 +## ステップ 8 +次に、以下に挙げる目的のためにタスクを追加します。 -次に下記のタスクを追加します: - - - プロンプト情報を読み、全メンバー、または指定されたメンバーを無効にする。 + - プールに属するすべてのメンバーを無効にする ヒント: - when による条件分岐とループ と [BIG-IP pool member module](https://docs.ansible.com/ansible/latest/modules/bigip_pool_member_module.html)を参照してください。 +BIG-IP プールメンバーモジュール を使用するのを忘れないでください -## Step 10 -Playbook の実行 - コントロールホストへ戻り、以下のコマンドを実行します: +## ステップ 9 +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook disable-pool-member.yml +[student1@ansible ~]$ ansible-navigator run disable-pool-member.yml --mode stdout ``` -# Playbookの出力 +# Playbook の出力 -以下のような出力となります。 +出力は次のようになります。 -{% raw %} + ```yaml -[student1@ansible ~]$ ansible-playbook disable-pool-member.yml +[student1@ansible ~]$ ansible-navigator run disable-pool-member.yml --mode stdout -PLAY [Disabling a pool member] ****************************************************************************************************************************** +PLAY [Disabling a pool member] ******************************************************************************* -TASK [Setup provider] ******************************************************************************************************************************* +TASK [Setup provider] ******************************************************************************* ok: [f5] -TASK [Query BIG-IP facts] *********************************************************************************************************************************** +TASK [Query BIG-IP facts] ***************************************************** changed: [f5] -TASK [Display Pools available] ****************************************************************************************************************************** +TASK [Display Pools available] ************************************************ ok: [f5] => (item=http_pool) => { "msg": "http_pool" } -TASK [Store pool name in a variable] ************************************************************************************************************************ +TASK [Store pool name in a variable] ****************************************** ok: [f5] => (item=None) ok: [f5] -TASK [Show members belonging to pool http_pool] ************************************************************************************************************* +TASK [Show members belonging to pool http_pool] ******************************* ok: [f5] => (item=node1:80) => { "msg": "node1:80" } @@ -174,28 +168,30 @@ ok: [f5] => (item=node2:80) => { "msg": "node2:80" } -TASK [pause] ************************************************************************************************************ +TASK [pause] ****************************************************************** [pause] To disable a particular member enter member with format member_name:port To disable all members of the pool enter 'all': node1:80 -TASK [Disable ALL pool members] ************************************************************************************************************************ +TASK [Disable ALL pool members] *********************************************** skipping: [f5] => (item=node1:80) skipping: [f5] => (item=node2:80) -TASK [Disable pool member node1:80] ************************************************************************************************************************* +TASK [Disable pool member node1:80] ******************************************************************************* changed: [f5] -PLAY RECAP ************************************************************************************************************** +PLAY RECAP ******************************************************************************* f5 : ok=7 changed=2 unreachable=0 failed=0 ``` -{% endraw %} + -# 解答 -問題がある場合は講師より[解答](./disable-pool-member.yml)が提供されます。GUIにより以下のように表示されます。黒いひし形のマークは、そのノードがオフラインにされたことを示します。 +# ソリューション +答えに詰まったら、回答がインストラクターによって提供されます。GUI +の表示は、以下のようになるはずです。黒いダイヤマークは、指定されたノードが強制的にオフラインにされたことを示します。 ![f5bigip-gui](f5bigip-gui.png) ---- -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +-- +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/2.1-delete-configuration/README.ja.md b/exercises/ansible_f5/2.1-delete-configuration/README.ja.md index 799d2e784..66ebbae49 100644 --- a/exercises/ansible_f5/2.1-delete-configuration/README.ja.md +++ b/exercises/ansible_f5/2.1-delete-configuration/README.ja.md @@ -1,36 +1,29 @@ -# 演習 2.1 - モジュールの組み合わせを使用してBIG-IPの構成を削除する +# 演習 2.1: モジュールの組み合わせを使用した BIG-IP 上での設定の削除 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) - [ソリューションの確認](#verifying-the-solution) # 目的 -異なるモジュールを使用して、BIG-IPの構成(ノード/プール/仮想サーバ)を削除します。 +さまざまなモジュールを使用して BIG-IP 上で設定 (ノード/プール/仮想サーバー) を削除する方法を説明します。 +# ガイド -# 解説 +## ステップ 1: -## Step 1: +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-delete-configuration.yml` +という名前の新しいファイルを作成します。 -テキストエディタで新規ファイル `bigip-delete-configuration.yml` を作成します: +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) -{% raw %} -``` -[student1@ansible ~]$ nano bigip-delete-configuration.yml -``` -{% endraw %} - ->`vim` と`nano` がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。 -## Step 2: +## ステップ 2: -以下の play 定義を `bigip-delete-configuration.yml` に追加してください: +次のプレイ定義を `bigip-delete-configuration.yml` に入力します。 {% raw %} ``` yaml @@ -40,18 +33,17 @@ connection: local gather_facts: false ``` -{% endraw %} -- ファイルの先頭の `---` はこのファイルが YAML であることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` は Playbook がローカル実行されることを示します。 -- `gather_facts: false` Fact 情報の収集を無効にします。この演習では Playbook の中で Fact 情報を利用しません。 +{% endraw %} - ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: f5` +は、プレイが F5 BIG-IP デバイスでのみ実行されることを示します。 - `connection: local` は、(自身に SSH +接続するのではなく)ローカルで実行するように Playbook に指示します - `gather_facts: false` +はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -## Step 3 +## ステップ 3 -プロバイダ値を設定するために `set_fact` を含む tasks を追加します。 +プロバイダー値を設定する set_fact で tasks セクションを追加します。 {% raw %} -```yaml +``` yaml tasks: - name: Setup provider set_fact: @@ -64,9 +56,12 @@ ``` {% endraw %} -## Step 4 +## ステップ 4 -次に、[bigip_virtual_server](https://docs.ansible.com/ansible/latest/modules/bigip_virtual_server_module.html) を使用してタスクを追加します。このタスクは、[演習 1.5 - virtual server の追加](../1.5-add-virtual-server/README.ja.md) と同じです。 `state:absent` は、F5BIG-IP ロードバランサから構成を削除します。 +次に、[bigip_virtual_server](https://docs.ansible.com/ansible/latest/modules/bigip_virtual_server_module.html) +を使用して、最初の `task` を追加します。このタスクは [演習 1.5 - +仮想サーバーの追加](../1.5-add-virtual-server/README.md) と同じですが、**state** +パラメーターが追加されています。`state: absent` は、F5 BIG-IP ロードバランサーから設定を削除します。 {% raw %} ``` yaml @@ -76,12 +71,14 @@ name: "vip" state: absent ``` -{% endraw %} -- `state: absent` はモジュールに設定を削除するように指示するパラメータです。 +{% endraw %} - `state: absent` は、設定を削除するようにモジュールに指示するパラメーターです。 -## Step 5 +## ステップ 5 -次に、[bigip_pool](https://docs.ansible.com/ansible/latest/modules/bigip_pool_module.html) を使用して2番目のタスクを追加します。このタスクは[演習 1.3 - プールの追加](../1.3-add-pool/README.ja.md) に **state** パラメーター `absent` をつけたものと同じです。 +次に、[bigip_pool](https://docs.ansible.com/ansible/latest/modules/bigip_pool_module.html) +を使用して、2 番目の `task` を追加します。このタスクは [演習 1.3 - +ロードバランシングプールの追加](../1.3-add-pool/README.md) と同じですが、**state** パラメーターが追加され +`absent` に設定されています。 {% raw %} ```yaml @@ -93,9 +90,12 @@ ``` {% endraw %} -## Step 6 +## ステップ 6 -最後に、[bigip_node](https://docs.ansible.com/ansible/latest/modules/bigip_node_module.html) を使用して最後のタスクを追加します。このタスクは、[演習 1.2 - F5 BIG-IP へのノード追加](../1.2-add-node/README.ja.md) に **state** パラメーター `absent` をつけたものと同じです。 +最後に、[bigip_node](https://docs.ansible.com/ansible/latest/modules/bigip_node_module.html) +を使用して、最後の `task` を追加します。このタスクは [演習 1.2 - F5 BIG-IP +へのノードの追加](../1.2-add-node/README.md) と同じですが、**state** パラメーターが追加され `absent` +に設定されています。 {% raw %} ```yaml @@ -107,60 +107,65 @@ loop: "{{ groups['web'] }}" ``` {% endraw %} -上記のPlaybookは、仮想サーバ、プール、前の実習で構成したノードの順に削除します。 -## Step 7 +ファイルを保存します。 -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +## ステップ 7 +Playbook は、以前の演習で設定した仮想サーバーを削除してからプールを削除し、その後にノードを削除します。 + +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 {% raw %} ``` -[student1@ansible ~]$ ansible-playbook bigip-delete-configuration.yml +[student1@ansible ~]$ ansible-navigator run bigip-delete-configuration.yml --mode stdout ``` {% endraw %} -# Playbookの出力 +# Playbook の出力 {% raw %} ``` -[student1@ansible]$ ansible-playbook bigip-delete-configuration.yml +[student1@ansible]$ ansible-navigator run bigip-delete-configuration.yml --mode stdout -PLAY [BIG-IP TEARDOWN] ************************************************************************************************************************************** +PLAY [BIG-IP TEARDOWN] ******************************************************** -TASK [Setup provider] *************************************************************************************************************************************** +TASK [Setup provider] ********************************************************* ok: [f5] -TASK [DELETE VIRTUAL SERVER] ******************************************************************************************************************************** +TASK [DELETE VIRTUAL SERVER] ************************************************** changed: [f5] -TASK [DELETE POOL] ********************************************************************************************************************************* +TASK [DELETE POOL] ************************************************************ changed: [f5] -TASK [DELETE NODES] ************************************************************************************************************************************* +TASK [DELETE NODES] *********************************************************** changed: [f5] => (item=node1) changed: [f5] => (item=node2) -PLAY RECAP ************************************************************************************************************************************** +PLAY RECAP ******************************************************************** f5 : ok=4 changed=3 unreachable=0 failed=0 ``` {% endraw %} -# 解答 +# ソリューション -完成したPlaybookのサンプルは [bigip-delete-configuration.yml](./bigip-delete-configuration.yml) から参照できます。 +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-delete-configuration.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/2.1-delete-configuration/bigip-delete-configuration.yml) +を表示するには、ここをクリックしてください。 -# 確認 +# ソリューションの確認 -Webブラウザを使用してF5にログインし、設定内容を確認します。F5ロードバランサーのIP情報を `lab_inventory/hosts` ファイルから取得し、https://X.X.X.X:8443/のように入力します。 +Web ブラウザーで F5 にログインし、設定された内容を確認します。lab_inventory/hosts ファイルから F5 ロードバランサーの +IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 -BIG-IPのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供、デフォルトは ansible** -左側のメニューに移動し、構成が削除されたことを確認します。 +左側のメニューでナビゲートし、設定が削除されていることを確認します * Local Traffic Manager -> Virtual Server * Local Traffic Manager -> Pool * Local Traffic Manager -> Node -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +ここでの演習を完了しました。 + +[Click here to return to the lab guide](../README.md) diff --git a/exercises/ansible_f5/2.2-error-handling/README.ja.md b/exercises/ansible_f5/2.2-error-handling/README.ja.md index a647e3939..4cd13539a 100644 --- a/exercises/ansible_f5/2.2-error-handling/README.ja.md +++ b/exercises/ansible_f5/2.2-error-handling/README.ja.md @@ -1,35 +1,29 @@ -# 演習 2.2 - モジュールの組み合わせを使用して適切なロールバックを実行する +# 演習 2.2: モジュールの組み合わせを使用した安全なロールバックの実行 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) # 目的 -BIG-IPで設定のロールバックを実行するためのさまざまなモジュールの使用方法を説明します。 +さまざまなモジュールを使用して BIG-IP 上で設定のロールバックを行う方法を説明します。 -# 解説 +# ガイド -## Step 1 +## ステップ 1 -テキストエディアで新しいファイル `bigip-error-handling.yml` を作成します。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`bigip-error-handling.yml` +という名前の新しいファイルを作成します。 -{% raw %} -``` -[student1@ansible ~]$ nano bigip-error-handling.yml -``` -{% endraw %} +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) ->`vim` と`nano` がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。 +## ステップ 2 -## Step 2 - -以下の play 定義を `bigip-error-handling.yml` に追加してください: +次のプレイ定義を `bigip-error-handling.yml` に入力します。 {% raw %} ``` yaml @@ -42,17 +36,23 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ ``` {% endraw %} -- ファイルの先頭の `---` はこのファイルが YAML であることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` は Playbook がローカル実行されることを示します。 -- `gather_facts: false` Fact 情報の収集を無効にします。この演習では Playbook の中で Fact 情報を利用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: lb` は、プレイが F5 BIG-IP +デバイスでのみ実行されることを示します。 - `connection: local` は、(自身に SSH +接続するのではなく)ローカルで実行するように Playbook に指示します - `gather_facts: false` +はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -## Step 3 +## ステップ 3 -プロバイダ値を設定するために `set_fact` を含む tasks を追加します。 +プロバイダー値を設定する set_fact で tasks セクションを追加します。 {% raw %} -```yaml +``` yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + tasks: - name: Setup provider set_fact: @@ -62,15 +62,33 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ password: "{{ansible_password}}" server_port: 8443 validate_certs: false + ``` {% endraw %} -## Step 4 +## ステップ 4 -次に、`block` 句とタスクを追加します。タスク[演習 1.2 - F5 BIG-IPへノードを追加](../1.2-add-node/README.ja.md) で実行した `bigip_node` です。 +次に、`block` スタンザと最初の `task` を追加します。最初のタスクは、[演習 1.2 - F5 BIG-IP +へのノードの追加](../1.2-add-node/README.md) で実行される bigip_node です。 {% raw %} ``` yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + + tasks: + - name: Setup provider + set_fact: + provider: + server: "{{private_ip}}" + user: "{{ansible_user}}" + password: "{{ansible_password}}" + server_port: "8443" + validate_certs: "no" + - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION block: - name: CREATE NODES @@ -79,16 +97,43 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ host: "{{hostvars[item].ansible_host}}" name: "{{hostvars[item].inventory_hostname}}" loop: "{{ groups['web'] }}" + ``` {% endraw %} -## Step 5 +## ステップ 5 -次に、 [演習 1.3 - プールの追加](../1.3-add-pool/README.ja.md) で利用された`bigip_pool` のタスクを追加します。 +次に、[演習 1.3 - ロードバランシングプールの追加](../1.3-add-pool/README.md) +で説明されているように、bigip_pool の 2 番目のタスクを追加します。 {% raw %} ```yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + + tasks: + - name: Setup provider + set_fact: + provider: + server: "{{private_ip}}" + user: "{{ansible_user}}" + password: "{{ansible_password}}" + server_port: "8443" + validate_certs: "no" + + - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION + block: + - name: CREATE NODES + f5networks.f5_modules.bigip_node: + provider: "{{provider}}" + host: "{{hostvars[item].ansible_host}}" + name: "{{hostvars[item].inventory_hostname}}" + loop: "{{ groups['web'] }}" + - name: CREATE POOL f5networks.f5_modules.bigip_pool: provider: "{{provider}}" @@ -96,15 +141,51 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ lb_method: "round-robin" monitors: "/Common/http" monitor_type: "and_list" + ``` {% endraw %} -## Step 6 +## ステップ 6 -次タスクでは [演習 1.4 - メンバーをプールへ追加](../1.4-add-pool-members/README.ja.md) で説明した `bigip_pool_member` を使用します。 +次に 3 番目のタスクを追加します。3 番目のタスクには、[演習 1.4 - +プールへのメンバーの追加](../1.4-add-pool-members/README.md) +で説明されているように、bigip_pool_member を使用します。 {% raw %} ```yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + + tasks: + - name: Setup provider + set_fact: + provider: + server: "{{private_ip}}" + user: "{{ansible_user}}" + password: "{{ansible_password}}" + server_port: "8443" + validate_certs: "no" + + - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION + block: + - name: CREATE NODES + f5networks.f5_modules.bigip_node: + provider: "{{provider}}" + host: "{{hostvars[item].ansible_host}}" + name: "{{hostvars[item].inventory_hostname}}" + loop: "{{ groups['web'] }}" + + - name: CREATE POOL + f5networks.f5_modules.bigip_pool: + provider: "{{provider}}" + name: "http_pool" + lb_method: "round-robin" + monitors: "/Common/http" + monitor_type: "and_list" + - name: ADD POOL MEMBERS f5networks.f5_modules.bigip_pool_member: provider: "{{provider}}" @@ -114,15 +195,61 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ port: "80" pool: "http_pool" loop: "{{ groups['web'] }}" + ``` {% endraw %} -## Step 7 +## ステップ 7 -次に[演習 1.5 - Virtual Server の追加](../1.5-add-virtual-server/README.ja.md)で使用した `bigip_virtual_server` タスクを追加します。 +次に 4 番目のタスクを追加します。4 番目のタスクには、[演習 1.5 - +仮想サーバーの追加](../1.5-add-virtual-server/README.md) +で説明されているように、bigip_virtual_server を使用します。 {% raw %} ```yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + + tasks: + - name: Setup provider + set_fact: + provider: + server: "{{private_ip}}" + user: "{{ansible_user}}" + password: "{{ansible_password}}" + server_port: "8443" + validate_certs: "no" + + - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION + block: + - name: CREATE NODES + f5networks.f5_modules.bigip_node: + provider: "{{provider}}" + host: "{{hostvars[item].ansible_host}}" + name: "{{hostvars[item].inventory_hostname}}" + loop: "{{ groups['web'] }}" + + - name: CREATE POOL + f5networks.f5_modules.bigip_pool: + provider: "{{provider}}" + name: "http_pool" + lb_method: "round-robin" + monitors: "/Common/http" + monitor_type: "and_list" + + - name: ADD POOL MEMBERS + f5networks.f5_modules.bigip_pool_member: + provider: "{{provider}}" + state: "present" + name: "{{hostvars[item].inventory_hostname}}" + host: "{{hostvars[item].ansible_host}}" + port: "80" + pool: "http_pool" + loop: "{{ groups['web'] }}" + - name: ADD VIRTUAL SERVER f5networks.f5_modules.bigip_virtual_server: provider: "{{provider}}" @@ -133,15 +260,74 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ all_profiles: ['http', 'clientssl', 'oneconnect'] pool: "http_pool" snat: "Automap1" + ``` {% endraw %} -## Step 7 +## ステップ 7 -次に、**rescue** 句を追加します。`rescue` 句に配置されるタスクは、 [演習 2.1 - コンフィグの削除](../2.1-delete-configuration/README.ja.md) と同じです。ノードとプールを削除するとすべての構成が削除されるため、`bigip_pool_member` タスクを再入力する必要はありません。**block** 内のいずれかのタスクが失敗すると、**rescue** が順番に実行されます。VIP、プール、およびノードは適切に削除されます。 +次に **rescue** スタンザを追加します。`rescue` スタンザセクションのタスクは、[演習 2.1 - F5 BIG-IP +設定の削除](../2.1-delete-configuration/README.md) と同じです。bigip_pool_member +タスクでは、ノードとプールを削除することですべての設定が削除されるので、bigip_pool_member +タスクを再入力する必要はありません。**ブロック** 内のタスクが失敗すると、**rescue** +スタンザが順番に実行されます。VIP、プール、およびノードが安全に削除されます。 {% raw %} ```yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + + tasks: + - name: Setup provider + set_fact: + provider: + server: "{{private_ip}}" + user: "{{ansible_user}}" + password: "{{ansible_password}}" + server_port: "8443" + validate_certs: "no" + + - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION + block: + - name: CREATE NODES + f5networks.f5_modules.bigip_node: + provider: "{{provider}}" + host: "{{hostvars[item].ansible_host}}" + name: "{{hostvars[item].inventory_hostname}}" + loop: "{{ groups['web'] }}" + + - name: CREATE POOL + f5networks.f5_modules.bigip_pool: + provider: "{{provider}}" + name: "http_pool" + lb_method: "round-robin" + monitors: "/Common/http" + monitor_type: "and_list" + + - name: ADD POOL MEMBERS + f5networks.f5_modules.bigip_pool_member: + provider: "{{provider}}" + state: "present" + name: "{{hostvars[item].inventory_hostname}}" + host: "{{hostvars[item].ansible_host}}" + port: "80" + pool: "http_pool" + loop: "{{ groups['web'] }}" + + - name: ADD VIRTUAL SERVER + f5networks.f5_modules.bigip_virtual_server: + provider: "{{provider}}" + name: "vip" + destination: "{{private_ip}}" + port: "443" + enabled_vlans: "all" + all_profiles: ['http', 'clientssl', 'oneconnect'] + pool: "http_pool" + snat: "Automap1" + rescue: - name: DELETE VIRTUAL SERVER f5networks.f5_modules.bigip_virtual_server: @@ -161,15 +347,90 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ name: "{{hostvars[item].inventory_hostname}}" state: absent loop: "{{ groups['web'] }}" + ``` {% endraw %} -## Step 8 +## ステップ 8 -最後に **always** を追加してrunning config を保存します。 +最後に **always** を追加して、実行中の設定を保存します。 {% raw %} ```yaml +--- +- name: BIG-IP SETUP + hosts: lb + connection: local + gather_facts: false + + tasks: + - name: Setup provider + set_fact: + provider: + server: "{{private_ip}}" + user: "{{ansible_user}}" + password: "{{ansible_password}}" + server_port: "8443" + validate_certs: "no" + + - name: SETUP AND GRACEFUL ROLLBACK BIG-IP CONFIGURATION + block: + - name: CREATE NODES + f5networks.f5_modules.bigip_node: + provider: "{{provider}}" + host: "{{hostvars[item].ansible_host}}" + name: "{{hostvars[item].inventory_hostname}}" + loop: "{{ groups['web'] }}" + + - name: CREATE POOL + f5networks.f5_modules.bigip_pool: + provider: "{{provider}}" + name: "http_pool" + lb_method: "round-robin" + monitors: "/Common/http" + monitor_type: "and_list" + + - name: ADD POOL MEMBERS + f5networks.f5_modules.bigip_pool_member: + provider: "{{provider}}" + state: "present" + name: "{{hostvars[item].inventory_hostname}}" + host: "{{hostvars[item].ansible_host}}" + port: "80" + pool: "http_pool" + loop: "{{ groups['web'] }}" + + - name: ADD VIRTUAL SERVER + f5networks.f5_modules.bigip_virtual_server: + provider: "{{provider}}" + name: "vip" + destination: "{{private_ip}}" + port: "443" + enabled_vlans: "all" + all_profiles: ['http', 'clientssl', 'oneconnect'] + pool: "http_pool" + snat: "Automap1" + + rescue: + - name: DELETE VIRTUAL SERVER + f5networks.f5_modules.bigip_virtual_server: + provider: "{{provider}}" + name: "vip" + state: absent + + - name: DELETE POOL + f5networks.f5_modules.bigip_pool: + provider: "{{provider}}" + name: "http_pool" + state: absent + + - name: DELETE NODES + f5networks.f5_modules.bigip_node: + provider: "{{provider}}" + name: "{{hostvars[item].inventory_hostname}}" + state: absent + loop: "{{ groups['web'] }}" + always: - name: SAVE RUNNING CONFIGURATION f5networks.f5_modules.bigip_config: @@ -178,63 +439,71 @@ BIG-IPで設定のロールバックを実行するためのさまざまなモ ``` {% endraw %} -上記の Playbook では、仮想サーバー、プール、ノードの構成を試みますが、snat値が `Automap1` として提供されているため、仮想サーバーの追加は失敗し、`rescue` が実行されます。 +上記の Playbook は仮想サーバー、プール、ノードの設定を試みますが、snat +値は「Automap1」として指定されているため、仮想サーバーの追加が失敗し、'rescue' ブロックが実行されます。 + +ファイルを保存して、エディターを終了します。 -## Step 9 +## ステップ 9 -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +Playbook を実行します。VS Code サーバーのターミナルに戻り、以下を実行します。 {% raw %} ``` -[student1@ansible ~]$ ansible-playbook bigip-error-handling.yml +[student1@ansible ~]$ ansible-navigator run bigip-error-handling.yml --mode stdout ``` {% endraw %} -# Playbookの出力 +# Playbook の出力 {% raw %} ```yaml -[student1@ansible ~]$ ansible-playbook bigip-error-handling.yml +[student1@ansible ~]$ ansible-navigator run bigip-error-handling.yml --mode stdout -PLAY [BIG-IP SETUP] **************************************************************************************************** +PLAY [BIG-IP SETUP] *********************************************************** -TASK [Setup provider] ************************************************************************************************** +TASK [Setup provider] ********************************************************* ok: [f5] -TASK [CREATE NODES] ***************************************************************************************************** +TASK [CREATE NODES] *********************************************************** changed: [f5] => (item=node1) changed: [f5] => (item=node2) -TASK [CREATE POOL] ******************************************************************************************************* +TASK [CREATE POOL] ************************************************************ changed: [f5] -TASK [ADD POOL MEMBERS] ************************************************************************************************************************** +TASK [ADD POOL MEMBERS] ******************************************************* changed: [f5] => (item=node1) changed: [f5] => (item=node2) -TASK [ADD VIRTUAL SERVER] *************************************************************************************************************************** -fatal: [f5]: FAILED! => {"changed": false, "msg": "0107163f:3: Pool (/Common/Automap1) of type (snatpool) doesn't exist."} +TASK [ADD VIRTUAL SERVER] **************************************************** +fatal: [f5]: FAILED! => changed=false + msg: '0107163f:3: Pool (/Common/Automap1) of type (snatpool) doesn''t exist.' -TASK [DELETE VIRTUAL SERVER] ************************************************************************************************************************** +TASK [DELETE VIRTUAL SERVER] ************************************************** ok: [f5] -TASK [DELETE POOL] ************************************************************************************************************************** +TASK [DELETE POOL] ************************************************************ changed: [f5] -TASK [DELETE NODES] ************************************************************************************************************************** +TASK [DELETE NODES] *********************************************************** changed: [f5] => (item=node1) changed: [f5] => (item=node2) -TASK [SAVE RUNNING CONFIGURATION] *************************************************************************************************************************** +TASK [SAVE RUNNING CONFIGURATION] ********************************************* changed: [f5] -PLAY RECAP ***************************************************************************************************************** -f5 : ok=8 changed=6 unreachable=0 failed=0 skipped=0 rescued=1 ignored=0 +PLAY RECAP ******************************************************************** +f5 : ok=8 changed=6 unreachable=0 failed=0 +skipped=0 rescued=1 ignored=0 ``` {% endraw %} -# 解答 +# ソリューション -完成したPlaybookのサンプルは [bigip-error-handling.yml](./bigip-error-handling.yml) から参照できます。 +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[bigip-error-handling.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/2.2-error-handling/bigip-error-handling.yml) +を表示するには、ここをクリックしてください。 -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/3.0-as3-intro/README.ja.md b/exercises/ansible_f5/3.0-as3-intro/README.ja.md index ebe641f1f..74c7317ca 100644 --- a/exercises/ansible_f5/3.0-as3-intro/README.ja.md +++ b/exercises/ansible_f5/3.0-as3-intro/README.ja.md @@ -1,48 +1,55 @@ -# 演習 3.0 - AS3の概要 +# 演習 3.0 - AS3 の概要 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) # 目的 -F5 AS3 を使った virtual server 構築(Section 1 Ansible F5 Exercisesで学んだもの)のデモンストレーション +仮想サーバー(セクション 1 Ansible F5 の演習とまったく同じ)を F5 AS3 でビルドする方法を説明します。 - - AS3([Application Services 3 拡張](https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/3/userguide/about-as3.html)) の宣言型モデルについて学習します。AS3 を徹底的に学ぶことはこの演習の意図ではありませんが、概念をいくらか紹介して、それがAnsible Playbook と、どのように簡単な統合がなされているかを示すだけです。 - - [set_fact モジュール](https://docs.ansible.com/ansible/latest/modules/set_fact_module.html) について学びます。 - - [uri モジュール](https://docs.ansible.com/ansible/latest/modules/uri_module.html) について学びます。 + - AS3 ([Application Services 3 + エクステンション](https://clouddocs.f5.com/products/extensions/f5-appsvcs-extension/3/userguide/about-as3.html)) + 宣言モデルについて学びます。この演習は、AS3 について完全に学習することを目的としてはいません。コンセプトの概要と Ansible + Playbook と簡単に統合できることを説明するだけです。 + - [set_fact + モジュール](https://docs.ansible.com/ansible/latest/modules/set_fact_module.html) + について学びます + - [uri + モジュール](https://docs.ansible.com/ansible/latest/modules/uri_module.html) + について学びます +# ガイド -# Guide +#### 次に進む前に、BIG-IP 設定がクリーンであることを確認し、演習 [2.1-delete-configuration](../2.1-delete-configuration/README.md) を実行します。 -#### BIG-IP の設定がクリーンになっていることを確認し、次に進む前に [演習 2.1 - コンフィグの削除](../2.1-delete-configuration/README.ja.md) を必ず実行してください。 +## ステップ 1: -## Step 1: +F5 BIG-IP で AS3 が有効になっていることを確認します。 -お使いの F5 BIG-IP は AS3 が有効になっている事を確認してください。 - - 1. Webブラウザーから F5 BIG-IP にログインします。 - 2. 左側のメニューから iApps ボタンをクリックします。 + 1. Web ブラウザーを使用して F5 BIG-IP にログインします。 + 2. 左側のメニューの iApps ボタンをクリックします。 3. `Package Management LX` のリンクをクリックします。 - 4. `f5-appsvcs` がインストールされている事を確認します。 + 4. `f5-appsvcs` がインストールされていることを確認します。 -これでうまくいかない場合は、インストラクターに助けを求めましょう。 +このようにならない場合は、インストラクターにお問い合わせください。 ![f5 gui](f5-appsvcs.gif) -## Step 2: +## ステップ 2: -Playbook を作り始める前に、AS3 がどのように動くのか理解する必要があります。AS3 は F5 BIG-IP を API 呼び出しを行う際に JSON テンプレートを渡す必要があります。この演習のテンプレートは提供されます。受講者は、すべてのパラメーターについて完全に理解する必要はありません。また、ゼロからテンプレートを作れる必要はありません。 -これらは2つのパートに分かれています。 +Playbook の構築を開始する前に、AS3 の仕組みを理解することが重要です。AS3 では、F5 BIG-IP への API コールとして渡される +JSON +テンプレートが必要です。この演習では、**テンプレートが用意されています**。すべてのパラメーターを完全に理解したり、これらのテンプレートをゼロから作成したりする必要はありません。テンプレートは、以下の +2 つの部分で構成されます。 1. `tenant_base.j2` -```yaml + +``` yaml { "class": "AS3", "action": "deploy", @@ -60,19 +67,21 @@ Playbook を作り始める前に、AS3 がどのように動くのか理解す } } ``` + - `tenant_base` は標準テンプレートです。F5 Networks が自社の顧客に対して提供しています。もっとも重要なパートとしては: + `tenant_base` は、F5 ネットワークが顧客に提供する標準テンプレートです。理解すべき重要な部分は以下のとおりです。 - - `"WorkshopExample": {` - これは Tenant の名前です。AS3 は 特別な WebApp のための Tenant を作ります。WebApp は、今回の場合、virtual server を示します。2つの Web サーバーに対してロードバランスします。 - - `"class": "Tenant",` - `WorkshopExample` は Tenant であることを示します。 - - `as3_app_body` - これは現在の WebApp に対する 2つ目の Jinja2 テンプレートの名前を示す変数です。 + - `"WorkshopExample"` - これはテナントの名前です。AS3 はこの特定の WebApp + のテナントを作成します。ここでは、WebApp は 2 つの Web サーバー間で負荷分散を行う仮想サーバーです。 + - `"class": "Tenant"` - これは、`WorkshopExample` がテナントであることを示しています。 + - `as3_app_body` - これは、実際の WebApp である 2 番目の jinja2 テンプレートを参照する変数です。 ---- 2. `as3_template.j2` -{% raw %} -```yaml + +``` yaml "web_app": { "class": "Application", "template": "http", @@ -103,41 +112,37 @@ Playbook を作り始める前に、AS3 がどのように動くのか理解す } } ``` -{% endraw %} + -このテンプレートは Web アプリケーションに対する JSON の表記です。ここのパートで重要な点としては、 +このテンプレートは、Web アプリケーションの JSON 表現です。注意すべき重要な部分は以下のとおりです。 -- 今回の virtual server の名前は `serviceMain` です。 - - 以前の演習のタスクで行ったようにテンプレートの中で変数を使用できます。この場合、virtual IP address は、定義したインベントリー中に定義されている private_ip です。 -- `app_pool` という名前の Pool があります。 - - Jinja2 テンプレートはループ処理を使用して、すべての Pool member (これは web servers グループを指しています)を取得できます。 +- `serviceMain` という名前の仮想サーバーがあります。 + - テンプレートは、前の演習のタスクと同様に変数を使用できます。この場合、仮想 IP アドレスはインベントリーからの private_ip + になります。 +- `app_pool` という名前のプールがあります + - jinja2 テンプレートは、ループを使用してすべてのプールメンバーを取得できます(以下で説明される Web サーバーグループを参照します)。 -**要約** -`tenant_base.j2` と `as3_template.j2` の2つのテンプレートファイルは、Web アプリケーションのための1つの JSON ペイロードを作ります。次に Playbook を構築することで F5 BIG-IP に対して、この JSON ペイロードを送ります。 - -**これらのテンプレートを作業ディレクトリにコピーしてください。** +**要約すると**、`tenant_base.j2` および `as3_template.j2` は、Web アプリケーションを表す単一の JSON ペイロードを作成します。この JSON ペイロードを F5 BIG-IP に送信する Playbook を構築します。 +**VSCode のターミナルウィンドウを使用して、これらのテンプレートを作業用ディレクトリーにコピーしてください** + ``` -[student1@ansible ~]$ mkdir j2 -[student1@ansible ~]$ cp ~/f5-workshop/3.0-as3-intro/j2/* j2/ +mkdir j2 +cp ~/f5-workshop/3.0-as3-intro/j2/* j2/ ``` + -## Step 3: - -テキストエディターを使って `as3.yml` という名前でファイルを作成します。 - -{% raw %} -``` -[student1@ansible ~]$ nano as3.yml -``` -{% endraw %} +## ステップ 3: -> コントロールノードでは `vim` と `nano`、また、RDP 経由では Visual Studio と Atom が利用可能です。 +VSCode を使用して、左側のペインの新規ファイルアイコンをクリックして、`as3.yml` という名前の新しいファイルを作成します。 -## Step 4: +![picture of create file +icon](../1.1-get-facts/images/vscode-openfile_icon.png) -以下の定義を Playbook `as3.yml` の先頭に入力してください: +## ステップ 4: +次のプレイ定義を `as3.yml` に入力します。 + ``` yaml --- - name: LINKLIGHT AS3 @@ -148,38 +153,39 @@ Playbook を作り始める前に、AS3 がどのように動くのか理解す vars: pool_members: "{{ groups['web'] }}" ``` -- `---` はファイルの先頭である事を示します。このファイルは YAML ファイルです。 -- `hosts: lb` は lb グループに属するホストに対してのみ処理を実行するという意味です。F5 デバイスは今回1つだけですが、しかし、複数台ある場合には複数台を同時に指定できます。 -- `connection: local` を指定することで Playbook がローカル実行されます。(SSHで接続せず) -- `gather_facts: false` を指定することで facts の収集を無効化します。これは今回の Playbook 中で、facts を何も利用しないためです。 + -以下のセクションは -``` - vars: - pool_members: "{{ groups['web'] }}" -``` -... `pool_members` と呼ばれる変数を定義し、web グループを値として指定します。workbench に2台のWebサーバーがあり、`pool_members` の値を参照することで2台のWebサーバーのリストを取得することができます。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: lb` は、プレイが lb +グループでのみ実行されることを示します。技術的には、F5 デバイスは 1 つだけしか存在しませんが、複数あれば、それぞれが同時に設定されます。 - +`connection: local` は、(自身に SSH 接続するのではなく)ローカルで実行するように Playbook に指示します - +`gather_facts: false` はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -## Step 5 +- `vars` セクションは、`pool_members` という名前の変数を Web グループに設定します。ワークベンチには `node1` と +`node2` の 2 つの Web があります。つまり、`pool_members` 変数は 2 つの Web のリストを参照します。 -**追記** 次のタスクをPlaybook `as3.yml` の後ろに追記します。 +## ステップ 5 -```yaml +以下を as3.yml Playbook に **追加します**。 + + +``` yaml tasks: - name: CREATE AS3 JSON BODY set_fact: as3_app_body: "{{ lookup('template', 'j2/as3_template.j2', split_lines=False) }}" ``` + -この [set_fact モジュール](https://docs.ansible.com/ansible/latest/modules/set_fact_module.html) は、Playbook 内のタスクにおいて使用できる変数を作成(再定義)することができます。これにより新しい facts を動的に作成することができます。今回の場合、 [template lookup プラグイン](https://docs.ansible.com/ansible/latest/plugins/lookup/template.html) を使用します。このタスクには以下の内容を記述しています。 - 1. 表示用にJinja2 テンプレート `j2/as3_template.j2` が提供されている - 2. `as3_app_body` という新しい fact を作成する(中身はJSON 形式のテキスト) +モジュール [set_fact モジュール](https://docs.ansible.com/ansible/latest/modules/set_fact_module.html) により、Playbook はプレイ内のタスクとして変数を作成(または上書き)できます。これを使用して、プレイのその時点まで存在していなかったファクトを新たにその場で動的に作成することができます。この場合、[テンプレートルックアッププラグイン](https://docs.ansible.com/ansible/latest/plugins/lookup/template.html) が使用されます。このタスクは、 + 1. 提供された j2/as3_template.j2 jinja テンプレートをレンダリングします。 + 2. JSON テキストのみである `as3_app_body` という名前の新しいファクトを作成します。 -## Step 6 +## ステップ 6 -**追記** 以下は as3.yml の Playbook に追記します。このタスクは uri モジュールを使い、HTTP および HTTPS Web サービスと対話するためのものです。Digest認証、Basic認証、および WSSE HTTP 認証メカニズムをサポートします。このモジュールは非常に一般的で非常に使いやすいです。このワークショップの演習環境をプロビジョニングした Playbook の中でで uri モジュールを使って、Red Hat Ansible Tower の設定や、ライセンス登録を行っています。 +以下を as3.yml Playbook に **追加します**。このタスクは、HTTP および HTTPS Web サービスとの対話に使用される uri モジュールを使用し、Digest、Basic、および WSSE HTTP 認証メカニズムをサポートします。このモジュールは非常に一般的で、非常に簡単に使用できます。ワークショップ自体(ワークベンチをプロビジョニングした Playbook)は uri モジュールを使用して Red Hat Ansible Tower の設定とライセンスを行います。 -```yaml + +``` yaml - name: PUSH AS3 uri: url: "https://{{ ansible_host }}:8443/mgmt/shared/appsvcs/declare" @@ -194,84 +200,93 @@ Playbook を作り始める前に、AS3 がどのように動くのか理解す validate_certs: false delegate_to: localhost ``` + -パラメーターの説明: +パラメーターの説明: - + - + - + - + - + - + - +
パラメータパラメーター 説明
- name: PUSH AS3Playbook task の説明です。ターミナルに表示されます。Playbook タスクの人間用の説明、ターミナルウィンドウに出力します
uri:uri module を呼び出します。このタスクは uri モード を呼び出しています
url: "https://{{ ansible_host }}:8443/mgmt/shared/appsvcs/declare"AS3 の web URL (API) です。AS3 の Web URL (API)
method: POSTHTTP リクエストメソッドは大文字である必要があります。モジュールドキュメントのページに全てのオプションリストがあります。DELETEPOST が使用できます。リクエストの HTTP メソッド、大文字でなければなりません。モジュールのドキュメントページに、すべてのオプションのリストが記載されています。POST ではなく DELETE とすることもできます
body: "{{ lookup('template','j2/tenant_base.j2', split_lines=False) }}"これにより、結合されたテンプレート (tenant_base.j2as3_template.j2 を含む) が送信され、APIリクエストの本文として渡されます。このパラメーターは組み合わせたテンプレート (as3_template.j2 が含まれる tenant_base.j2) を送信し、API リクエストのボディーとして渡されます。
status_code: 200リクエストの成功を示す有効な数値のHTTP ステータスコード。ステータスコードのカンマ区切りリストにすることもできます。200は正常を意味します。これは、HTTPリクエストが成功した場合の標準的な応答です。リクエストが成功したことを表す、有効な数値の HTTP ステータスコード。ステータスコードのコンマ区切りリストとすることもできます。200 は OK を意味し、成功した HTTP リクエストに対する標準的な応答です
-残りのパラメーターは、F5 BIG-IP への認証するためのもので、かなり簡単です。(すべての BIG-IP モジュールで共通) +残りのパラメーターは、F5 BIG-IP への認証用で、非常に簡単です(すべての BIG-IP モジュールと同様)。 -## Step 7 -Playbook を実行します - コントロールホストのコマンドラインに戻って次のコマンドを実行します。 +## ステップ 7 +Playbook を実行します。保存して VS Code サーバーのターミナルに戻り、以下を実行します。 + ``` -[student1@ansible ~]$ ansible-playbook as3.yml +[student1@ansible ~]$ ansible-navigator run as3.yml --mode stdout ``` + -# Playbookの出力 +# Playbook の出力 -実行時の出力結果は次のようになります。 +出力は次のようになります。 + ```yaml -[student1@ansible ~]$ ansible-playbook as3.yml +[student1@ansible ~]$ ansible-navigator run as3.yml --mode stdout -PLAY [Linklight AS3] *********************************************************** +PLAY [Linklight AS3] ********************************************************** -TASK [Create AS3 JSON Body] **************************************************** +TASK [Create AS3 JSON Body] *************************************************** ok: [f5] -TASK [Push AS3] **************************************************************** +TASK [Push AS3] *************************************************************** ok: [f5] -PLAY RECAP ********************************************************************* +PLAY RECAP ******************************************************************** f5 : ok=2 changed=0 unreachable=0 failed=0 ``` + -# 解答 +# ソリューション -Ansible Playbookが完了したら、Answer キーが提供されます。こちらをクリック! [as3.yml](./as3.yml). +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[as3.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/3.0-as3-intro/as3.yml) +を表示するには、ここをクリックしてください。 -# 解答の確認 +# ソリューションの確認 -Webブラウザーから F5 BIG-IP にログインして、設定が行われている事を確認しましょう。lab_inventory/hosts というインベントリファイルから F5 ロードバランサーのIP情報を取得してください。ブラウザーには「https://X.X.X.X:8443/」のような感じで HTTPS にて 8443 ポートにアクセスします。 +Web ブラウザーで F5 にログインし、設定された内容を確認します。lab_inventory/hosts ファイルから F5 ロードバランサーの +IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 ![f5 gui as3](f5-as3.gif) -1. 左側のメニューから Local Traffic をクリックします。 -2. 次に Virtual Servers をクリックします。 -3. 右側の上部の `Partition` のドロップダウンメニューを開き、WorkshopExample を選択します。 -4. Virtual Server `serviceMain` を開きます。 +1. 左側のメニューで Local Traffic をクリックします +2. Virtual Servers をクリックします。 +3. 右上の `Partition` というドロップダウンメニューをクリックし、WorkshopExample を選択します +4. 仮想サーバー `serviceMain` が表示されます。 ---- -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/3.1-as3-change/README.ja.md b/exercises/ansible_f5/3.1-as3-change/README.ja.md index f7c7ec37f..45a364b5d 100644 --- a/exercises/ansible_f5/3.1-as3-change/README.ja.md +++ b/exercises/ansible_f5/3.1-as3-change/README.ja.md @@ -1,61 +1,53 @@ -# 演習 3.1 - AS3 による変更運用 +# 演習 3.1 - AS3 での操作変更 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) -- [確認](#確認) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) # 目的 -既存のWeb Application AS3テンプレートを変更します。既存のテンプレートには問題があり、serviceMainが赤色で表示されています。この問題を修正します。 - +既存の Web アプリケーション AS3 テンプレートを変更する方法を説明します。既存のテンプレートに問題があり、serviceMain が赤で表示されています。何が悪いのでしょうか? ![serviceMain-offline.png](serviceMain-offline.png) +# ガイド -# 解説 - -## Step 1: +## ステップ 1: -問題を特定します。WebブラウザからF5にログインして、設定内容を確認します。 +何が問題かを調べます。Web ブラウザーで F5 にログインし、設定された内容を確認します。 - 1. `ServiceMain` をクリックして、ダウン状態となっている理由を確認します。 - 2. テーブルの `Availability` フィールドを参照します。 + 1. `ServiceMain` をクリックし、そのダウンしている理由を確認します。 + 2. 表の `Availability` フィールドに注目します。 ![pool-nodes-down.png](pool-nodes-down.png) - 3. `Local Traffic` の` Pools` をクリックします。 + 3. `Local Traffic` セクションで `Pools` をクリックします。 4. `app_pool` をクリックします。 - 5. `Members` ボタンをクリックします。 - + 5. `Members` ボタンをクリックします ![443](443.png) -原因はポート **443** です。2台のRHEL Webサーバはポート80のみで稼働するので、これがダウン状態の原因です。 +ポート **443** は正しくありません。2 つの RHEL Web サーバーはポート 80 +でのみ実行されます。これが、それらがダウンしている理由となっています。 -## Step 2: +## ステップ 2: -テキストエディタで `j2/as3_template.j2` ファイルを編集します: +~/j2 ディレクトリーの既存の jinja テンプレート `as3_template.j2` を開きます。 ->`vim` と`nano` がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。 +## ステップ 3: -## Step 3: - -ポート **443** をポート **80** に変更します。 - -この行を-> +ポート **443** の場所を探し、これをポート **80** に変更します。 +この行は、以下のようになっています-> {% raw %} ``` json "servicePort": 443, ``` {% endraw %} -以下のように変更します-> +これを以下のように変更します-> {% raw %} ``` json @@ -63,52 +55,56 @@ ``` {% endraw %} -## Step 4 - -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +## ステップ 4 +Playbook を実行します。コントロールホストの VS Code サーバーのターミナルに戻り、以下を実行します。 ``` -[student1@ansible ~]$ ansible-playbook as3.yml +[student1@ansible ~]$ ansible-navigator as3.yml --mode stdout ``` -# Playbookの出力 +# Playbook の出力 -以下は出力の例となります。 +出力は次のようになります。 {% raw %} ```yaml -[student1@ansible ~]$ ansible-playbook as3.yml +[student1@ansible ~]$ ansible-navigator as3.yml --mode stdout -PLAY [Linklight AS3] *********************************************************** +PLAY [Linklight AS3] ********************************************************** -TASK [Create AS3 JSON Body] **************************************************** +TASK [Create AS3 JSON Body] *************************************************** ok: [f5] -TASK [Push AS3] **************************************************************** +TASK [Push AS3] *************************************************************** ok: [f5] -PLAY RECAP ********************************************************************* +PLAY RECAP ******************************************************************** f5 : ok=2 changed=0 unreachable=0 failed=0 ``` {% endraw %} -# 解答 +# ソリューション -修正した Jinja2 テンプレートは [as3_template.j2](./j2/as3_template.j2) から参照できます。 +修正した Jinja テンプレートが、回答キーとしてここで提供されています。 +[as3_template.j2](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/3.1-as3-change/j2/as3_template.j2) +を表示するには、ここをクリックしてください。 -# 確認 +# ソリューションの確認 -Webブラウザを使用してF5にログインし、設定内容を確認します。F5ロードバランサーのIP情報を `lab_inventory/hosts` ファイルから取得し、https://X.X.X.X:8443/のように入力します。 +Web ブラウザーで F5 にログインし、設定された内容を確認します。lab_inventory/hosts ファイルから F5 ロードバランサーの +IP 情報を取得し、https://X.X.X.X:8443/ のように入力します。 ![f5 gui as3](as3-fix.gif) -1. 左側のメニューにある `Local Traffic` をクリックします。 -2. `Virtual Servers` をクリックします。 -3. 右側の `Partition` という名前のドロップダウンメニューをクリックして、`WorkshopExample` を選択します。 +1. 左側のメニューで Local Traffic をクリックします +2. Virtual Servers をクリックします。 +3. 右上の `Partition` というドロップダウンメニューをクリックし、WorkshopExample を選択します 4. 仮想サーバー `serviceMain` が表示されます。 -5. この仮想サーバーは緑色(`Available (Enabled) - The virtual server is available`)で表示されます。 -6. `app_pool` の `Pools` で、両方のWebサーバの `service_port` がポート **80** に設定されていることを確認します。 +5. 今回は緑で表示されます (`Available (Enabled) - The virtual server is available`) +6. `Pools` セクションの `app_pool` で、両方の Web サーバーの `service_port` がポート **80** + に設定されていることを確認します。 ---- -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/3.2-as3-delete/README.ja.md b/exercises/ansible_f5/3.2-as3-delete/README.ja.md index 3c851af65..641bb55fa 100644 --- a/exercises/ansible_f5/3.2-as3-delete/README.ja.md +++ b/exercises/ansible_f5/3.2-as3-delete/README.ja.md @@ -1,35 +1,27 @@ # 演習 3.2 - Web アプリケーションの削除 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [Playbook の出力](#Playbookの出力) -- [解答](#解答) +- [目的](#objective) - [ガイド](#guide) - [Playbook の出力](#playbook-output) - +[ソリューション](#solution) # 目的 -AS3および `uri` モジュールによりWebアプリケーションを削除します。 +AS3 および uri モジュールを使用して Web アプリケーションを削除する方法を説明します。 -# 解説 +# ガイド -## Step 1: +## ステップ 1: -テキストエディタで新規ファイル `delete.yml` を作成します: +お好みのテキストエディターを使用して、`delete.yml` という名前の新規ファイルを作成します。 -{% raw %} -``` -[student1@ansible ~]$ nano delete.yml -``` -{% endraw %} +>RDP 経由の Visual Studio および Atom に加えて、`vim` および `nano` がコントロールノードで利用できます。 ->`vim` と`nano` がコントールノードで利用できます。もしくは RDP で接続して Visual Studio と Atom を利用することも可能です。 +## ステップ 2: -## Step 2: - -以下の play 定義を `delete.yml` に追加してください: +次のプレイ定義を `delete.yml` に入力します。 {% raw %} ``` yaml @@ -42,16 +34,16 @@ AS3および `uri` モジュールによりWebアプリケーションを削除 ``` {% endraw %} -- ファイルの先頭の `---` はこのファイルが YAML であることを示します。 -- `hosts: lb` はこのプレイブックが lb グループのみで実行されることを示しています。 本演習では、BIG-IP機器は1つだけですが、もし複数台が設定されている場合には同時に設定されます。 -- `connection: local` は Playbook がローカル実行されることを示します。 -- `gather_facts: false` Fact 情報の収集を無効にします。この演習では Playbook の中で Fact 情報を利用しません。 +- ファイル上部の `---` は、これが YAML ファイルであることを示しています。 - `hosts: lb` は、プレイが lb +グループでのみ実行されることを示します。技術的には、F5 デバイスは 1 つだけしか存在しませんが、複数あれば、それぞれが同時に設定されます。 - +`connection: local` は、(自身に SSH 接続するのではなく)ローカルで実行するように Playbook に指示します - +`gather_facts: false` はファクト収集を無効にします。この Playbook では、ファクト変数を使用しません。 -## Step 3 +## ステップ 3 -以下を `delete.yml` へ **追加** してください。 +以下を delete.yml Playbook に **追加します**。 {% raw %} -```yaml +``` yaml tasks: - name: PUSH AS3 uri: @@ -68,42 +60,43 @@ AS3および `uri` モジュールによりWebアプリケーションを削除 ``` {% endraw %} -前の演習から変更したパラメータは以下の3つだけです。 -- `url` が変更され、最後が `declare` ではなく、テナント名(ここでは `WorkshopExample` )になっています。 -- `method` が POST から DELETE に変更されています。 -- `body` が削除されています。ここでは、テナント全体を削除するだけなので必要ありません。 - -## Step 4 +前回の演習から変更されたパラメーターは 3 つのみです。 - `url` は変更になりました。`declare` で終わる代わりに、テナント名の +`WorkshopExample` で終わります。 - `method` は POST から DELETE に変更されています。 - `body` +は削除されています。このテナント全体を削除するだけなので、必要ありません。 -Playbook の実行 - コマンドラインへ戻ったら以下のコマンドでPlaybookを実行してください: +## ステップ 4 +Playbook を実行します。コントロールホストのコマンドラインに戻り、以下を実行します。 ``` [student1@ansible ~]$ ansible-playbook delete.yml ``` -# Playbookの出力 +# Playbook の出力 -出力例は以下となります。 +出力は次のようになります。 {% raw %} ```yaml [student1@ansible ~]$ ansible-playbook delete.yml -PLAY [LINKLIGHT AS3] *********************************************************** +PLAY [LINKLIGHT AS3] ********************************************************** -TASK [PUSH AS3] ******************************************************************************** +TASK [PUSH AS3] *************************************************************** ok: [f5] -PLAY RECAP ******************************************************************************** +PLAY RECAP ******************************************************************** f5 : ok=1 changed=0 unreachable=0 failed=0 ``` {% endraw %} -# 解答 +# ソリューション -完成したPlaybookのサンプルは [delete.yml](./delete.yml) から参照できます。 +完成した Ansible Playbook +が、回答キーとしてここで提供されています。[delete.yml](https://github.com/network-automation/linklight/blob/master/exercises/ansible_f5/3.2-as3-delete/delete.yml) +を表示するには、ここをクリックしてください。 -Web UIにログインして、 `Partition` が削除されていることを確認します。 +Web UI にログインし、`Partition` が削除されていることを確認します。 --- -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_f5/4.0-explore-controller/README.ja.md b/exercises/ansible_f5/4.0-explore-controller/README.ja.md index bfc605397..f5e8dfcaa 100644 --- a/exercises/ansible_f5/4.0-explore-controller/README.ja.md +++ b/exercises/ansible_f5/4.0-explore-controller/README.ja.md @@ -1,141 +1,159 @@ -# 演習 4.0: Red Hat Ansible Tower環境の確認 +# 演習 4.0: Red Hat Ansible 自動コントローラーの調査 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [まとめ](#まとめ) -- [完了](#完了) + +- [目的](#objective) - [ガイド](#guide) - [重要なこと](#takeaways) - +[完了](#complete) # 目的 -Ansible Tower は、ビジュアルダッシュボード、ロールベースのアクセス制御、ジョブスケジューリング、統合通知、グラフィカルなインベントリーマネジメントを使用して IT インフラストラクチャを一元管理および制御できる Web ベースのソリューションです。Ansible Tower には、WebUI に加えて RESTAPI と CLI が含まれています。 +Ansible 自動コントローラーは Web +ベースのソリューションで、視覚的なダッシュボード、ロールベースのアクセス制御、ジョブスケジューリング、統合された通知、およびグラフィカルな在庫管理を使用して、IT +インフラストラクチャを一元化および制御することができます。Ansible 自動コントローラーには、Web UI に加えて、REST API および +CLI が含まれています。 -このラボでは、Tower にログインして、F5 BIG-IP デバイスに対し自動化タスクを実行するために後のラボで使用されるいくつかの基本的な構成を実行します。この演習では、以下について説明します。 -- コントロールノードで実行されている Ansible バージョンの確認 -- 配置と理解: +このラボでは、ログインして、基本的な設定を実行します。この後のラボでこの設定を使用して、F5 BIG-IP デバイスに対して自動化タスクを実行します。この演習では、以下の項目について説明します。 +- Ansible Automation Platform バージョンの判別 +- 以下を見つけて理解: - **インベントリー** - **認証情報** - **プロジェクト** - **テンプレート** -# 解説 - -## Step 1: Ansible Automation Platform へログイン - -Webブラウザーを開き、Ansible コントロールノードの DNS 名を入力します。 - ->たとえば、student1 ワークベンチが割り当てられ、ワークショップ名が `durham-workshop` の場合には、次のようになります: - -**https://student1.durham-workshop.rhdemo.io** +# ガイド ->このログイン情報は、講師から提供されます。 +## ステップ 1: Ansible Automation Platform へのログイン -![Tower Login Window](images/login_window.ja.png) -- ユーザ名: `admin` -- パスワード: 講師から指示されたパスワード +Web ブラウザーを開き、Ansible コントロールノードの DNS 名を入力します -ログイン後、ジョブダッシュボードは以下のようにデフォルトの表示になります。 -![Tower Job Dashboard](images/tower_login.ja.png) +> たとえば、学習者に student1 ワークベンチが割り当てられ、そのワークショップ名が `durham-workshop` の場合、リンクは次のようになります。 -1. ユーザーインターフェースの右上にある **i** 情報ボタンをクリックします。 + **https://student1.durham-workshop.rhdemo.io** - ![information button link](images/information_button.png) +>このログイン情報は、クラスの開始時にインストラクターによって提供されます。 -2. 次のようなウィンドウがポップアップ表示されます。 +![Controller Login Window](images/login_window.png) - ユーザー名は `admin` - +パスワードはインストラクターから提供 - ![version info window](images/version_info.png) +ジョブダッシュボードにログインすると、以下に示すようにデフォルトのビューになります。 ![Controller Job +Dashboard](images/tower_login.png) - ここでは、Ansible Tower バージョンと Ansible Engine バージョンの両方が表示されていることに注意してください。 +1. ユーザーインターフェイスの右上にある **?** 情報ボタンをクリックし、続いて **About** をクリックします。 + ![information button link](images/information_button.png) -## Step 2: インベントリーの確認 +2. 次のようなウィンドウがポップアップ表示されます。 -Red Hat Ansible Tower がジョブを実行できるようにするには、インベントリーが必要です。インベントリーは Ansible インベントリーファイルと同じように、ジョブを起動するホストのコレクションです。さらに Red Hat Ansible Tower は ServiceNow や Infoblox DDI などの既存の構成管理データベース (cmdb) を利用できます。 + ![version info window](images/version_info.png) ->Ansible Tower に関するインベントリーの詳細については、 [こちらのドキュメントをご覧ください](https://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html) + Ansible 自動コントローラーのバージョンがここで提供されることに注意してください。 -1. 左側のメニューバーの **リソース** の下にある **インベントリー** ボタンをクリックします。 +## ステップ 2: インベントリーの検証 - ![Inventories Button](images/inventories.ja.png) +Red Hat Ansible Controller がジョブを実行できるようにするには、インベントリーが必要です。インベントリーは、Ansible +インベントリーファイルと同じように、ジョブを起動できる一連のホストのコレクションです。さらに、Red Hat Ansible Controller +は、ServiceNow やInfoblox DDI などの既存の設定管理データベース (cmdb) を利用できます。 -2. **インベントリー** の中にある `Workshop Inventory` をクリックしてください。 +>Ansible Controller に関するインベントリーに関する情報は、[このドキュメント](https://docs.ansible.com/automation-controller/latest/html/userguide/inventories.html) を参照してください。 -3. `Workshop Inventory` の枠の中にある 上部の **ホスト** ボタンをクリックします。ここには構成されたホストが表示されます。ホストの1つをクリックします。 +1. 左側のメニューバーの **RESOURCES** の下にある **Inventories** ボタンをクリックします。 -4. ページ上部にある `Workshop Inventory` をクリックし、トップレベルのメニューに戻ります。 + ![Inventory ボタン](images/inventories.png) -5. **グループ** をクリックします。ここではホストのグループを設定できます。 - ![Inventory](images/inventory.ja.png) +2. **Inventories** セクションで `Workshop Inventory` をクリックします。 +3. `Workshop Inventory` セクションの上部にある **HOSTS** + ボタンをクリックします。ここで設定するホストが表示されます。いずれかのデバイスをクリックします。 -## Step 3: プロジェクトの確認 +4. ページ上部の `Workshop Inventory` リンクをクリックして、トップレベルのメニューに戻ります。 -プロジェクトは、Ansible Playbook を Red Hat Ansible Tower にインポートする方法です。Playbook と Playbook ディレクトリを管理するには、Ansible Tower サーバーの Project Base Path に手動で配置するか、Git、Subversion、Mercurial などのTower がサポートするソースコード管理(SCM)システムに Playbook を配置することで管理できます。 +5. **GROUPS** をクリックします。ここでは、ホストのグループを設定できます。 + + ![Inventory](images/inventory.png) -> Tower のプロジェクトの詳細については [こちらをご覧ください](https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html) +## ステップ 3: ワークショッププロジェクトの検証 -1. 左側のメニューバーの **リソース** の下にある **プロジェクト** ボタンをクリックします。 +プロジェクトは、Ansible Playbook が Red Hat Ansible 自動コントローラーにインポートされる仕組みです。Playbook +および Playbook ディレクトリーを Ansible Tower サーバーのプロジェクトのベースパスに手動で配置するか、Controler +がサポートするソースコード管理 (SCM) システム (例: Git、Subversion、Mercurial 等) に Playbook +を配置することで、Playbook と Playbook ディレクトリーを管理できます。 - ![projects link](images/projects.ja.png) +> Controller のプロジェクトの詳細については、[ドキュメントを参照してください](https://docs.ansible.com/automation-controller/latest/html/userguide/projects.html) -2. **プロジェクト** の下には事前に準備された `Ansible official demo project` が一つあります。オブジェクトをクリックして開きます。 +1. 左側のメニューバーの **RESOURCES** の下にある **Projects** ボタンをクリックします。 - `GIT`がこのプロジェクトにリストされていることに注意してください。これは、このプロジェクトがSCMに`Git`を使用していることを意味します。 + ![projects link](images/projects.png) -![project link](images/project.ja.png) +2. **PROJECTS** セクションには、事前に設定されたプロジェクト `Ansible official demo project` が 1 + つあります。オブジェクトをクリックしてこれを開きます。 -3. `Ansible official demo project` の下の **SCM タイプ** ドロップダウンメニューをクリックしてください。 + このプロジェクトには `Git` がリストされていることに注意してください。これは、このプロジェクトが SCM に `Git` を使用していることを意味します。 - Git、Mercurial、Subversion が選択肢の一部であることに注意してください。プロジェクトが引き続き正しく機能するように、Git を選択します。 + ![project link](images/project.png) -## Step 4: 認証情報の確認 +3. `Ansible official demo project` セクションで、**SCM TYPE** ドロップダウンメニューをクリックします -認証情報は Red Hat Ansible Automation Platform によって、マシンに対して **ジョブ** を起動するときの認証、インベントリソースとの同期、およびバージョン管理システムからのプロジェクトコンテンツのインポートに使用されます。ワークショップでは、ネットワークデバイスを認証するための資格情報が必要です。 + Git、Mercurial、Subversion が選択肢であることに注意してください。プロジェクトが引き続き正しく機能するように、選択を Git に戻します。 -> Tower に関する認証情報の詳細については、 [こちらのドキュメントをご覧ください](https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html). +## ステップ 4: ワークションプの認証情報の検証 -1. 左側のメニューバーの **リソース** の下にある **認証情報** ボタンをクリックします。 +認証情報は、**Jobs** +をマシンに対して起動したり、インベントリーソースと同期したり、プロジェクトのコンテンツをバージョン管理システムからインポートしたりする際の認証用に、Red +Hat Ansible Automation Platform +によって使用されます。ワークショップでは、ネットワークデバイスへの認証に認証情報が必要です。 - ![credentials link](images/credentials.ja.png) +> 自動コントローラーの認証情報の詳細は、[ドキュメントを参照してください](https://docs.ansible.com/automation-controller/latest/html/userguide/credentials.html)。 -2. **認証情報** の下には、事前に構成された認証情報の `Workshop Credential` と `Tower Credential` があります。`Workshop Credential` をクリックします。 +1. 左側のメニューバーの **RESOURCES** の下にある **Credentials** ボタンをクリックします。 -3. `Workshop Credential` の中で次のことを確認します。 - - **認証情報タイプ**: マシン - - **ユーザー名**: `ec2-user` - - **パスワード**: `blank` です。この資格情報は、パスワードの代わりにキーを使用しています。 - - **SSH 秘密鍵**: 既に `暗号化` され設定されています。 + ![credentials link](images/credentials.png) -![credential](images/credential.ja.png) +2. **CREDENTIALS** セクションには、2 つの事前に設定された認証情報 `Workshop Credential` + があります。`Workshop Credential` をクリックします。 -## Step 5: テンプレートの確認 +3. `Workshop Credential` で以下を確認します。 + + - **CREDENTIAL TYPE** が `Machine` 認証情報である。 + - **USERNAME** が `ec2-user` に設定されている。 + - **PASSWORD** が `blank` である。この認証情報はパスワードの代わりにキーを使用します。 + - **SSH PRIVATE KEY** がすでに設定され、`ENCRYPTED` である。 -テンプレートまたはジョブテンプレートは、Ansible Playbook を実行するときに使用されるパラメーターを定義します。これらのパラメーターには、使用するプロジェクトやインベントリーなど、前述の機能が含まれています。さらに、ロギングレベルやプロセスフォークなどのパラメーターにより、Playbook の実行方法をさらに細かく設定できます。 + ![credential](images/credential.png) -1. 左側のメニューバーの **リソース** の下にある **テンプレート** ボタンをクリックします。 +## ステップ 5: ジョブテンプレートの検証 - ![templates link](images/templates.ja.png) +テンプレートまたはジョブテンプレートは、Ansible Playbook +の実行時に使用されるパラメーターを定義します。これらのパラメーターには、使用するプロジェクトやインベントリーなど、前述の要素が含まれます。さらに、ログレベルやプロセスフォークなどのパラメーターにより、Playbook +の実行をさらに細かく設定することができます。 -2. **テンプレート** の下には、事前に構成された`INFRASTRUCTURE / Turn off IBM Community Grid` があります。オブジェクトをクリックします。 +1. 左側のメニューバーの **RESOURCES** セクションにある **Templates** ボタンをクリックします。 + ![テンプレートリンク](images/templates.png) -![template link](images/template.ja.png) +2. **TEMPLATES** セクションには、少なくとも 1 つ事前に設定されたジョブテンプレート `INFRASTRUCTURE / Turn + off IBM Community Grid` があります。オブジェクトをクリックしてこれを開きます。 -# まとめ + ![template link](images/template.png) -- Ansible Automation Platform は、Ansible Playbook を実行するためのインベントリーが必要です。このインベントリーは、コマンドラインの Ansibleで使用するものと同じです -- Ansible Automation Platform は、`GitHub`を含むSCM(source control management)と同期できます -- Ansible Automation Platform は、SSH 秘密鍵やプレーンテキストのパスワードを含む資格情報を保存および暗号化できます。Ansible Automation Platform は、HashiCorp の CyberArk や Vault などの既存の認証情報ストレージシステムと同期することもできます -- ジョブテンプレートは、Ansible Playbook を実行するときに使用されるパラメーターを定義します +# 重要なこと ---- +- Ansible には、Ansible Playbook + を実行する対象としてのインベントリーが必要です。このインベントリーは、ユーザーがコマンドラインのみの Ansible + プロジェクトで使用するものと同じです。 +- Ansible 自動コントローラーは、`GitHub` を含む既存の SCM (ソースコード管理) と同期できます。 +- Ansible 自動コントローラーは、SSH 秘密鍵やプレーンテキストパスワードなどの認証情報を保存および暗号化できます。Ansible +Automation Platform は、CyberArk や HashiCorp Vault +などの既存の認証情報ストレージシステムと同期することもできます - ジョブテンプレートは、Ansible Playbook +の実行時に使用されるパラメーターを定義します # 完了 -演習 4.0 が完了しました。 +ラボ演習 4.0 を完了しました -これで、Ansible AutomationPlatform の使用を開始するために必要な3つのコンポーネントすべてを確認しました。インベントリー、プロジェクトおよび認証情報です。次の演習では、ジョブテンプレートを作成します。 +これで、Ansible 自動コントローラーの使用を開始するために必要な認証情報、インベントリー、およびプロジェクトの 3 +つのコンポーネントすべてを調べました。次の演習では、ジョブテンプレートを作成します。 -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_f5/4.1-controller-job-template/README.ja.md b/exercises/ansible_f5/4.1-controller-job-template/README.ja.md index 6f57c7a9e..f5acbc026 100644 --- a/exercises/ansible_f5/4.1-controller-job-template/README.ja.md +++ b/exercises/ansible_f5/4.1-controller-job-template/README.ja.md @@ -1,46 +1,53 @@ -# 演習 4.1: Tower ジョブテンプレートの作成 +# 演習 4.1: 自動コントローラージョブテンプレートの作成 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [まとめ](#まとめ) -- [完了](#完了) + +- [目的](#objective) - [ガイド](#guide) - [重要なこと](#takeaways) - +[完了](#complete) # 目的 -Red Hat Ansible Tower の BIG-IP 仮想サーバー構成ジョブテンプレートをデモします。このジョブテンプレートは、仮想サーバーとプールを作成し、2つの Web サーバーをプールに追加します。 +Red Hat Ansible 自動コントローラー向けの BIG-IP +仮想サーバー設定ジョブテンプレートについてを説明します。このジョブテンプレートは仮想サーバーとプールを作成し、2 つの Web +サーバーをプールに追加します。 + +Ansible 自動コントローラーで Ansible Playbook を実行するには、**ジョブテンプレート** +を作成する必要があります。**ジョブテンプレート** には以下が必要です。 + +- デバイスにログインするための **認証情報**。 - ジョブ実行の対象となる **インベントリー** - Ansible Playbook +が含まれる **プロジェクト** -Ansible Tower で Ansible Playbook を実行するには、**ジョブテンプレート** を作成する必要があります。**ジョブテンプレート** には以下が必要です。 +# ガイド - - デバイスにログインするための **認証情報** - - ジョブを実行するための **インベントリー** - - Playbook が含まれる **プロジェクト** +## ステップ 1: プロジェクトの作成 -# 解説 -## Step 1: プロジェクトを作成する -1. Web UI を開き、左側のメニューバーから **リソース** セクションの下にある **プロジェクト** をクリックします。 +1. Ansible Web UI で、左側のナビゲーションバーを使用して `RESOURCES` セクションの `Projects` + リンクをクリックします。 -2. 緑色の![templates link](images/add.png)ボタンをクリックして、新しくプロジェクトを作成します。 +2. ![templates link](images/add.png) ボタンをクリックして、新規プロジェクトを作成します -3. 以下の通りにパラメータを入力し、**保存** をクリックします。 +3. 以下のようにプロジェクトパラメーターを入力し、`Save` をクリックします - | パラメータ | 値 | - |------------------------|---------------------------------------------------------------------| - | 名前 | Workshop Project | - | 組織 | Default | - | SCM タイプ | Git | - | SCMURL | https://github.com/f5devcentral/ansible-tower-workshop-examples.git | - | 起動時のリビジョン更新 | ✓ | + | Parameter | Value | + |---|---| + | NAME | Workshop Project | + | ORGANIZATION | Default + | Default Execution Environment | f5 workshop execution environment | + | SCM TYPE | Git | + | SCM URL | https://github.com/f5devcentral/ansible-tower-workshop-examples.git | + | Update Revision on Launch | ✓ | -> Note: ご使用の環境には、追加のプロジェクトがセットアップされている場合があります。各プロジェクトは、Ansible Playbook のリポジトリを表します。複数のプロジェクトがあるのは正常です。 +**注記**: お使いの環境では、他にもプロジェクトが設定されている場合があります。各プロジェクトは、Ansible Playbook のリポジトリーを表しています。複数のプロジェクトがあっても全く問題ありません。 -![workshop_project link](images/workshop_project.ja.png) +![workshop_project link](images/workshop_project.png) -すべての Playbook は https://github.com/f5devcentral/ansible-tower-workshop-examples から入手でき、各 Playbook を確認することができます。 +すべての Playbook +はhttps://github.com/f5devcentral/ansible-tower-workshop-examples で公開されており、各 +Playbook の背景を把握することができます。 -参考に、インポートされている、このラボの後半で実行される Playbook の一つを次に示します。 +参照として、インポートされた Playbook の 1 つで、このラボで後ほど実行される Playbook を以下に示します。 **`create_vs.yml`** @@ -50,7 +57,10 @@ Ansible Tower で Ansible Playbook を実行するには、**ジョブテンプ hosts: lb connection: local gather_facts: false - + + collections: + - f5networks.f5_modules + tasks: - name: Setting up provider values set_fact: @@ -100,141 +110,144 @@ Ansible Tower で Ansible Playbook を実行するには、**ジョブテンプ msg: "The VIP (Virtual IP) is https://{{ansible_host}}" ``` -## Step 2: BIG-IP 認証情報の作成 -ジョブを作成する前に、BIG-IP に対して認証するための資格情報を作成する必要があります。 +## ステップ 2: BIGIP 認証情報の作成 -1. Web UI を開き、左側のメニューバーから **リソース** セクションの下にある **認証情報** をクリックします。 +ジョブを作成する前に、BIGIP に対して認証するために認証情報を作成する必要があります。 - ![credentials link](images/credentials.ja.png) +1. Web UI を開き、左側のナビゲーションバーを使用して `RESOURCES` セクションの `Credentials` + リンクをクリックします。 -2. 緑色の![templates link](images/add.png) ボタンをクリックし、新しく認証情報テンプレートを作成します。 + ![credentials link](images/credentials.png) -3. 以下の通りに、認証情報パラメータをフィールドに入力します。 +2. ![templates link](images/add.png) ボタンをクリックして、新規認証情報テンプレートを作成します -| パラメータ | 値 | -|----------------|--------------| -| 名前 | BIGIP | -| 認証情報タイプ | ネットワーク | -| ユーザ名 | admin | -| パスワード | | +3. 以下のように、以下の認証情報テンプレートパラメーターでフィールドに入力します。 -NOTE: パスワードは、学生ラボ情報が含まれているWebページのワークベンチ情報セクションにあります。パスワードがわからない場合は、講師に相談してください。 + | Parameter | Value | + |---|---| + | NAME | BIGIP | + | CREDENTIAL TYPE | Network | + | USERNAME | admin | + | PASSWORD | | + | -4. **保存** をクリックします。 + **注記**: パスワードは、受講者のラボ情報が含まれる Web ページの Workbench Information セクションに記載されています。パスワードが不明な場合は、インストラクターにお尋ねください。 -## Step 3: ジョブテンプレートの作成 -1. Web UI を開き、左側のメニューバーから **リソース** セクションの下にある **テンプレート** をクリックします。 +4. SAVE をクリックします - ![template link](images/templates.ja.png) +## ステップ 3: ジョブテンプレートの作成 -2. 緑色の![templates link](images/add.png) ボタンをクリックし、新しくジョブテンプレートを作成します。 +1. Web UI を開き、左側のナビゲーションバーを使用して `RESOURCES` セクションの `Templates` リンクをクリックします。 -3. 以下の通りにパラメータを入力します。 + ![テンプレートリンク](images/templates.png) -| パラメータ | 値 | -|----------------|--------------------| -| 名前 | create_vs | -| ジョブタイプ | 実行 | -| インベントリー | Workshop Inventory | -| プロジェクト | Workshop Project | -| Playbook | create_vs.yml | -| 認証情報 | BIGIP | +2. ![templates link](images/add.png) ボタンをクリックして、新しいジョブテンプレートを作成します -認証情報タイプから `ネットワーク` を選択し、次に `BIGIP` を選択します。 + >**`Workflow Template`** ではなく必ず **`Job Template`** を選択してください - ![network credential](images/network.ja.png) +3. 次のようにジョブテンプレートパラメータを入力します。 -これは、パラメータが入力されたジョブテンプレートのスクリーンショットです。 + | Parameter | Value | + |---|---| + | NAME | create_vs | + | JOB TYPE | Run | + | INVENTORY | Workshop Inventory | + | PROJECT | Workshop Project | + | PLAYBOOK | create_vs.yml | + | CREDENTIALS | BIGIP | + | - ![create_vs job template](images/create_vs.ja.png) + **CREDENTIAL TYPE** で `Network` を選択し、次に `BIGIP` を選択します。 -4. 下にスクロールして、緑色の **保存** ボタンをクリックします。 + ![network credential](images/network.png) -## Step 4: ジョブテンプレートの起動 + パラメータが入力されたジョブテンプレートのスクリーンショットを以下に示します。 -1. 全てのテンプレートが一覧表示されている **テンプレート** ウインドウに戻ります。 + ![create_vs job template](images/create_vs.png) + +4. 下にスクロールして、緑色の `SAVE` ボタンをクリックします。 -2. ロケットボタンを押して、`create_vs` を起動します。 +## ステップ 4: ジョブテンプレートの起動 - ![rocket button](images/rocket.png) +1. すべてのジョブテンプレートが一覧表示されている `Templates` ウィンドウに戻ります。 - ロケットボタンをクリックすると、ジョブが起動します。**ジョブ詳細表示** という新しいウインドウを開き確認します。[Tower Jobs](https://docs.ansible.com/ansible-tower/latest/html/userguide/jobs.html)の詳細については、ドキュメントを参照してください。 +2. Launch ボタンをクリックして、`create_vs` ジョブテンプレートを起動します。 -## Step 5: ジョブ詳細表示の確認 + ![rocket ボタン](images/rocket.png) -左側には **詳細ペイン** があり、右側には **標準出力ペイン** があります。 + 起動ボタンをクリックすると、ジョブが起動します。このジョブは、**Job Details View** と呼ばれる新しいウィンドウで開きます。[コントローラージョブ](https://docs.ansible.com/automation-controller/latest/html/userguide/jobs.html) の詳細は、ドキュメントをご覧ください。 -![job details view](images/job_create_vs.ja.png) +## ステップ 5: ジョブの詳細ビューの検証 -1. **詳細ペイン** を確認します。 +**Standard Out ウィンドウ** が表示されます。 - **詳細ペイン**は、ジョブの開始と終了時のタイムスタンプのような情報や、ジョブの種類(チェックや実行)、ジョブを起動したユーザ、プロジェクトや Ansible Playbook 等の情報を提供します。 +![job details view](images/job_create_vs.png) - ジョブがまだ終了していない場合、**詳細ペイン** にはキャンセル![cancel button](images/cancel.png)ボタンがあり、ジョブを停止するために使用することができます。 +1. *Standard Out ウィンドウ** を調べます -2. **標準出力ペイン** を確認します。 + **Standard Out ウィンドウ** には、Ansible Playbook からの出力が表示されます。すべてのタスク出力は、コマンドラインに表示されるものと正確に一致します。 + +2. **Details タブ** を調べます - **標準出力ペイン** は、Ansible Playbook の出力を表示します。全ての Task の出力は、コマンドラインの出力と全く同じです。 + **Details タブ** には、ジョブの開始と終了のタイムスタンプ、ジョブの種類 (チェックまたは実行)、ジョブを開始したユーザー、使用された Project と Ansible Playbook などの情報が表示されます。 -3. **出力の展開** ![expand image](images/expand.png) ボタンをクリックします。 + ジョブがまだ終了していない場合、**Details タブ** にはキャンセルボタン ![cancel button](images/cancel.png) があり、ジョブを停止するために使用できます。 - これにより、**標準出力ペイン** が拡張され、ウインドウ全体が表示されます。 +3. **Standard Out pane** でタスクをクリックして、その特定のタスクからの構造化された出力を開きます。 -4. **標準出力ペイン** の中から Task をクリックし、特定の Task から構造化された出力を開きます。 + > **changed** または **ok** がある行をクリックします - > 任意の **changed** もしくは **ok** がある行をクリックします。 + ![task details window](images/task_details.png) - ![task details window](images/task_details.png) +## ステップ 6: ジョブウィンドウを調べます -## Step 6: ジョブウインドウの確認 +実行済みまたは現在実行中の **ジョブテンプレート** は、**VIEWS --> Jobs** ウィンドウの下に表示されます。 -実行完了もしくは実行中の **ジョブテンプレート** は **ジョブ** ウインドウに表示されます。 +1. 左側のメニューのジョブボタンをクリックします。 -1. Web UI で、左側のメニューバーから **ジョブ** ボタンをクリックします。 + ![ジョブボタン](images/jobs.png) - ![jobs button](images/jobs.ja.png) + ジョブリンクには、ジョブの一覧とそれらのステータスが表示 (正常に完了、失敗、またはアクティブ (実行中の) ジョブとして表示) されます。この画面から実行できるアクションには、特定のジョブの詳細および標準出力、ジョブの起動、またはジョブの削除が含まれます。 - ジョブウインドウには、ジョブのリストとそのステータスが表示され、正常に完了したか失敗したか、またはアクティブな(実行中の)ジョブが表示されます。この画面から実行できるアクションには、特定のジョブの詳細と標準出力の表示、ジョブの再起動、ジョブの削除などがあります。 +2. **`create_vs`** ジョブをクリックします -2. **`create_vs`** ジョブをクリックします。 + ![jobs link](images/jobslink.png) - ![jobs link](images/jobslink.ja.png) + **`create_vs`** ジョブは最新のものでした (より多くのジョブを起動していない場合に限る)。このジョブをクリックして、**Job Details View** に戻ります。Ansible 自動コントローラーは、開始されたすべてのジョブの履歴を保存します。 - その **`create_vs`** のジョブは最新です(他の演習を先に進めていない限り)。 このジョブをクリックし、**ジョブ詳細表示** に移動します。Ansible Tower は起動されたすべてのジョブの履歴を保存します。 +## ステップ 7: BIG-IP 仮想サーバーが作成されたことの確認 -## Step 7: BIG-IP 仮想サーバー作成確認 +Web ブラウザーで F5 BIG-IP にログインし、設定された内容を確認します。BIG-IP のログイン情報は以下のとおりです。 -Web ブラウザーから F5 BIG-IP にログインし、構成内容を確認します。 -BIG-IPのログイン情報: +- ユーザー名: admin - パスワード: インストラクターから提供、デフォルトは ansible -- username: admin -- password: **講師から指示されます** (default is admin) +ロードバランサーの仮想サーバーは、左側のメニューからナビゲーションして探すことができます。**Local Traffic** +をクリックしてから、**Virtual Servers** をクリックします。以下のスクリーンショットを参照してください。 -左側のメニューに、Virtual Servers を見つけることができます。**Local Traffic** をクリックし、**Virtual Servers** をクリックします。以下のスクリーンショットを参照してください。 ![vip link](images/vip.png) -## Step 8: Web サーバの確認 +## ステップ 8: Web サーバーの確認 -2つの RHEL Web サーバは、それぞれ既に Apache が起動しています。Web ブラウザーから F5 ロードバランサーのパブリック IP アドレスを開きます。 +2 つの RHEL Web サーバーのそれぞれでは、すでに apache が実行されています。Web ブラウザーで F5 ロードバランサーのパブリック +IP を開きます。 ->今回は8443ではなく443を使用します。例: https://X.X.X.X:443/ +>今回は、ポート 8443 の代わりに 443 を使用します (例: https://X.X.X.X:443/) -以下に示すように、更新するたびに BIG-IP は node1 と node2 間のトラフィックの負荷を分散します: -![node1 link](images/node1.png) -![node2 link](images/node2.png) +リフレッシュするたびに、BIG-IP は以下に示すように **node1** と **node2** の間でトラフィックの負荷分散を行います。 -# まとめ +![node1 link](images/node1.png) ![node2 link](images/node2.png) -デモに成功しました - - 仮想サーバーを展開するためのジョブテンプレートの作成 - - Ansible Tower UI からのジョブテンプレートの起動 - - 仮想サーバーが正しく作成されていることの確認 - - Web サーバーが稼働中であることの確認 +# 重要なこと ---- +以下のことができるようになりました + - ジョブテンプレートの作成して仮想サーバーをデプロイする + - Ansible 自動コントローラー UI からジョブテンプレートを起動する + - 仮想サーバーが正しく作成されたことを確認する + - Web サーバーが稼働していることを確認する # 完了 -演習4.1を完了しました。 +ラボ演習 4.1 を完了しました -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_f5/4.2-controller-workflow/README.ja.md b/exercises/ansible_f5/4.2-controller-workflow/README.ja.md index 7f45e561b..eea2b3e60 100644 --- a/exercises/ansible_f5/4.2-controller-workflow/README.ja.md +++ b/exercises/ansible_f5/4.2-controller-workflow/README.ja.md @@ -1,194 +1,199 @@ # 演習 4.2: ワークフローの作成 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [まとめ](#まとめ) -- [完了](#完了) + +- [目的](#objective) - [ガイド](#guide) - [重要なこと](#takeaways) - +[完了](#complete) # 目的 -F5 BIG-IPの[Ansible Tower ワークフロー](https://docs.ansible.com/ansible-tower/latest/html/userguide/workflows.html)の使用方法を示します。ワークフローを使用すると、インベントリー、Playbook、または権限を共有する場合と共有しない場合がある一連の異なるジョブテンプレート(またはワークフローテンプレート)を構成できます。 +F5 BIG-IP での [Ansible +自動コントローラーワークフロー](https://docs.ansible.com/automation-controller/latest/html/userguide/workflows.html) +の使用方法を説明します。ワークフローを使用すると、インベントリー、プレイブック、またはパーミッションを共有する場合と共有しない場合がある、一連の異なるジョブテンプレート +(またはワークフローテンプレート) を構成できます。 -この演習では、ワークフローを使用して **create_vs** ジョブテンプレートと同じことを実現すると同時に、各ジョブに失敗処理を追加します。 +この演習では、ワークフローを使用して、**create_vs** ジョブテンプレートと同じことを実現します。同時に、各ジョブに障害処理を追加します。 -# 解説 +# ガイド -## Step 1: ジョブテンプレートの準備 +## ステップ 1: ジョブテンプレートの準備 -`演習 4.1` から学んだことに従い、それぞれの Playbook を使用して次のジョブテンプレートを作成します。 +`Lab 4.1` で学習した内容に従って、それぞれの Playbook で以下のジョブテンプレートを作成します。 -| ジョブテンプレート名 | Playbook | -|--------------------------------|--------------------------| -| Create node | create_node.yml | -| Create pool | create_pool.yml | -| Create virtual server | create_virtualserver.yml | -| Rollback node deploy | rollback_node_deploy.yml | -| Rollback pool deploy | rollback_pool_deploy.yml | -| Rollback virtual server deploy | rollback_vs_deploy.yml | +| Job template Name | Playbook | |---|---| | Create node | create_node.yml | +| Create pool | create_pool.yml | | Create virtual server | +create_virtualserver.yml | | Rollback node deploy | rollback_node_deploy.yml +| | Rollback pool deploy | rollback_pool_deploy.yml | | Rollback virtual +server deploy | rollback_vs_deploy.yml | | -上記のジョブテンプレートそれぞれについて、`演習 4.1` と同じテンプレートパラメータを使用します。 +上記とは別に、、上記の各テンプレートに `Lab 4.1` と同じテンプレートパラメーターを使用します。 -| パラメータ | 値 | -|----------------|--------------------| -| 名前 | | -| ジョブタイプ | 実行 | -| インベントリー | Workshop Inventory | -| プロジェクト | Workshop Project | -| Playbook | | -| 認証情報 | BIGIP | +| Parameter | Value | |---|---| | NAME | | | JOB TYPE | Run | | INVENTORY | +Workshop Inventory | | PROJECT | Workshop Project | | PLAYBOOK | | | +CREDENTIAL | BIGIP | | -**Create node** ジョブテンプレートの例を次に示します。 +以下は、**Create node** のテンプレートの例です。 -![create node](images/create-node.ja.png) +![create node](images/create-node.png) -## Step 2: ワークフローテンプレートの作成 +## ステップ 2: ワークフローテンプレートの作成 -1. 左側のメニューバーから **テンプレート** をクリックします。 +1. 左側のメニューの **Templates** リンクをクリックします。 -2. 緑色の![templates link](images/add.png)ボタンをクリックし、**ワークフローテンプレート** を選択します。 +2. ![templates link](images/add.png) ボタンをクリックし、**Workflow Template** を選択します。 -3. 以下の通りにパラメータを入力します。 +3. 次のようにフォームに記入します。 -| パラメータ | 値 | -|----------------|--------------------| -| 名前 | Workshop Workflow | -| 組織 | Default | -| インベントリー | Workshop Inventory | + | Parameter | Value | + |---|---| + | NAME | Workshop Workflow | + | ORGANIZATION | Default | + | INVENTORY | Workshop Inventory | + | -4. **保存** ボタンをクリックします。 +4. **`Save`** ボタンをクリックします -![workflow creation](images/workflow.ja.gif) + ![workflow creation](images/workflow.gif) -## Step 3: ワークフロービジュアライザー +## ステップ 3: ワークフロービジュアライザー -1. **保存** をクリックすると、**ワークフロービジュアライザー** が自動的に開きます。もし開かない場合には、青い **ワークフロービジュアライザー** ボタンをクリックします。 +1. **SAVE** をクリックすると、**ワークフロービジュアライザー**が自動的に開きます。そうでない場合は、青い + **ワークフロービジュアライザー** ボタンをクリックしてください。 -2. デフォルトでは緑色の **開始** ボタンだけが表示されています。**開始** ボタンをクリックします。 +2. デフォルトでは、緑色の **START** ボタンのみが表示されます。**START** ボタンをクリックします。 -3. 右側に **ノードの追加** が表示されます。前の手順で作成した `Create node` ジョブテンプレート(もしくは名前を付けたもの)を選択します。 +3. **ADD A NODE** ウィンドウが右側に表示されます。直前の手順で作成した `Create node` + ジョブテンプレート(あるいは、自分で付けた名前のテンプレート)を選択します。 - ![add a template](images/add-a-template.ja.png) + ![add a template](images/add-a-node.png) - `Create node`ジョブテンプレートがノードになりました。ジョブまたはワークフローテンプレートは、ノードと呼ばれるグラフのような構造を使用してリンクされます。これらのノードは、ジョブ、プロジェクトの同期、またはインベントリに同期することができます。テンプレートは、異なるワークフローの一部にしたり、同じワークフローで複数回使用することもできます。ワークフローを起動すると、グラフ構造のコピーがワークフロージョブに保存されます。 + `Create node` ジョブテンプレートがノードとなりました。ジョブまたはワークフローテンプレートは、ノードと呼ばれるグラフのような構造を使って相互に連携します。これらのノードには、ジョブ、プロジェクト同期、またはインベントリー同期などが含まれます。ジョブテンプレートは異なるワークフローの一部となることも、同じワークフローで複数回使用することもできます。グラフ構造のコピーは、ワークフローの起動時にワークフロージョブに保存されます。 -4. 緑色の **選択** ボタンをクリックします。 -1. **`Create node`** ジョブテンプレートを選択します。実行オプションは、**常時** を使用します。緑色の **選択** ボタンをクリックします。 +4. 緑の **SELECT** ボタンをクリックします。 - ![remove pool](images/create_node.ja.png) + ![remove pool](images/create_node.png) -## Step 4: *Create pool* ジョブテンプレートの追加 +## ステップ 4: *Create pool* ジョブテンプレートの追加 -1. **`Create node`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +1. **`Create node`** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -2. **`Create pool`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **成功時** を選択します。 +2. **`Create pool`** ジョブテンプレートを選択します。**Run type** という左側のナビゲーターメニューオプションから + **On Success** を選択します。 -3. 緑色の **選択** ボタンをクリックします。 +3. **SAVE** ボタンをクリックします。 - ![upgrade server](images/create_pool.ja.png) + ![upgrade server](images/create_pool.png) -## Step 5: *Create virtual server* ジョブテンプレートの追加 +## ステップ 5: *Create virtual server* ジョブテンプレートの追加 -1. **`Create pool`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +1. **`Create pool`** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -2. **`Create virtual server`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **成功時** を選択します。 +2. **`Create virtual server`** ジョブテンプレートを選択します。**Run type** + という左側のナビゲーターメニューオプションから **On Success** を選択します。 -3. 緑色の **選択** ボタンをクリックします。 +3. **SAVE** ボタンをクリックします。 - ![add pool](images/create_virtualserver.ja.png) + ![add pool](images/create_virtualserver.png) -## Step 6: *Rollback node deploy* ジョブテンプレートの追加 +## ステップ 6: *Rollback node deploy* テンプレート -1. **`Create node`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +1. **Create node** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -2. **`Rollback node deploy`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **障害発生時** を選択します。 +2. **Rollback node deploy** ジョブテンプレートを選択します。**Run type** + という左側のナビゲーターメニューオプションから **On Failure** を選択します。 -3. 緑色の **選択** ボタンをクリックします。 +3. **SAVE** ボタンをクリックします。 - ![configure restore node](images/rollback_node.ja.png) + ![configure restore node](images/rollback_node.png) -## Step 7: *Rollback pool deploy* ジョブテンプレートの追加 +## ステップ 7: *Rollback pool deploy* テンプレート -1. **`Create pool`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +1. **Create pool** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -2. **`Rollback pool deploy`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **障害発生時** を選択します。 +2. **Rollback pool deploy** ジョブテンプレートを選択します。**Run type** + という左側のナビゲーターメニューオプションから **On Failure** を選択します。 -3. 緑色の **選択** ボタンをクリックします。 +3. **SAVE** ボタンをクリックします。 - ![configure restore node](images/rollback_pool.ja.png) + ![configure restore node](images/rollback_pool.png) -## Step 8: *Rollback virtual server* ジョブテンプレートの追加 +## ステップ 8: *Rollback virtual server* テンプレート -1. **`Create virtual server`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +1. **Create virtual server** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** + が再び表示されます。 -2. **`Rollback virtual server deploy`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **障害発生時** を選択します。 +2. **Rollback virtual server deploy** ジョブテンプレートを選択します。**Run type** + という左側のナビゲーターメニューオプションから **On Failure** を選択します。 -3. 緑色の **選択** ボタンをクリックします。 +3. **SAVE** ボタンをクリックします。 - ![configure restore node](images/rollback_virtualserver.ja.png) + ![configure restore node](images/rollback_virtualserver.png) -4. 緑色の **保存** ボタンをクリックします。 +4. 緑の **SAVE** ボタンをクリックします。 -## Step 9: ワークフローの実行 +## ステップ 9: ワークフローの実行 -1. **テンプレート** ウインドウに戻ります。 +1. **Templates** ウィンドウに戻ります -2. ロケットをクリックし、**`Workshop Workflow`** ワークフローテンプレートを起動します。 +2. Launch ボタンをクリックして、**Workshop Workflow** ワークフローテンプレートを起動します。 - ![workflow job launched](images/running-workflow.ja.png) + ![workflow job launched](images/running-workflow.png) - ワークフロージョブの実行中はいつでも、個々のノードをクリックして、ステータスを確認できます。 + ワークフロージョブ中はいつでも、ノードをクリックしてステータスを確認することにより、個々のジョブテンプレートを選択できます。 -## Step 10: エラー処理 +## ステップ 10: エラー処理 -次に、ロールバックが実行されるワークフローの失敗したジョブテンプレートを示します。 +次に、ロールバックが実行されるワークフローの失敗したジョブテンプレートを表示します。 -1. 左側のメニューバーから **テンプレート** をクリックします。 +1. 左側のメニューの `Templates` リンクをクリックします。 - ![templates link](images/templates.ja.png) + ![テンプレートリンク](images/templates.png) -2. `Create virtual server`テンプレートを選択します。 +2. テンプレート `Create virtual server` を選択します。 -3. Playbookを`create_virtualserver.yml`から`create_virtualserver_error.yml`へ変更します。 +3. PLAYBOOK を `create_virtualserver.yml` から `create_virtualserver_error.yml` + に変更します。 -`create_virtualserver_error.yml`のPlaybookは`http_pool_error`プールに仮想サーバを追加しようとしますが、`http_pool_error`は存在しません。したがって、仮想サーバの追加は失敗し、`Rollback virtual server deploy`ノードがトリガーされます。 + `create_virtualserver_error.yml` Playbook は仮想サーバーを設定しますが、存在しないプール `http_pool_error` をアタッチしようとします。そのため、仮想サーバーの追加に失敗し、`Rollback virtual server deploy` ノードがトリガーされます。 -4. 下にスクロールし、緑色の **保存** ボタンをクリックします。 +4. 下にスクロールして、`save` ボタンをクリックします。 -5. **テンプレート**ウインドウに戻り、ロケットをクリックし **`Workshop Workflow`** ワークフローテンプレートを再び起動します。 +5. **Templates** ウィンドウに戻り、ロケットをクリックして、再度 **Workshop Workflow** + ワークフローテンプレートを起動します。 - ![error handling link](images/error_handling.ja.png) + ![error handling link](images/error_handling.png) -6. WebブラウザーからF5 BIG-IPにログインし、構成内容を確認します。 +6. Web ブラウザーで F5 BIG-IP にログインし、設定された内容を確認します。 -**Local Traffic**をクリックし、**Virtual Servers**をクリックします。`Rollback virtual server deploy`がキックされ、全てのBIG-IPの構成が削除されています。**Pools** および **Nodes** も同様に削除されているはずです。 + **Local Traffic** をクリックし、続いて **Virtual Servers**、**Pools**、および **Nodes** をクリックします。`Rollback virtual server deploy` が起動して、すべての BIG-IP 設定が削除されたことがわかります。 -## Step 11: クリーンアップ +## ステップ 11: クリーンアップ -1. 左側のメニューバーから **テンプレート** をクリックします。`Create virtual server` テンプレートを選択します。 +最後に、設定を元に戻し、次のラボに備えます。 -2. Playbook を `create_virtualserver.yml` に戻します。 +1. 左側のメニューの **Templates** リンクをクリックします。テンプレート `Create virtual server` を選択します。 -3. 下にスクロールし、緑色の **保存** ボタンをクリックします。 +2. PLAYBOOK を変更して `create_virtualserver.yml` に戻します。 -4. **テンプレート** ウインドウに戻り、ロケットをクリックし **Workshop Workflow** ワークフローテンプレートを再び起動します。 +3. 下にスクロールして、緑色の `save` ボタンをクリックします。 -5. BIGIP MGMT GUI を介して仮想サーバが作成されたことを確認します。 +4. **Templates** ウィンドウに戻り、ロケットをクリックして、再度 **Workshop Workflow** テンプレートを起動します。 +5. BIGIP MGMT GUI で、仮想サーバーが作成されたことを確認します。 -# まとめ +# 重要なこと -あなたは以下を学習しました - - ノード、プール、および仮想サーバーを作成するワークフローテンプレートの作成 - - ワークフローを堅牢にし、いずれかのジョブテンプレートが失敗した場合のロールバック - - ワークフローテンプレートを起動し、**ワークフロービジュアライザー** の確認 +以下を行いました。 ---- +- ノード、プール、および仮想サーバーを作成するワークフローテンプレートを作成しました - +ワークフローを堅牢にし、いずれかのジョブテンプレートが失敗した場合は、デプロイメントをロールバックするようにしました - +ワークフローテンプレートを起動し、**VISUALIZER** を調べました。 # 完了 -演習 4.2 を完了しました。 +ラボ演習 4.2 を完了しました -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_f5/4.3-controller-workflow2/README.ja.md b/exercises/ansible_f5/4.3-controller-workflow2/README.ja.md index 23953c840..1fa033203 100644 --- a/exercises/ansible_f5/4.3-controller-workflow2/README.ja.md +++ b/exercises/ansible_f5/4.3-controller-workflow2/README.ja.md @@ -1,161 +1,163 @@ # 演習 4.3: ノードメンテナンスワークフローの作成 -**Read this in other languages**: ![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます** :![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png) [日本語](README.ja.md). ## 目次 -- [目的](#目的) -- [解説](#解説) -- [まとめ](#まとめ) -- [完了](#完了) +- [目的](#objective) - [ガイド](#guide) - [重要なこと](#takeaways) - +[完了](#complete) # 目的 -F5 BIG-IPの[Ansible Tower ワークフロー](https://docs.ansible.com/ansible-tower/latest/html/userguide/workflows.html)のユースケースを示します。 +F5 BIG-IP 向けのもう 1 つの [Ansible +自動コントローラーワークフロー](https://docs.ansible.com/automation-controller/latest/html/userguide/workflows.html) +のユースケースを説明します。 -この演習では、サーバーのパッチ管理のワークフローを作成します。最初にプールメンバーを無効にし、ノードにパッチを適用してから、ノードを有効にします。同時に、iRule を仮想サーバーに接続して、サーバーがメンテナンス中であることをユーザーに応答します。 +この演習では、サーバーパッチ管理のワークフローを作成します。まずプールメンバーを無効にし、ノードにパッチを適用し、続いてノードを有効にします。並行して、iRule +を仮想サーバーにアタッチして、サーバーがメンテナンス状態にあるときにユーザーに対応します。 -# 解説 +# ガイド -## Step 1: ジョブテンプレートの準備 +## ステップ 1: ジョブテンプレートの準備 -前の`演習 4.1`と同様に、以下のテンプレートを準備する必要があります: +以前のラボと同様に、`Lab 4.1` に従って以下のテンプレートを作成する必要があります。 -| ジョブテンプレート名 | Playbook | -|--------------------------------|------------------| -| Disable node | disable_node.yml | -| Enable node | enable_node.yml | -| Patch server | patch_server.yml | -| Attach iRule to virtual server | attach_irule.yml | -| Detach iRule | detach_irule.yml | +| NAME | Playbook | |---|---| | Disable node | disable_node.yml | | Enable +node | enable_node.yml | | Patch server | patch_server.yml | | Attach iRule +| attach_irule.yml | | Detach iRule | detach_irule.yml | | -ここでも、`演習 4.1` と同様に `Patch server` を除き、上記の各テンプレートは同じテンプレートパラメータを使用します。このテンプレートは `Workshop Credential` 認証情報を利用し、他の全てのテンプレートは `BIGIP` を使用します。 +`Patch server` を除き、ここでも上記の各テンプレートに `Lab 4.1` +と同じテンプレートパラメーターを使用します。このテンプレートは認証情報 `Workshop Credential` を使用し、他のすべてのテンプレートは +`BIGIP` を使用します。 -| パラメータ | 値 | -|----------------|---------------------| -| 名前 | | -| ジョブタイプ | 実行 | -| インベントリー | Workshop Inventory | -| プロジェクト | Workshop Project | -| Playbook | | -| 認証情報 | | +| Parameter | Value | |---|---| | NAME | | | JOB TYPE | Run | | INVENTORY | +Workshop Inventory | | PROJECT | Workshop Project | | PLAYBOOK | | | +CREDENTIALS | | | -設定されたテンプレートの例を次に示します。 -![job template](images/job-template.ja.png) +以下は、設定されたテンプレートの例です。 +![job template](images/job-template.png) -## Step 2: ワークフローテンプレートの作成 +## ステップ 2: ワークフローテンプレートの作成 -1. 左側のメニューバーから **テンプレート** をクリックします。 +1. 左側のメニューの **Templates** リンクをクリックします。 -2. 緑色の![templates link](images/add.png)ボタンをクリックし、新しく **ワークフローテンプレート** を作成します。 +2. ![templates link](images/add.png) ボタンをクリックします。**Workflow Template** + を選択します。 -3. 以下の通りにパラメータを入力します。 +3. 次のようにフォームに記入します。 -| パラメータ | 値 | -|----------------|---------------------------| -| 名前 | Node maintenance workflow | -| 組織 | Default | -| インベントリー | Workshop Inventory | + | Parameter | Value | + |---|---| + | NAME | Node maintenance workflow | + | ORGANIZATION | Default | + | INVENTORY | Workshop Inventory | + | -4. **保存** ボタンをクリックします。 + ![workflow creation](images/workflow.png) -![workflow creation](images/workflow.ja.png) +4. **Save** ボタンをクリックします -## Step 3: ワークフロービジュアライザー +## ステップ 3: ワークフロービジュアライザー -1. **保存** ボタンをクリックすると、**ワークフロービジュアライザー** が自動的に開きます。もしそうでない場合、青い **ワークフロービジュアライザー** ボタンをクリックします。 +1. **SAVE** ボタンをクリックすると、**WORKFLOW VISUALIZER** が自動的に開きます。開かない場合は、青い + **WORKFLOW VISUALIZER** ボタンをクリックしてください。 -2. デフォルトでは、緑色の **開始** ボタンのみが表示されます。**開始** ボタンクリックします。 +2. デフォルトでは、緑色の **START** ボタンのみが表示されます。**START** ボタンをクリックします。 -3. 右側に **ノードの追加** が表示されます。 +3. **ADD A NODE** ウィンドウが右側に表示されます。 -## Step 4: *Disable node* ジョブテンプレートの追加 +## ステップ 4: ノードテンプレートの無効化 -1. **`Disable node`** ジョブテンプレートを選択します。実行オプションは、`常時` を使用します。 +1. **Disable node** ジョブテンプレートを選択します。ドロップダウンボックスを使用して run を選択します。**Run type** + という左のナビゲーターメニューオプションから **Always** を選択します。 +2. **Save** ボタンをクリックします。 -2. 緑色の **選択** ボタンをクリックします。 + ![Disable node](images/disable-node.png) - ![Disable node](images/disable-node.ja.png) +## ステップ 5: iRule テンプレートのアタッチ -## Step 5: *Attach iRule to virtual server* ジョブテンプレートの追加 +1. **START** ボタンを再度クリックします。**ADD A NODE** が再び表示されます。 -1. もう一度 **開始** ボタンをクリックします。**ノードの追加** が再び表示されます。 +2. **Attach iRule** ジョブテンプレートを選択します。**Run type** という左側のナビゲーターメニューオプションから + **Always** を選択します。 -2. **`Attach iRule to virtual server`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **常時** を選択します。 +3. **Save** ボタンをクリックします。 -3. 緑色の **選択** ボタンをクリックします。 + ![attach irule](images/attach-irule.png) - ![attach irule](images/attach-irule.ja.png) +## ステップ 6: サーバーテンプレートへのパッチ適用 -## Step 6: *Patch server* ジョブテンプレートの追加 +1. **Disable node** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -1. **`Disable node`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +2. **Patch server** ジョブテンプレートを選択します。**Run type** という左側のナビゲーターメニューオプションから + **On Success** を選択します。 -2. **`Patch server`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **成功時** を選択します。 +3. **Save** ボタンをクリックします。 -3. 緑色の **選択** ボタンをクリックします。 + ![upgrade server](images/patch-server.png) - ![upgrade server](images/patch-server.ja.png) +## ステップ 7: ノードテンプレートの有効化 -## Step 7: *Enable node* ジョブテンプレートの追加 +1. **Patch server** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -1. **`Patch server`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +2. **Enable node** ジョブテンプレートを選択します。**Run type** という左側のナビゲーターメニューオプションから **On + Success** を選択します。 -2. **`Enable node`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **成功時** を選択します。 +3. **Save** ボタンをクリックします。 -3. 緑色の **選択** ボタンをクリックします。 + ![enable node](images/enable-node.png) - ![enable node](images/enable-node.ja.png) +## ステップ 8: iRule テンプレートのデタッチ -## Step 8: *Detach iRule* ジョブテンプレートの追加 +1. **Enable node** ノードにカーソルを合わせ、**+** 記号をクリックします。**ADD A NODE** が再び表示されます。 -1. **`Enable node`** ノードにカーソルを合わせ、緑色の **+** 記号をクリックします。**ノードの追加** が再び表示されます。 +2. **Detach iRule** ジョブテンプレートを選択します。**Run type** という左側のナビゲーターメニューオプションから + **On Success** を選択します。 -2. **`Detach iRule`** ジョブテンプレートを選択します。**実行** パラメータは、ドロップダウンメニューから **成功時** を選択します。 +3. **Save** ボタンをクリックします。 -3. 緑色の **選択** ボタンをクリックします。 + ![attach irule](images/detach-irule.png) - ![attach irule](images/detach-irule.ja.png) +## ステップ 9: コンバージドリンクの作成 -## Step 9: コンバージドリンクの作成 +最後に、コンバージェンスリンクを作成します。これにより、並行して実行されているジョブが収束できるようになります。言い換えると、両方のジョブが終了すると、`Detach +iRule` ノードがトリガーされます。 -最後に、並行して実行されているジョブを収束できるようにするリンクを作成します。つまり、両方のジョブが完了すると、`Detach iRule`ノードがトリガーされます。 +1. `Attach iRule to virtual server` ノードにカーソルを合わせ、チェーンのマークをクリックします。 -1. **`Attach iRule to virtual server`** ノードの上にカーソルを置き、青いチェーン記号をクリックします。 +2. 次に、既存の `Detach iRule` をクリックします。ADD LINK ウィンドウが表示されます。RUN パラメーターに Always + を選択します。 -2. 次に、**Detach iRule** をクリックします。リンクの追加ウィンドウが表示されます。**実行** パラメータには、**常時** を選択します。 -![converge link](images/converge-link.ja.png) + ![converge link](images/converge-link.png) -3. 緑色の **保存** ボタンをクリックします。 +3. 再度 **SAVE** ボタンをクリックしてワークフローを保存します。 -4. 緑色の **保存** ボタンをもう一度クリックし、ワークフローを保存します。 +## ステップ 10: ワークフローの実行 -## Step 10: ワークフローの実行 +1. **Templates** ウィンドウに戻ります -1. **テンプレート** ウインドウに戻ります。 +2. 起動ボタンをクリックして、**Node maintenance workflow** テンプレートを起動します。 -2. ロケットをクリックし、**`Node maintenance workflow`** ワークフローテンプレートを起動します。 + ![workflow job launched](images/running-workflow.png) - ![workflow job launched](images/running-workflow.ja.png) + ワークフロージョブ中はいつでも、ノードをクリックしてステータスを確認することにより、個々のジョブテンプレートを選択できます。 - ワークフロージョブの実行中はいつでも、ノードをクリックして個々のジョブテンプレートを選択し、ステータスを確認できます。 +3. iRule が仮想サーバーにアタッチされていると、サーバーのメンテナンス中ユーザーはメンテナンスのページを受け取ります。 -仮想サーバーにiRuleをアタッチすると、サーバーのメンテナンス時にメンテナンスページが表示されます。 ![maintenance page](images/error-page.png) -# まとめ +# 重要なこと -あなたは学習しました +以下を行いました。 - - プールメンバーを無効にし、Webサーバーをアップグレードし、サーバーをプールに戻すワークフローテンプレートを作成しました - - iRuleを仮想サーバーに接続し、ユーザーはサーバーのパッチ中にメンテナンスページが表示されます - - ワークフローテンプレートを起動し、**ワークフロービジュアライザー**を確認しました - ---- +- プールメンバーを無効にし、Web サーバーをアップグレードし、サーバーをプールに戻すワークフローテンプレートを作成しました - +サーバーのパッチ処理中ユーザーがメンテナンスのページを受け取るように、iRule を仮想サーバーにアタッチしました - +ワークフローテンプレートを起動し、**VISUALIZER** を調べました # 完了 -演習 4.3 を完了しました。 +ラボ演習 4.3 を完了しました -これで本演習は終わりです。[演習ガイドへ戻る](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_f5/README.ja.md b/exercises/ansible_f5/README.ja.md index ac2cc48eb..f7f4651d8 100644 --- a/exercises/ansible_f5/README.ja.md +++ b/exercises/ansible_f5/README.ja.md @@ -1,54 +1,61 @@ -# Ansible Linklight - F5 Networking Workshop +# Ansible F5 ネットワーク設定ワークショップ + +**これは Ansible Automation Platform 2 のドキュメントです** ![f5workshop](../../images/ansiblef5-transparent.png) -これはインストラクターの講義、ハンズオン、自習などの様々な形式でワークショップトレーニングを提供することで、F5 BIG-IP を Ansible で自動化する機能を効果的に実証する多目的のコンテンツとなります。 +このコンテンツは、F5 BIG-IP での Ansible +の機能を効果的に説明するための多目的ツールキットです。ここでは、インストラクターによる講義、ハンズオン、または自己ペースの演習など、さまざまな形式でワークショップトレーニングが提供されます。 + +**他の言語でもお読みいただけます**: ![uk](../../images/uk.png) [English](README.md)、![japan](../../images/japan.png) [日本語](README.ja.md) -**Read this in other languages**: ![uk](../../images/uk.png) [English](README.md), ![japan](../../images/japan.png) [日本語](README.ja.md). +This is the documentation for Ansible Automation Platform 1.2. If you are +looking for Ansible Automation Platform 2, please go to +[http://aap2.demoredhat.com/](http://aap2.demoredhat.com/). -## Presentation -プレゼンテーション資料はこちらです: -[Ansible F5 Workshop Deck](../../decks/ansible_f5.pdf) +## プレゼンテーション +プレゼンテーションの資料が必要ですか? ここから入手いただけます: [Ansible F5 Workshop +Deck](../../decks/ansible_f5.pdf) -## Diagram +## 図 ![f5 diagram](../../images/ansible_f5_diagram.png) -BIG-IP へのログイン情報: -- username: admin -- password: **講師から指示されます** (default is admin) +BIG-IP のログイン情報: - ユーザー名: admin - パスワード: **インストラクターから提供** + +## セクション 1 - Ansible F5 の基本演習 -## Section 1 - Ansible x F5 基礎演習 + - [演習 1.0 - ラボ環境の調査](1.0-explore) + - [演習 1.1 - Ansible を使用した F5 BIG-IP からのデータ収集](1.1-get-facts) + - [演習 1.2 - F5 BIG-IP へのノードの追加](1.2-add-node) + - [演習 1.3 - ロードバランシングプールの追加](1.3-add-pool) + - [演習 1.4 - プールへのメンバーの追加](1.4-add-pool-members) + - [演習 1.5 - 仮想サーバーの追加](1.5-add-virtual-server) + - [演習 1.6 - 仮想サーバーへの iRule の追加とアタッチ](1.6-add-irules) + - [演習 1.7 - 実行中の設定の保存](1.7-save-running-config) - - [演習 1.0 - 演習環境の確認](1.0-explore/README.ja.md) - - [演習 1.1 - Ansible による F5 BIG-IP の情報収集](1.1-get-facts/README.ja.md) - - [演習 1.2 - F5 BIG-IP へのノード追加](1.2-add-node/README.ja.md) - - [演習 1.3 - プールの追加](1.3-add-pool/README.ja.md) - - [演習 1.4 - メンバーをプールへ追加](1.4-add-pool-members/README.ja.md) - - [演習 1.5 - Virtual Server の追加](1.5-add-virtual-server/README.ja.md) - - [演習 1.6 - iRule の追加と virtual server へのアタッチ](1.6-add-irules/README.ja.md) - - [演習 1.7 - コンフィグの保存](1.7-save-running-config/README.ja.md) +## セクション 2 - Ansible F5 の操作/高度な演習 -## Section 2 - Ansible F5 運用/応用演習 + - [演習 2.0 - プールメンバーの無効化](2.0-disable-pool-member) + - [演習 2.1 - F5 BIG-IP 設定の削除](2.1-delete-configuration) + - [演習 2.2 - エラー処理](2.2-error-handling) - - [演習 2.0 - プールメンバーの無効化](2.0-disable-pool-member/README.ja.md) - - [演習 2.1 - コンフィグの削除](2.1-delete-configuration/README.ja.md) - - [演習 2.2 - エラーハンドリング](2.2-error-handling/README.ja.md) +## セクション 3 - Ansible F5 AS3 の演習 -## Section 3 - Ansible F5 AS3 演習 + - [演習 3.0 - AS3 の概要](3.0-as3-intro) + - [演習 3.1 - AS3 での操作変更](3.1-as3-change) + - [演習 3.2 - Web アプリケーションの削除](3.2-as3-delete) - - [演習 3.0 - AS3 の紹介](3.0-as3-intro/README.ja.md) - - [演習 3.1 - AS3 による変更運用](3.1-as3-change/README.ja.md) - - [演習 3.2 - Web アプリケーションの削除](3.2-as3-delete/README.ja.md) +## セクション 4 - Ansible コントローラー F5 の演習 -## Section 4 - Ansible F5 Ansible Tower 演習 + - [演習 4.0 - Ansible 自動コントローラーの調査](4.0-explore-tower) + - [演習 4.1 - Ansible 自動コントローラージョブテンプレートの作成](4.1-tower-job-template) + - [演習 4.2 - Ansible 自動コントローラーワークフローの作成](4.2-tower-workflow) + - [演習 4.3 - ノードメンテナンスワークフローの作成](4.3-tower-workflow2) - - [演習 4.0 - Red Hat Ansible Tower環境の確認](4.0-explore-tower/README.ja.md) - - [演習 4.1 - Ansible Tower ジョブテンプレートの作成](4.1-tower-job-template/README.ja.md) - - [演習 4.2 - ワークフローの作成](4.2-tower-workflow/README.ja.md) - - [演習 4.3 - ノードメンテナンスワークフローの作成](4.3-tower-workflow2/README.ja.md) -### 演習に関連した議論や質問を投稿するには以下のリンクを使用してください: +### ワークショップに関する議論を開始する、または質問を投稿するには、以下のリンクを使用してください。 - **https://devcentral.f5.com/questions/f5-ansible-automation-discussion-63579** --- -![Red Hat Ansible Automation](../../images/rh-ansible-automation-platform.png) +![Red Hat Ansible +Automation](../../images/rh-ansible-automation-platform.png) diff --git a/exercises/ansible_middleware/README.ja.md b/exercises/ansible_middleware/README.ja.md new file mode 100644 index 000000000..85b985a2a --- /dev/null +++ b/exercises/ansible_middleware/README.ja.md @@ -0,0 +1 @@ +Please see the demo instructions for the middleware product demo diff --git a/exercises/ansible_network/1-explore/README.ja.md b/exercises/ansible_network/1-explore/README.ja.md index f612ef8f4..c5e96cde2 100644 --- a/exercises/ansible_network/1-explore/README.ja.md +++ b/exercises/ansible_network/1-explore/README.ja.md @@ -1,106 +1,191 @@ -# Exercise 1 - ラボ環境の確認 +# 演習 1 - ラボ環境の探索 -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Diagram](#diagram) -- [Guide](#guide) +* [目的](#objective) +* [図](#diagram) +* [ガイド](#guide) + * [ステップ 1 - VS Code を使用した接続](#step-1---connecting-via-vs-code) + * [ステップ 2 - ターミナルの使用](#step-2---using-the-terminal) + * [ステップ 3 - 実行環境の検証](#step-3---examining-execution-environments) + * [ステップ 4 - ansible-navigator + 設定の検証](#step-4---examining-the-ansible-navigator-configuration) + * [ステップ 5 - インベントリーの検証](#step-5---examining-inventory) + * [ステップ 6 - インベントリーについて](#step-6---understanding-inventory) + * [ステップ 7 - ansible-navigator + を使用したインベントリーの探索](#step-7---using-ansible-navigator-to-explore-inventory) + * [ステップ 8 - ネットワークデバイスへの接続](#step-8---connecting-to-network-devices) +* [完了](#complete) -# Objective +## 目的 -ラボ環境を確認して理解します。この演習は以下を含みます。 -- コントロールノードで稼働する Ansible バージョンを確認します。 -- Ansible の設定ファイル (`ansible.cfg`)を理解する。 -- `ini` 形式のインベントリーファイルを理解する。 +ラボ環境を調べて理解します。 -演習を開始する前にぜひSlackへ参加してみましょう。[日本のAnsibleコミュニティ](https://ansible-users.connpass.com) [日本のAnsible slack コミュニティ](https://ansiblejp.slack.com/join/shared_invite/enQtNzQwNTEyNTc2Mjc3LTRmYzBkY2FhM2RhOGIzNjVhYTczMDdiODY0YWFiMjdmMGRkNGJiZDYzN2I4M2NjZDA5MjkxYzU3ZWQyMzFhYjU) [海外のAnsible slack コミュニティ](https://join.slack.com/t/ansiblenetwork/shared_invite/zt-3zeqmhhx-zuID9uJqbbpZ2KdVeTwvzw)。参加すると他の自動化エンジニアと交流し、情報交換することが可能です。 +この最初のいくつかのラボ演は、Ansible Automation Platform +のコマンドラインユーティリティーを使用します。これには、以下が含まれます。 -# Diagram +- [ansible-navigator](https://github.com/ansible/ansible-navigator) - +Ansible オートメーションコンテンツを実行・開発するためのコマンドラインユーティリティとテキストベースのユーザーインターフェース(TUI)。- +[ansible-core](https://docs.ansible.com/core.html) - Ansible Automation +Platform +を支えるフレームワーク、言語、機能を提供する基本的な実行ファイルです。また、`ansible`、`ansible-playbook`、`ansible-doc` +などのさまざまなクリエートツールも含まれています。Ansible Coreは、無料でオープンソースのAnsibleを提供する上流のコミュニティと、Red +Hatが提供する下流のエンタープライズオートメーション製品であるAnsible Automation Platformとの橋渡しの役割を果たします。- +[実行環境](https://docs.ansible.com/automation-controller/latest/html/userguide/execution_environments.html) +- このワークショップでは特に取り上げません。なぜなら、ビルトインの Ansible 実行環境には、Red +Hatがサポートするすべてのコレクションがすでに含まれており、このワークショップで使用するすべてのネットワークコレクションも含まれているからです。実行環境とは、Ansible +の実行環境として利用できるコンテナイメージです。- +[ansible-builder](https://github.com/ansible/ansible-builder) - +このワークショップでは特に取り上げませんが、`ansible-builder` +は実行環境の構築プロセスを自動化するためのコマンドラインユーティリティです。 -![Red Hat Ansible Automation Lab Diagram](../../../images/network_diagram.png) +Ansible Automation Platformの新しいコンポーネントに関する情報が必要な場合は、このランディングページをブックマークしてください +[https://red.ht/AAP-20](https://red.ht/AAP-20) -この環境には rtr1, rtr2, rtr3, rtr4 と名付けられた4つのルーターがあります。[この図](../README.ja.md)はワークショップ中にいつでも参照できます。SSH設定ファイル (~/.ssh/config)は設定済みで、コントローラーノードから各ルーターへ簡単に接続できるようになっています。 +> チャットでコミュニケーションしましょう +> +> 始める前に、slack にご参加ください! ansiblenetwork slack に参加するには、こちらをクリック。これにより、他のネットワーク自動化エンジニアとチャットしたり、ワークショップの終了後にサポートを受けたりすることができます。リンクが古くなっている場合は、Ansible テクニカルマーケティング にメールでご連絡ください。 -例えば、コントローラーノードから rtr1 へ接続する場合は、以下のように入力します: -```bash -[student1@ansible ~]$ ssh rtr1 -``` +## 図 -この環境ではユーザー名、パスワードを入力する必要はありません。 +![Red Hat Ansible +Automation](https://github.com/ansible/workshops/raw/devel/images/ansible_network_diagram.png) -# Guide -## Step 1 -コントローラーノードの `network-workshop` ディレクトリへ移動します。プロンプトの `ansible` はホスト名を示し、これは正しいノード上にいることを示しています。 +## ガイド -``` -[student1@ansible ~]$ cd ~/network-workshop/ -[student1@ansible network-workshop]$ -[student1@ansible network-workshop]$ pwd +### ステップ 1 - VS Code を使用した接続 + + + + + + + +
ワークショップの演習には、Visual Studio Codeの使用が強く推奨されます。Visual Studio Codeは以下を提供します。 +
    +
  • ファイルブラウザ
  • +
  • 構文強調表示の機能付きテキストエディタ
  • +
  • ブラウザ内ターミナル
  • +
+ バックアップとして、あるいはVisual Studio Codeでは不十分な場合には、SSHによる直接アクセスが可能です。さらなる説明が必要な場合は、短い YouTube ビデオが用意されています。 Ansible Workshops - ワークベンチ環境へのアクセス +
+ +- ワークショップの起動ページ(講師が用意したもの)からVisual Studio +Codeに接続します。パスワードは、WebUIのリンクの下に記載されています。 + + ![launch page](images/launch_page.png) + +- 接続する提供されたパスワードを入力します。 + + ![login vs code](images/vscode_login.png) + +- Visual Studio Code で `network-workshop` ディレクトリーを開きます。 + + ![picture of file browser](images/vscode-networkworkshop.png) + +- `playbook.yml` をクリックしてコンテンツを表示します。 + + ![picture of playbook](images/vscode-playbook.png) + +### ステップ 2 - ターミナルの使用 + +- Visual Studio Code でターミナルを開きます。 + + ![picture of new terminal](images/vscode-new-terminal.png) + +Ansible コントロールノードターミナルで `network-workshop` ディレクトリーに移動します。 + +```bash +[student1@ansible-1 ~]$ cd ~/network-workshop/ +[student1@ansible-1 network-workshop]$ pwd /home/student1/network-workshop +[student1@ansible-1 network-workshop]$ ``` - - `~` - チルダはホームディレクトリ `/home/student1` の短縮表記 - - `cd` - ディレクトリを移動するコマンド - - `pwd` - 現在のディレクトリを表示するコマンドで、フルパスが表示されます。 -## Step 2 +* `~` - このコンテキストでのチルダは `/home/student1` のショートカットです +* `cd` - ディレクトリーを変更する Linux コマンド +* `pwd` - 作業ディレクトリーを印刷するための Linux コマンド。これにより、現在の作業ディレクトリーへのフルパスが表示されます。 -`ansible` コマンドを `--version` オプションをつけて実行すると、Ansible に関する情報を確認することができます: +### ステップ 3 - 実行環境の検証 -``` -[student1@ansible ~]$ ansible --version -ansible 2.8.1 - config file = /home/student1/.ansible.cfg - configured module search path = [u'/home/student1/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'] - ansible python module location = /usr/lib/python2.7/site-packages/ansible - executable location = /usr/bin/ansible - python version = 2.7.5 (default, Jun 11 2019, 12:19:05) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] +`ansible-navigator` 引数を指定して `images` コマンドを実行し、コントロールノードに設定された実行環境を確認します。 + +```bash +$ ansible-navigator images ``` -> Note: Ansibleのバージョンは上記の表示と異なる場合があります。 +![ansible-navigator images](images/navigator-images.png) -このコマンドはAnsibleのバージョン、実行ファイルの場所、Pythonのバージョン、モジュールの検索パスと `ansible の設定ファイル` の場所を表示します。 -## Step 3 +> 注記 +> +> 表示される出力は、上記の出力とは異なる場合があります -`cat` コマンドで `ansible.cfg` ファイルの内容を確認します(実際の環境の値とは異なる部分があるかもしれませんが演習には影響はありません)。 +このコマンドは、現在インストールされているすべての実行環境(略してEE)に関する情報を提供します。対応する番号を押すことで、EE +を調べることができます。例えば、上記の例で **2** を押すと、`ee-supported-rhel8` の実行環境が表示されます。 +![ee メインメニュー](images/navigator-ee-menu.png) + +`2` に `Ansible version and collections` を選択すると、その特定の EE にインストールされたすべての +Ansible Collections と、`ansible-core` のバージョンが表示されます。 + +![ee info](images/navigator-ee-collections.png) + +### ステップ 4 - ansible-navigator 設定の検証 + +Visual Studio Code を使用して `ansible-navigator.yml` ファイルを開くか、`cat` +コマンドを使用してファイルの内容を表示します。このファイルはホームディレクトリーにあります。 + +```bash +$ cat ~/.ansible-navigator.yml +--- +ansible-navigator: + ansible: + inventories: + - /home/student1/lab_inventory/hosts + + execution-environment: + image: registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0 + enabled: true + container-engine: podman + pull-policy: missing + volume-mounts: + - src: "/etc/ansible/" + dest: "/etc/ansible/" ``` -[student1@ansible ~]$ cat ~/.ansible.cfg -[defaults] -stdout_callback = community.general.yaml -connection = smart -timeout = 60 -deprecation_warnings = False -host_key_checking = False -retry_files_enabled = False -inventory = /home/student1/lab_inventory/hosts -[persistent_connection] -connect_timeout = 60 -command_timeout = 60 -``` -`ansible.cfg` に含まれる以下の値に注意してください: +`ansible-navigator.yml` ファイル内の次のパラメータに注意してください。 + +* `inventories`: 使用されている Ansible インベントリーの場所を示します +* `execution-environment`: デフォルトの実行環境が設定されている場所 - - `inventory`: Ansibleインベントリーファイルの場所が示されます。 +設定可能なすべての knob +の詳細な一覧については、[ドキュメント](https://ansible-navigator.readthedocs.io/en/latest/settings/) +を参照してください。 -## Step 4 +### ステップ 5 - インベントリーの検証 -`playbook` の `play` のスコープは **インベントリー** で宣言されたグループに制限されます。Ansible は複数の [インベントリー](http://docs.ansible.com/ansible/latest/intro_inventory.html) タイプをサポートしています。インベントリーはPlaybookの対象となるホストの一覧を持つシンプルなフラットファイルです。それ以外に、ホストの一覧を返すスクリプト(裏側でCMDBに問い合わせを行う)も利用可能です。 +`playbook` 内の `play` の範囲は、Ansible **inventory** +内で宣言されたホストのグループに制限されます。Ansible は複数の +[インベントリー](http://docs.ansible.com/ansible/latest/intro_inventory.html) +タイプに対応しています。インベントリーは、その中で定義されたホストのコレクションが含まれるシンプルなファイルや、Playbook +を実行するデバイスのリストを生成する動的スクリプト (CMDBバックエンドのクエリーを行うものなど) が考えられます。 -この演習では **ini** 形式で記述されたファイルベースのインベントリーを利用します。`cat` コマンドを利用して演習環境のインベントリーを確認してみます。 +このラボでは、**ini** 形式で記述されたファイルベースのインベントリーを操作します。Visual Studio Code を使用して +`~/lab_inventory/hosts` ファイルを開くか、`cat` コマンドを使用してファイルの内容を表示します。 ```bash -[student1@ansible ~]$ cat ~/lab_inventory/hosts +$ cat ~/lab_inventory/hosts ``` -``` +```bash [all:vars] -ansible_ssh_private_key_file=/home/student1/.ssh/aws-private.pem +ansible_ssh_private_key_file=~/.ssh/aws-private.pem [routers:children] cisco @@ -144,45 +229,108 @@ rtr4 ansible ansible_host=13.58.149.157 ansible_user=student1 private_ip=172.16.240.184 ``` -## Step 5 - -上記の出力では、すべての `[ ]` はグループを定義しています。例えば `[dc1]` はホスト `rtr1` と `rtr3` を含むグループです。グループは _ネスト_ することが可能です。`[routers]` グループは `[cisco]` の親グループになります。 - -> 親グループは `children` ディレクティブを使って宣言されます。ネストされたグループを用いると、柔軟な変数割当が可能となります。 +### ステップ 6 - インベントリーについて +上記の出力では、すべての `[ ]` がグループを定義しています。たとえば、`[dc1]` は、ホスト `rtr1` と `rtr3` +を含むグループです。グループは _ネスト_ することもできます。グループ `[routers]` はグループ `[cisco]` の親グループです -> Note: **all** というグループは常に存在し、インベントリー内で定義された全てのグループとホストを含みます。 +親グループは、`children` +ディレクティブを使用して宣言されます。ネストされたグループがあると、より具体的な値を変数に柔軟に割り当てることができます。 +グループとホストには、変数を関連付けることができます。 -変数をグループやホストへと割り当てることが可能です。 +> 注記: +> +> ** all ** というグループは常に存在し、インベントリ内で定義されたすべてのグループとホストが含まれます。 -ホスト変数はホスト自身の定義と同じ行で定義できます。例えば、`rtr1` では: +ホスト変数は、ホスト自体と同じ行で定義できます。たとえば、ホスト `rtr1` の場合: -``` +```sh rtr1 ansible_host=18.222.121.247 private_ip=172.16.129.86 ``` - - `rtr1` - Ansibleが使う名前で、DNSと連携する必要はありません。 - - `ansible_host` - Ansibleが接続に利用するIPアドレス。指定しない場合は、名前をDNSへ問い合わせます。 - - `private_ip` - ユーザーが定義した [ホスト変数](http://docs.ansible.com/ansible/latest/intro_inventory.html#host-variables) で、この値をPlaybook内で使うことができるようになります。もしくは、全く無視してしまっても問題ありません。 +* `rtr1` - Ansible が使用する名前。これは DNS に依存できますが、必須では必要ありません +* `ansible_host` - ansible が使用する IP アドレス。設定されていない場合は、デフォルトで DNS になります +* `private_ip` - この値は ansible によって予約されていないため、デフォルトで + [ホスト変数](http://docs.ansible.com/ansible/latest/intro_inventory.html#host-variables) + になります。この変数は、Playbook で使用することも、完全に無視することもできます。 -グループ変数は `vars` ディレクティブで宣言できます。グループ変数を使うと、複数のホストに共通の値を柔軟に指定できます。グループ変数は `[group_name:vars]` セクション以下で定義されます。例として `cisco` を見てみます: +グループ変数グループは、`vars` +ディレクティブを使用して宣言されます。グループを持つことで、共通の変数を複数のホストに柔軟に割り当てることができます。`[group_name:vars]` +セクションで複数のグループ変数を定義できます。たとえば、グループ `cisco` を見てください。 -``` +```sh [cisco:vars] ansible_user=ec2-user ansible_network_os=ios ansible_connection=network_cli ``` - - `ansible_user` - Ansibleがこのホスト/グループにログインするために利用するユーザー名で、設定されていない場合はデフォルトでPlaybookを実行したユーザーの名前が利用されます。 - - `ansible_network_os` - この次に定義されている `network_cli` コネクションタイプが利用される場合にこの定義は必須となります。 - - `ansible_connection` - この変数は [connection plugin](https://docs.ansible.com/ansible/latest/plugins/connection.html) をこのグループに設定します。これは `netconf`, `httpapi` `network_cli` など対象のネットワークプラットフォームがサポートしている形式を設定します。 +* `ansible_user` - ユーザー ansible + は、このホストへのログインに使用されます。設定されていない場合は、デフォルトで、プレイブックの実行元のユーザーになります。 +* `ansible_network_os` - この変数は、後で説明するように、play 定義内で `network_cli` + 接続タイプを使用するときに必要です。 +* `ansible_connection` - この変数は、このグループの + [接続プラグイン](https://docs.ansible.com/ansible/latest/plugins/connection.html) + を設定します。これは、この特定のネットワークプラットフォームがサポートするものに応じて、`netconf`、`httpapi`、`network_cli` + などの値に設定できます。 + +### ステップ 7 - ansible-navigator を使用したインベントリーの探索 + +`ansible-navigator` TUI を使用してインベントリーを調べることもできます。 + +`ansible-navigator inventory` コマンドを実行して、TUI にインベントリーを取り込みます。 + +![ansible-navigator tui](images/ansible-navigator.png) + +キーボードで **0** または **1** を押すと、それぞれグループまたはホストが開きます。 + +![ansible-navigator groups](images/ansible-navigator-groups.png) + +**Esc** キーを押して、上のレベルに移動することができます。または、個々のホストにズームできます。 + +![ansible-navigator host](images/ansible-navigator-rtr-1.png) + +### ステップ 8 - ネットワークデバイスへの接続 + +ラボ環境には、rtr1、rtr2、rtr3、rtr4 という名前の 4 +つのルーターがあります。ネットワークの図は、[ネットワーク自動化ワークショップの目次](../README.md) でいつでも利用できます。SSH +設定ファイル (`~/.ssh/config`) +はすでにコントロールノードにセットアップされています。したがって、コントロールノードから任意のルーターにログインせずに SSH で接続できます。 + +たとえば、Ansible コントロールノードから rtr1 に接続するには、次のように入力します。 + +```bash +$ ssh rtr1 +``` + +例: +``` +$ ssh rtr1 +Warning: Permanently added 'rtr1,35.175.115.246' (RSA) to the list of known hosts. -# Complete -以上で exercise 1 は終了です。 +rtr1#show ver +Cisco IOS XE Software, Version 16.09.02 +``` + +## 完了 + +ラボ演習 1 を完了しました! + +以下の内容について理解できるようになりました。 + +* Visual Studio Code を使用してラボ環境に接続する方法 +* `ansible-navigator` を使用して **実行環境** を調べる方法 +* Ansible Navigator 設定 (`ansible-navigator.yml`) が保管される場所 +* インベントリーがコマンドライン演習用に保存されている場所 +* ansible-navigator TUI(テキストベースのユーザーインターフェース)の使用方法 + + --- -[Click Here to return to the Ansible Network Automation Workshop](../README.ja.md) +[次の演習](../2-first-playbook/README.md) + +[Click Here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/2-first-playbook/README.ja.md b/exercises/ansible_network/2-first-playbook/README.ja.md index 5f5c01ae4..91f6dba8d 100644 --- a/exercises/ansible_network/2-first-playbook/README.ja.md +++ b/exercises/ansible_network/2-first-playbook/README.ja.md @@ -1,29 +1,41 @@ -# Exercise 2 - 最初のPlaybook +# 演習 2 - 初めての Ansible プレイブック -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Guide](#guide) -- [Takeaways](#takeaways) -- [Solution](#solution) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1 - Ansible Playbook の検証](#step-1---examine-ansible-playbook) + * [ステップ 2 - Ansible Playbook の実行](#step-2---execute-ansible-playbook) + * [ステップ 3 - ルーターの設定の確認](#step-3---verify-configuration-on-router) + * [ステップ 4 - べき等性の検証](#step-4---validate-idempotency) + * [ステップ 5 - Ansible Playbook の変更](#step-5---modify-ansible-playbook) + * [ステップ 6 - チェックモードの使用](#step-6---use-check-mode) + * [ステップ 7 - 設定が存在しないことの確認](#step-7---verify-configuration-is-not-present) + * [ステップ 8 - Ansible Playbook の再実行](#step-8---re-run-the-ansible-playbook) + * [ステップ 9 - 設定が適用されていることの確認](#step-9---verify-configuration-is-applied) +* [重要なこと](#takeaways) +* [ソリューション](#solution) +* [完了](#complete) -# Objective +## 目的 -ルーター設定の更新にAnsibleを利用します。この演習ではPlaybookは作成せずに、準備されたものを利用します。 +Ansible を使用して、ルーターの構成を更新します。この演習では、Ansible Playbook は作成しませんが、提供されている既存の +Playbook を使用します。 -この演習は以下を含みます。 -- 既存のPlaybookを確認します。 -- Playbook を `ansible-playbook` コマンドを使って実行します。 -- check mode (`--check` オプション) -- verbose mode (`--verbose` or `-v` オプション) +この演習では、以下について説明します。 -# Guide +* 既存の AnsiblePlaybook の検証 +* `ansible-navigator` コマンドを使用したコマンドラインでの AnsiblePlaybook の実行 +* チェックモード (`--check` パラメーター) +* 詳細モード (`--verbose` または `-v` パラメーター) -#### Step 1 +## ガイド -`network-workshop` ディレクトリを移動してください(別のディレクトリにいる場合) +### ステップ 1 - Ansible Playbook の検証 + +`network-workshop` ディレクトリーに移動していない場合は、移動します。 ```bash [student1@ansible ~]$ cd ~/network-workshop/ @@ -32,10 +44,10 @@ /home/student1/network-workshop ``` -演習用に提供される `playbook.yml`を確認します。好きなエディタでこのファイルを開いてください。以下の例では `cat` コマンドを利用しています。 +`playbook.yml` という名前の提供された Ansible Playbook を調べます。Visual Studio Code +でファイルを開くか、または `cat` でファイルの中身を表示します。 -``` -[student1@ansible network-workshop]$ cat playbook.yml +```yaml --- - name: snmp ro/rw string configuration hosts: cisco @@ -44,28 +56,30 @@ tasks: - name: ensure that the desired snmp strings are present - ios_config: + cisco.ios.config: commands: - snmp-server community ansible-public RO - snmp-server community ansible-private RW ``` - - `cat` - ファイルの内容を確認するコマンド - - `playbook.yml` - 演習で提供されるPlaybook +* `cat` - ファイルの内容を表示できる Linux コマンド +* `playbook.yml` - 提供された Ansible Playbook -次の演習でPlaybookの詳細については確認します。ここではこのPlaybookで2つのCisco IOS-XEコマンドが実行されることが確認できれば十分です。 +次の演習では、Ansible Playbook のコンポーネントについて詳しく説明します。今のところ、このハンドブックが 2 つの +CiscoIOS-XE コマンドを実行することを確認するだけで十分です。 -``` +```sh snmp-server community ansible-public RO snmp-server community ansible-private RW ``` -#### Step 3 +### ステップ 2 - Ansible Playbook の実行 -`ansible-playbook` コマンドを使ってこのPlaybookを実行します: +`ansible-navigator` コマンドを使用して Playbook を実行します。完全なコマンドは ``ansible-navigator +run playbook.yml --mode stdout`` です ```bash -[student1@ansible network-workshop]$ ansible-playbook playbook.yml +[student1@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout PLAY [snmp ro/rw string configuration] ***************************************** @@ -73,12 +87,19 @@ TASK [ensure that the desired snmp strings are present] ************************ changed: [rtr1] PLAY RECAP ********************************************************************* -rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + +[student1@ansible-1 network-workshop]$ ``` -#### Step 4 +* `--mode stdout` - デフォルトでは、`ansible-navigator` は対話モードで実行されます。デフォルトの動作は + `ansible-navigator.yml` を変更することで変更できます。Playbook + が長くなり複数のホストが関係するようになると、対話モードではデータをリアルタイムに「ズームイン」し、絞り込み、さまざまな Ansible + コンポーネント間の移動を行うことができます。このタスクは、1 つのホストで 1 つのタスクのみを実行するため、`stdout` で十分です。 -このPlaybookの動きを確認します。`rtr1`へログインし、Cisco IOS-XE上で実行中のコンフィグを確認します。 +### ステップ 3 - ルーターの設定の確認 + +Ansible Playbook が機能したことを確認します。`rtr1` にログインし、CiscoIOS-XE デバイスで実行設定を確認します。 ```bash [student1@ansible network-workshop]$ ssh rtr1 @@ -88,51 +109,51 @@ snmp-server community ansible-public RO snmp-server community ansible-private RW ``` +### ステップ 4 - べき等性の検証 -#### Step 5 - -`ios_config` モジュールは冪等性を持ちます。つまり、コンフィグの変更がエンドホストに存在しない場合にだけ、コンフィグがデバイスにプッシュされることを意味します。 +`cisco.ios.config` +モジュールはべき等です。つまり、構成の変更は、その構成がエンドホストに存在しない場合にのみ、デバイスにプッシュされます。 ->Ansible Automation の用語(冪等性のような単語)の説明が必要な場合は [glossary](https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html) で確認することができます。 +> Ansible Automation の用語についてサポートが必要ですか? +> +> べき等性などの用語について詳しく知るには、[用語集](https://docs.ansible.com/ansible/latest/reference_appendices/glossary.html) を確認してください。 -冪等性を確認するには、Playbookを再実行します: +冪等性の概念を検証するには、Playbook を再実行します。 ```bash -[student1@ansible network-workshop]$ ansible-playbook playbook.yml +[student1@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout -PLAY [snmp ro/rw string configuration] ************************************************************************************** +PLAY [snmp ro/rw string configuration] ***************************************** -TASK [ensure that the desired snmp strings are present] ********************************************************************* +TASK [ensure that the desired snmp strings are present] ************************ ok: [rtr1] -PLAY RECAP ****************************************************************************************************************** +PLAY RECAP ********************************************************************* rtr1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 - -[student1@ansible network-workshop]$ ``` -> Note: **PLAY RECAP** の中の **changed** パラメーターが changed=0 であることを確認してください。 - -このPlaybookを複数回実行しても、結果は **ok=1** **change=0** と毎回同じになります。別のオペレーターやプロセスが rtr1 の設定を削除、変更をしない限り、このPlaybookはネットワークデバイス上で正しく設定が投入されていることを示す **ok=1** を通知し続けます。 +> 注意: +> +> **PLAY RECAP** の **changed** パラメーターが変更がないことを示していることを確認してください。 +Ansible Playbook を複数回再実行すると、**ok=1** と **change=0** +で、まったく同じ出力になります。別のオペレーターまたはプロセスが rtr1 の既存の設定を削除または変更しない限り、この AnsiblePlaybook +は **ok=1** を報告し続け、設定が既に存在し、ネットワークデバイスで正しく構成されていることを示します。 -#### Step 6 +### ステップ 5 - Ansible Playbook の変更 -ここで `ansible-test` というコミュニティ名を追加するようにタスクを更新します。 +次に、タスクを更新して、`ansible-test` という名前の SNMPRO コミュニティ文字列をもう 1 つ追加します。 -``` +```sh snmp-server community ansible-test RO ``` -好きなテキストエディタで `playbook.yml` を開いて、コマンドを追加します: +Visual Studio Code を使用して `playbook.yml` ファイルを開き、コマンドを追加します。 -```bash -[student1@ansible network-workshop]$ nano playbook.yml -``` -Playbookは以下のようになります: +Ansible Playbook は次のようになります。 -``` yaml +```yaml --- - name: snmp ro/rw string configuration hosts: cisco @@ -141,43 +162,40 @@ Playbookは以下のようになります: tasks: - name: ensure that the desired snmp strings are present - ios_config: + cisco.ios.config: commands: - snmp-server community ansible-public RO - snmp-server community ansible-private RW - snmp-server community ansible-test RO ``` -#### Step 7 +必ず、変更を加えた `playbook.yml` を保存します。 -ここでは、このPlaybookを実行してデバイスのコンフィグを更新する代わりに、`--check` オプションと `-v(--verbose)` の冗長出力モードを組み合わせて実行します。 +### ステップ 6 - チェックモードの使用 +ただし、今回は、Playbook を実行して変更をデバイスにプッシュする代わりに、`--check` フラグを `-v` +または冗長モードフラグと組み合わせて使用して実行します。 ```bash -[student1@ansible network-workshop]$ ansible-playbook playbook.yml --verbose --check -Using /home/student1/.ansible.cfg as config file +[student1@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout --check -v +Using /etc/ansible/ansible.cfg as config file PLAY [snmp ro/rw string configuration] ***************************************** TASK [ensure that the desired snmp strings are present] ************************ -changed: [rtr1] => changed=true - ansible_facts: - discovered_interpreter_python: /usr/bin/python - banners: {} - commands: - - snmp-server community ansible-test RO - updates: - - snmp-server community ansible-test RO +changed: [rtr1] => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "banners": {}, "changed": true, "commands": ["snmp-server community ansible-test RO"], "updates": ["snmp-server community ansible-test RO"], "warnings": ["To ensure idempotency and correct diff the input configuration lines should be similar to how they appear if present in the running configuration on device"]} PLAY RECAP ********************************************************************* rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -`--check` と `--verbose` を組み合わせると、実際にデバイス対して更新を行うことなく、どのような変更が行われるのかを確認することができます。これは、実際に更新を行う前に、変更内容を検証するのに最適な方法です。 +`--check` モードと `--verbose` +フラグを組み合わせると、実際に変更をプッシュすることなく、エンドデバイスにデプロイされる正確な変更が表示されます。これは、デバイスをプッシュする前に、デバイスにプッシュしようとしている変更を検証するための優れた手法です。 -#### Step 8 +### ステップ 7 - 設定が存在しないことの確認 -`ansible-test` コミュニティが作成されていないことを確認します。`rtr1` へログインして、コンフィグ内容を確認してください。 +Ansible Playbook が `ansible-test` コミュニティーを適用していないことを確認します。`rtr1` +にログインし、CiscoIOS-XE デバイスの実行設定を確認します。 ```bash [student1@ansible network-workshop]$ ssh rtr1 @@ -187,26 +205,26 @@ snmp-server community ansible-public RO snmp-server community ansible-private RW ``` +### ステップ 8 - Ansible Playbook の再実行 -#### Step 9 - -最後に、このPlaybookを `-v` `--check` オプションなしで再実行して、更新をプッシュします。 +最後に、変更をプッシュするために、`-v` または `--check` フラグを指定せずにこの Playbook を再実行します。 ```bash -[student1@ansible network-workshop]$ ansible-playbook playbook.yml +[student1@ansible-1 network-workshop]$ ansible-navigator run playbook.yml --mode stdout PLAY [snmp ro/rw string configuration] ***************************************** TASK [ensure that the desired snmp strings are present] ************************ changed: [rtr1] -PLAY RECAP ****************************************************************************************************************** +PLAY RECAP ********************************************************************* rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -#### Step 10 +### ステップ 9 - 設定が適用されていることの確認 -Playbookが設定した `ansible-test` コミュニティを確認します。`rtr1` へログインして、コンフィグ内容を確認してください。 +Ansible Playbook が **ansible-test** コミュニティーを適用したことを確認します。`rtr1` +にログインし、CiscoIOS-XE デバイスの実行設定を確認します。 ```bash [student1@ansible network-workshop]$ ssh rtr1 @@ -217,21 +235,26 @@ snmp-server community ansible-private RW snmp-server community ansible-test RO ``` -# Takeaways +## 重要なこと -- ***os_config** (例えば ios_config) モジュールは冪等性を持ち、ステートフルです。 -- **check mode** はリモートシステムを変更せずにPlaybookを確認できる。 -- **verbose mode** は端末に多くの情報を表示し、そこにはどのようなコマンドが適用されるかが含まれている。 -- Playbook は設定を強制するために **Red Hat Ansible Tower** からスケジュールすることが可能です。例えば、特定のネットワークに1日1回Playbookを実行するなどです。また **check mode** と組み合わせ利用すると、ネットワークの設定が変更されたり削除された場合に、それを確認したりレポートすることも可能になります。 +* **config** (例:cisco.ios.config) モジュールはべき等であり、ステートフルであることを意味します +* **check mode** により、Ansible Playbook がリモートシステムに変更を加えなくなります +* **verbose mode** を使用すると、適用されるコマンドを含め、ターミナルウィンドウへの出力をより多く表示できます。 +* この AnsiblePlaybook は、構成を実施するために **自動コントローラー** でスケジュールできます。たとえば、これは、Ansible + Playbook を特定のネットワークに対して 1 日 1 回実行できることを意味します。**check mode**と + 組み合わせると、ネットワーク上で設定が欠落しているか変更されているかどうかを確認して報告する、読み取り専用の Ansible Playbook + となります。 -# Solution +## ソリューション -完成したPlaybookはここから参照できます: [playbook.yml](../playbook.yml). +こちらには、完成した Ansible Playbook があります [playbook.yml](../playbook.yml)。 ---- +## 完了 -# Complete +ラボ演習 2 を完了しました -以上で exercise 2 は終了です。 +--- +[前の演習](../1-explore/README.md) | [次の演習](../3-facts/README.md) -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/3-facts/README.ja.md b/exercises/ansible_network/3-facts/README.ja.md index 36bc2e241..f919a1994 100644 --- a/exercises/ansible_network/3-facts/README.ja.md +++ b/exercises/ansible_network/3-facts/README.ja.md @@ -1,56 +1,111 @@ -# Exercise 3: Ansible Facts の利用 +# 演習 3: Ansible ファクト -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Guide](#guide) -- [Takeaways](#takeaways) -- [Solution](#solution) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1 - ドキュメントの使用](#step-1---using-documentation) + * [ステップ 2 - プレイの作成](#step-2---creating-the-play) + * [ステップ 3 - ファクトタスクの作成](#step-3---create-the-facts-task) + * [ステップ 4 - Playbook の実行](#step-4---executing-the-playbook) + * [ステップ 5 - デバッグモジュールの使用](#step-5---using-debug-module) + * [ステップ 6 - stdout の使用](#step-6---using-stdout) +* [重要なこと](#takeaways) +* [ソリューション](#solution) +* [完了](#complete) -# Objective +## 目的 -ネットワーク機器に対する Ansible facts の利用を説明します。 +ネットワークインフラストラクチャでの Ansible ファクトのデモンストレーション使用。 -Ansible facts はリモートのネットワーク構成要素から取得される情報です。Ansible facts は利用が容易な構造化(JSON)されたデータを返します。例えば、Ansible Facts と Template 機能を使うと迅速にMarkdownやHTML形式の監査レポートを作成することが可能です。 +Ansible ファクトは、リモートネットワーク要素との会話から得られた情報です。Ansible ファクトは構造化データ (JSON) +で返されるため、操作や変更が簡単になります。たとえば、ネットワークエンジニアは、Ansible +ファクトを使用して監査レポートを非常に迅速に作成し、それらをマークダウンまたは HTML ファイルにテンプレート化できます。 -この演習は以下を含みます。: -- Playbookをスクラッチから作成します。 -- [ansible-doc](https://docs.ansible.com/ansible/latest/cli/ansible-doc.html) の利用 -- [ios_facts モジュール](https://docs.ansible.com/ansible/latest/modules/ios_facts_module.html) の利用 -- [debug モジュール](https://docs.ansible.com/ansible/latest/modules/debug_module.html) の利用。 +この演習では、以下について説明します。 -# Guide +* Ansible Playbook のゼロからの作成。 +* ドキュメントへの `ansible-navigator :doc` の使用 +* [cisco.ios.facts + モジュール](https://docs.ansible.com/ansible/latest/collections/cisco/ios/ios_facts_module.html) + の使用。 +* [デバッグモジュール](https://docs.ansible.com/ansible/latest/modules/debug_module.html) + の使用。 -#### Step 1 +## ガイド -コントローラーノード上で `ios_facts` モジュールと `debug` モジュールのドキュメントを確認します。 +### ステップ 1 - ドキュメントの使用 + +端末で `ansible-navigator` インタラクティブモードに入ります ```bash -[student1@ansible network-workshop]$ ansible-doc debug +$ ansible-navigator ``` -`debug` を任意のパラメーター無しで利用するとどうなるか確認してください。 +`ansible-navigator` のスクリーンショット: ![ansible-navigator interactive +mode](images/ansible-navigator-interactive.png) -```bash -[student1@ansible network-workshop]$ ansible-doc ios_facts +上記のスクリーンショットでは、モジュールまたはプラグインドキュメントの行を確認できます。 + ``` +`:doc ` Review documentation for a module or plugin + ``` -収集する Facts 情報に制限を書ける方法を確認してください。 +`:doc debug` と入力して `debug` モジュールを検証しましょう。 +```bash +:doc debug +``` -#### Step 2: +`ansible-navigator :doc debug` のスクリーンショット: ![ansible-navigator interactive +mode doc](images/ansible-navigator-doc.png) -Playbooks は [**YAML**](https://yaml.org/) 形式です。YAML は構造化されたフォーマットで可読性に優れます(JSON と違って) +`debug` +モジュールのドキュメントが対話式ターミナルセッションに表示されました。これは、[docs.ansible.com](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/debug_module.html). +で表示されるまったく同じドキュメントの YAML 表現です。例は、モジュールのドキュメントから Ansible Playbook +に直接カットアンドペーストできます。 -好きなエディタを使って新しいファイル `facts.yml` を作成してください (`vim` と `nano` がコントローラーホストで利用可能です) : +ビルドされていないモジュールを参照する場合、以下の 3 つの重要なフィールドがあります。 ``` -[student1@ansible network-workshop]$ vim facts.yml +namespace.collection.module +``` +例: ``` +cisco.ios.facts +``` + +用語の説明: - **namespace** (例: **cisco**) - namespace +は複数のコレクションをグループ化します。**cisco** namespace には、**ios**、**nxos**、**iosxr** +を含む複数のコレクションが含まれます。 - **collection** (例: **ios**) - collection +は、Playbook、ロール、モジュール、プラグインを含む Ansible コンテンツのディストリビューション形式です。**ios** +コレクションには、Cisco IOS/IOS-XE の全モジュールが含まれます。 - **module** (例: facts) - +モジュールは、Playbook タスクで使用できるコードの分散ユニットです。たとえば、**facts** +モジュールは、指定されたそのシステムに関する構造化データを返します。 + +**Esc** キーを押してメインメニューに戻ります。`cisco.ios.facts` モジュールで `:doc` コマンドを繰り返します。 -`facts.yml` に以下の Play 定義を入力します: +```bash +:doc cisco.ios.facts +``` + +Playbook で facts モジュールを使用します。 + +### ステップ 2 - プレイの作成 + +Ansible Playbook は [**YAML** ファイル](https://yaml.org/) です。YAML +は構造化されたエンコーディング形式であり、人間が非常に読みやすくなっています (サブセットとは異なり、JSON 形式) 。 + +Visual Studio コードで新規ファイルを作成します: ![vscode new +file](images/vscode_new_file.png) + +分かりやすくするために、Playbook に `facts.yml` という名前を付けます: ![vscode save +file](images/vscode_save_as.png) + + +次のプレイ定義を `facts.yml` に入力します。 ```yaml --- @@ -59,17 +114,18 @@ Playbooks は [**YAML**](https://yaml.org/) 形式です。YAML は構造化さ gather_facts: no ``` -各行の意味: -- 1行目の `---` は、これが YAML ファイルであることを示します。 -- `- name:` キーはこのPlaybookの説明を記述しています。 -- `hosts:` キーは、このPlaybookがインベントリーファイル内の `cisco` グループを対象することを意味します。 -- `gather_facts: no` は Ansible 2.8 か以前のバージョンから必要となります。自動で Fact を収集する機能ですが、この機能は Linux ホストのみで利用可能で、ネットワーク環境では利用できません。ネットワーク環境では別の方法で Facts の収集を行います。 +各行の説明は次のとおりです。 +* 最初の行の `---` は、これが YAML ファイルであることを示しています。 +* `- name:` キーワードは、この Ansible Playbookのオプションの説明です。 +* `hosts:` キーワードは、インベントリーファイルで定義されたグループ `cisco` に対するこのプレイブックを意味します。 +* `gather_facts: no` は必要ありません。これは、Ansible 2.8 以前では、これは Linux + ホストでのみ機能し、ネットワークインフラストラクチャーでは機能しないためです。特定のモジュールを使用して、ネットワーク機器の事実を収集します。 -#### Step 3 - -次に最初の `task` を追加します。このタスクでは `cisco` グループ内の各デバイスから `ios_facts` モジュールを使って Facts を収集します。 +### ステップ 3 - ファクトタスクの作成 +次に、最初の `task` を追加します。このタスクでは、`cisco.ios.facts` モジュールを使用して、グループ `cisco` +内の各デバイスに関するファクトを収集します。 ```yaml --- @@ -79,84 +135,47 @@ Playbooks は [**YAML**](https://yaml.org/) 形式です。YAML は構造化さ tasks: - name: gather router facts - ios_facts: -``` - ->play は task のリストです。モジュールは事前に準備されたプログラムでタスクから実行されます。 - -#### Step 4 - -この Playbook を実行します: - -``` -[student1@ansible network-workshop]$ ansible-playbook facts.yml + cisco.ios.facts: ``` -出力は以下のようになるはずです。 +> 注記: +> +> プレイはタスクのリストです。モジュールは、そのタスクを実行する、事前に記述されたコードです。 -```bash -[student1@ansible network-workshop]$ ansible-playbook facts.yml +Playbook を保存します。 -PLAY [gather information from routers] ***************************************** +### ステップ 4 - Playbook の実行 -TASK [gather router facts] ***************************************************** -ok: [rtr1] +`ansible-navigator` を実行して Ansible Playbook を実行します。 -PLAY RECAP ****************************************************************************************************************** -rtr1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +```sh +$ ansible-navigator run facts.yml ``` +これにより、Playbook が対話する間に対話セッションが開きます。 -#### Step 5 +facts.yml のスクリーンショット: ![ansible-navigator run +facts.yml](images/ansible-navigator-facts.png) -この play は Cisco ルーターに対して実行されて成功したはずです。しかし、出力はどこへ行ったのでしょうか?この playbook を冗長出力モードの `-v` オプションをつけて再実行してください。 +Playbook の出力をズームするには、**0** を押して、ホスト中心ビューを表示します。ホストは 1 つしかないため、オプションは 1 +つのみです。 +ズームインのスクリーンショット: ![ansible-navigator zoom +hosts](images/ansible-navigator-hosts.png) -``` -[student1@ansible network-workshop]$ ansible-playbook facts.yml -v -Using /home/student1/.ansible.cfg as config file - -PLAY [gather information from routers] ***************************************** - -TASK [gather router facts] ***************************************************** -ok: [rtr1] => changed=false - ansible_facts: - ansible_net_all_ipv4_addresses: - - 192.168.35.101 - - 172.16.129.86 - - 192.168.1.101 - - 10.1.1.101 - - 10.200.200.1 - - 10.100.100.1 -. -. - -. -. - ansible_net_iostype: IOS-XE - ansible_net_memfree_mb: 1853993 - ansible_net_memtotal_mb: 2180495 - ansible_net_neighbors: {} - ansible_net_python_version: 2.7.5 - ansible_net_serialnum: 91Y8URJWFPU - ansible_net_system: ios - ansible_net_version: 16.09.02 - discovered_interpreter_python: /usr/bin/python - -PLAY RECAP ********************************************************************* -rtr1 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 -``` +**rtr1** の詳細出力を表示するには、**0** をあと 1 回押してモジュールの戻り値をズームします。 +モジュールデータへのズームインのスクリーンショット: ![ansible-navigator zoom +module](images/ansible-navigator-module.png) -> Note: 出力は後続のタスクで使用できる key-value のペアで返されます。ここで取得された **ansible_** で始まる全ての変数は、同じ play 内の後続のタスクで自動的に利用可能になります。 +スクロールダウンして、Cisco ネットワークデバイスから収集したファクトを表示できます。 -#### Step 6 +### ステップ 5 - デバッグモジュールの使用 -Playbook を冗長モードで実行するのは変数を確認するのに便利です。変数をPlaybookで利用するには `debug` モジュールが利用できます。 - -2つのタスクを追加し、ルーターのOSバージョンとシリアルナンバーを表示します。 +ルーターの OS バージョンとシリアル番号を表示する 2 つの追加タスクを記述します。 + ``` yaml --- - name: gather information from routers @@ -165,7 +184,7 @@ Playbook を冗長モードで実行するのは変数を確認するのに便 tasks: - name: gather router facts - ios_facts: + cisco.ios.facts: - name: display version debug: @@ -175,51 +194,44 @@ Playbook を冗長モードで実行するのは変数を確認するのに便 debug: msg: "The serial number is:{{ ansible_net_serialnum }}" ``` - - - -#### Step 8 -では `冗長出力モード` オプションを利用せずに、再度Playbookを実行します: - -``` -[student1@ansible network-workshop]$ ansible-playbook facts.yml + -PLAY [gather information from routers] ************************************************************************************** +### ステップ 6 - stdout の使用 -TASK [gather router facts] ************************************************************************************************** -ok: [rtr1] +次に、`ansible-navigator` と `--mode stdout` を使用して Playbook を再実行します -TASK [display version] ****************************************************************************************************** -ok: [rtr1] => - msg: 'The IOS version is: 16.09.02' +完全なコマンドは `ansible-navigator run facts.yml --mode stdout` です -TASK [display serial number] ************************************************************************************************ -ok: [rtr1] => - msg: The serial number is:91Y8URJWFPU +stdout を使用した ansible-navigator のスクリーンショット: ![ansible-navigator stdout +screenshot](images/ansible-navigator-facts-stdout.png) -PLAY RECAP ****************************************************************************************************************** -rtr1 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 -``` +20 行未満の "code" +を使用すると、バージョンとシリアル番号の収集が自動化されます。これを本番ネットワークに対して実行していたと想像してみてください。古くなっていない実用的なデータが手元にあります。 -20行以下の "code" を使ってバージョンとシリアルナンバーの収集を自動化しました。このPlaybookを本番ネットワークに対して実行することを想像してください。古くなったデータではなく、最新の利用可能なデータを入手することができます。 +## 重要なこと -# Takeaways +* `ansible-navigator :doc` + コマンドを使用すると、インターネットに接続していなくてもドキュメントにアクセスできます。このドキュメントは、コントロールノードの Ansible + のバージョンとも一致します。 +* https://docs.ansible.com/ansible/latest/collections/cisco/ios/ios_config_module.html) + は、Cisco IOS に固有の構造化データを収集します。各ネットワークプラットフォームに関連するモジュールがあります。たとえば、Juniper + Junos には junos_facts があり、AristaEOS には eos_facts があります。 +* [デバッグモジュール](https://docs.ansible.com/ansible/latest/modules/debug_module.html) + を使用すると、Ansible Playbook でターミナルウィンドウに値を出力できます。 -- [ansible-doc](https://docs.ansible.com/ansible/latest/cli/ansible-doc.html) コマンドはインターネット接続なしにドキュメントを確認できます。このドキュメントはコントローラーノードのAnsibleバージョンと同じです。 -- [ios_facts モジュール](https://docs.ansible.com/ansible/latest/modules/ios_config_module.html) は Cisco IOS から構造化されたデータを収集します。それぞれのネットワークプラットフォームごとに関連するモジュールがあります。例えば、 `junos_fact` は Juniper Junos のためのモジュールで、`eos_fact` は Arista EOS用です。 -- [debug モジュール](https://docs.ansible.com/ansible/latest/modules/debug_module.html) はPlaybookから端末に値を表示することができます。 +## ソリューション +完成した AnsiblePlaybook は、回答キーとしてここに提供されています: [facts.yml](facts.yml)。 -# Solution +## 完了 -完成したPlaybookはここから参照できます: [facts.yml](facts.yml). +ラボ演習 3 を完了しました --- +[前の演習](../2-first-playbook/README.md) | +[次の演習](../4-resource-module/README.md) -# Complete - -以上で exercise 3 は終了です。 - -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/4-resource-module/README.ja.md b/exercises/ansible_network/4-resource-module/README.ja.md new file mode 100644 index 000000000..dc9512df6 --- /dev/null +++ b/exercises/ansible_network/4-resource-module/README.ja.md @@ -0,0 +1,376 @@ +# 演習 4: Ansible ネットワークリソースモジュール + +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md) + +If you are using an **all Cisco workbench** (all four routers are Cisco IOS +routers) please [switch to these +directions](../supplemental/4-resource-module-cisco/README.md). + +## 目次 + + * [目的](#objective) + * [ガイド](#guide) + * [ステップ 1 - VLAN 設定の確認](#step-1---verify-vlan-configuration) + * [ステップ 2 - Ansible Playbook + の作成](#step-2---creating-the-ansible-playbook) + * [ステップ 3 - Ansible Playbook + の検証](#step-3---examine-the-ansible-playbook) + * [ステップ 4 - Ansible Playbook + の実行](#step-4---execute-the-ansible-playbook) + * [ステップ 5 - VLAN 設定の確認](#step-5---verify-vlan-configuration) + * [ステップ 6 - 収集したパラメーターの使用](#step-6---using-the-gathered-parameter) + * [ステップ 7 - 収集した Playbook の実行](#step-7---execute-the-gathered-playbook) + * [ステップ 8 - ファイルの検証](#step-8---examine-the-files) + * [重要なこと](#takeaways) + * [ソリューション](#solution) + * [完了](#complete) + +## 目的 + +[Ansible +ネットワークリソースモジュール](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) +のデモ使用 + +Ansible +ネットワークリソースモジュールは、さまざまなネットワークデバイスの管理方法を簡素化し、標準化します。ネットワークデバイスは、ネットワークサービスに適用されるセクション +(インターフェースや VLAN など) に設定を分割します。 + +ネットワークリソースモジュールは、異なるネットワークデバイス間で一貫したエクスペリエンスを提供します。つまり、複数のベンダーで同一のエクスペリエンスが得られます。たとえば、**VLAN** +モジュールは、以下のモジュールで同じように動作します。 + +* `arista.eos.vlans` +* `cisco.ios.vlans` +* `cisco.nxos.vlans` +* `cisco.iosxr.vlans` +* `junipernetworks.junos.vlans` + +[VLAN](https://en.wikipedia.org/wiki/Virtual_LAN) +をネットワークデバイスで設定することは非常に一般的なタスクであり、設定ミスは頭痛の種で、ネットワーク障害の原因になります。また、VLAN +設定は複数のネットワークスイッチで同じになるため、自動化の優れたユースケースです。 + +この演習では、以下について説明します。 + +* Arista EOS での VLAN の設定 +* [arista.eos.vlans + モジュール](https://docs.ansible.com/ansible/latest/collections/arista/eos/eos_vlans_module.html) + を使用した Ansible Playbook の構築 +* `state: merged` の概要 +* `state: gathered` の概要 + +## ガイド + +### ステップ 1 - VLAN 設定の確認 + +* Arista スイッチにログインし、現在の VLAN 設定を確認します。 + +* コントロールノードターミナルから、`ssh rtr2` に続いて `enable` と入力します。 + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* `show vlan` コマンドを使用して、VLAN 設定を検証します。 + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + ``` + +* `show run | s vlan` を使用して、Arista デバイスの VLAN running-confgiuration を検証します。 + + ```bash + rtr2#show run | s vlan + rtr2# + ``` + +上記の出力では、デフォルトの VLAN 1(どのポートも割り当てられていない)以外の VLAN 設定はないことが分かります。 + +### ステップ 2 - Ansible Playbook の作成 + +* Visual Studio Code で `resource.yml` という名前の新規ファイルを作成します。 + + ![new file](images/step1_new_file.png) + +* 以下の Ansible Playbook を `resource.yml` にコピーします。 + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: merged + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + +* 設定は、Visual Studio Code で以下のようになります。 + + ![picture of vs code setup](images/setup_vs_code.png) + +### ステップ 3 - Ansible Playbook の検証 + +* まず、最初の 4 行を検証してみましょう。 + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + ``` + + * `---`: これが Playbook を作成する [YAML](https://en.wikipedia.org/wiki/YAML) + ファイルであることを指定します。 + * `name`: この Playbook が実行する内容の説明です。 + * `hosts: arista`: Playbook が Arista ネットワークデバイスでのみ実行されることを意味します。 + * `gather_facts: false`: このプレイのファクト収集を無効にします。デフォルトでは有効になっています。 + + +* 後半には、`arista.eos.vlans` を使用するタスクが 1 つあります。 + + ```yaml + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: merged + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + + * `name:` - プレイと同様に、各タスクにはその特定のタスクの説明があります。 + * `state: merged` - + リソースモジュールのデフォルト動作です。これにより、提供された設定がネットワークデバイスに存在することを強制します。リソースモジュールには実際には + 7 つのパラメーターがあります。 + * merged + * replaced + * overridden + * deleted + * rendered + * gathered + * parsed + + この演習では、これらのパラメーターの中の 2 つのみについて説明しますが、それ以外に [追加の演習](../supplemental/README.md) に説明があります。 + * `config:` - これは提供された VLAN 設定です。これはディクショナリーのリストです。最も重要なのは、モジュールが `arista.eos.vlans` から `junipernetworks.junos.vlans` に変更されると、同じ動作になることです。これにより、ネットワークエンジニアは、ベンダー構文や実装よりもネットワーク(VLAN 設定など)にフォーカスできるようになります。 + +### ステップ 4 - Ansible Playbook の実行 + +* `ansible-navigator run` を使用して Playbook を実行します。タスクは 1 つしかないため、`--mode + stdout` を使用できます。 + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* 出力は以下のようになります。 + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + changed: [rtr4] + changed: [rtr2] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Playbook を再実行すると、[べき等性](https://en.wikipedia.org/wiki/Idempotence) + の概念が示されます + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr2] + ok: [rtr4] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* 出力で分かるように、すべてのものが `ok=1` を返し、変更が行われていないことを示します。 + +### ステップ 5 - VLAN 設定の確認 + +* Arista スイッチにログインし、現在の VLAN 設定を確認します。 + +* コントロールノードターミナルから、`ssh rtr2` に続いて `enable` と入力します。 + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* `show vlan` コマンドを使用して、VLAN 設定を検証します。 + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 desktops active + 30 servers active + 40 printers active + 50 DMZ active + ``` + +* `show run | s vlan` を使用して、Arista デバイスの VLAN running-confgiuration を検証します。 + + ```bash + rtr2#sh run | s vlan + vlan 20 + name desktops + ! + vlan 30 + name servers + ! + vlan 40 + name printers + ! + vlan 50 + name DMZ + ``` + +リソースモジュールは、指定された設定で Arista EOS ネットワークデバイスを設定したことが分かります。現在、合計 5 つの +VLAN(デフォルトの vLAN 1 を含む)があります。 + +### ステップ 6 - 収集したパラメーターの使用 + +* `gathered.yml` という名前の新しい Playbook を作成します。 + + + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: gathered + register: vlan_config + + - name: copy vlan_config to file + copy: + content: "{{ vlan_config | to_nice_yaml }}" + dest: "{{ playbook_dir }}/{{ inventory_hostname }}_vlan.yml" + ``` + + +* `state: merged` が `gathered` + に切り替えられていることを除き、最初のタスクは同一です。設定で読み取っているので(ネットワークデバイスに適用する代わりに)、`config` + は必要ありません。`register` を使用して、モジュールからの出力を `vlan_config` という名前の変数に保存します + +* 2 つ目のタスクは、`vlan_config` 変数をフラットファイルにコピーします。二重の中かっこは、これが変数であることを示します。 + +* `| to_nice_yaml` は + [フィルター](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html) + で、JSON 出力(デフォルト)を YAML に変換します。 + +* `playbook_dir` および `inventory_hostname` + は、[マジック変数](https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html) + とも呼ばれる特別な変数です。`playbook_dir` は、Playbook + を実行したディレクトリーを意味し、`inventory_hostname` はインベントリー内のデバイスの名前です。つまり、2 つの Arista + デバイスについて、ファイルは `~/network-workshop/rtr2_vlan.yml` および + `~/network-workshop/rtr4_vlan.yml` として保存されます。 + +### ステップ 7 - 収集した Playbook の実行 + +* `ansible-navigator run` を使用して Playbook を実行します。 + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + ``` + +* 出力は以下のようになります。 + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] + ok: [rtr2] + + TASK [copy vlan_config to file] ************************************************ + changed: [rtr2] + changed: [rtr4] + + PLAY RECAP ********************************************************************* + rtr2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +### ステップ 8 - ファイルの検証 + +* Arista ネットワークデバイスから VLAN 設定を `収集した` 新規作成ファイルを開きます。 + +* 2 つの Arista デバイスについて、2 つのファイルが `~/network-workshop/rtr2_vlan.yml` および + `~/network-workshop/rtr4_vlan.yml` に保存されました。 + +* スクリーンショットを以下に示します。 + + ![examine vlan yml](images/step8_examine.png) + +## 重要なこと + +* リソースモジュールは、ネットワークデバイス構文に変換できる単純なデータ構造を持ちます。この場合、VLAN ディクショナリーは Arista EOS + ネットワークデバイス構文に変換されます。 +* リソースモジュールはべき等で、デバイスの状態を確認するように設定できます。 +* リソースモジュールは双方向です。つまり、リソースモジュールはその特定のリソースのファクトを収集すると共に、設定を適用することができます。リソースモジュールを使用してネットワークデバイスを設定していない場合でも、リソースの状態をチェックする価値がたくさんあります。 +* また、双方向の動作により、ブラウンフィールドネットワーク(既存のネットワーク)は、running-configuration + を構造化データに迅速に変換することもできます。これにより、ネットワークエンジニアは自動化をより迅速に運用に移行し、すばやく成功させることができます。 + +## ソリューション + +完成した AnsiblePlaybook は、回答キーとしてここで提供されています。 + +- [resource.yml](resource.yml) - [gathered.yml](gathered.yml) + +## 完了 + +ラボ演習 4 を完了しました + +前述したように、この演習では 2 つのリソースモジュールパラメーターのみが対象ですが、それ以外に +[追加の演習](../supplemental/README.md) に説明があります。 + +次の演習では、自動コントローラーの使用を開始します。 +--- +[前の演習](../3-facts/README.md) | [次の演習](../5-explore-controller/README.md) + +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/5-explore-controller/README.ja.md b/exercises/ansible_network/5-explore-controller/README.ja.md index dbbad0f07..adb3103ac 100644 --- a/exercises/ansible_network/5-explore-controller/README.ja.md +++ b/exercises/ansible_network/5-explore-controller/README.ja.md @@ -1,147 +1,176 @@ -# Exercise 5: Ansible Tower 環境の確認 +# 演習 5: 自動コントローラーの探索 -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Guide](#guide) - - [Step 1: Login to Ansible Tower](#step-1-login-to-ansible-tower) - - [Step 2: Examine the Ansible Tower Inventory](#step-2-examine-the-ansible-tower-inventory) - - [Step 3: Examine the Ansible Tower Workshop Project](#step-3-examine-the-ansible-tower-workshop-project) - - [Step 4: Examine the Ansible Tower Workshop Credential](#step-4-examine-the-ansible-tower-workshop-credential) -- [Takeaways](#takeaways) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1: 自動コントローラーへのログイン](#step-1-login-to-automation-controller) + * [ステップ 2: + 自動コントローラーインベントリーの検証](#step-2-examine-the-automation-controller-inventory) + * [ステップ 3: + 自動コントローラーワークショッププロジェクトの検証](#step-3-examine-the-automation-controller-workshop-project) + * [ステップ 4: + 自動コントローラーワークショップ認証情報の検証](#step-4-examine-the-automation-controller-workshop-credential) +* [重要なこと](#takeaways) +* [完了](#complete) -# Objective +## 目的 -演習環境を確認します。本演習は以下を含みます。 -- コントローラーノード上の Ansible バージョンを確認します。 -- 以下について確認します: - - Ansible Tower の **インベントリー** - - Ansible Tower の **クレデンシャル** - - Ansible Tower の **プロジェクト** +ラボ環境を調べて理解します。この演習では、以下を対象とします。 -# Guide +* コントロールノードで実行されている Ansible Automation Platform バージョンの判別 +* 以下を見つけて理解: + * 自動コントローラー **インベントリー** + * 自動コントローラー **認証情報** + * 自動コントローラー **プロジェクト** -## Step 1: Login to Ansible Tower +## ガイド -ブラウザでコントローラーノードのDNS名にアクセスしてください。 +### ステップ 1: 自動コントローラーへのログイン ->例えば、受講者に作業環境 student1 が割り当てられており、ワークショップ名が `durham-workshop` の場合にリンクは以下になります: +1. インストラクターが提供するワークショップの起動ページに戻ります。 - **https://student1.durham-workshop.rhdemo.io** +2. 自動コントローラーの Web UI へのリンクをクリックします。以下のようなログイン画面が表示されるはずです。 ->このログイン情報はワークショップの開始時に講師から提供されています。 + 自動コントローラーログイン画面のスクリーンショット。 +![automation controller login window](images/automation_controller_login.png) -![Tower Login Window](images/login_window.png) -- ユーザー名は `admin` -- パスワードは講師から提供されます。 + * ユーザー名は `admin` です + * 起動ページで指定されたパスワード -ログインすると、以下のようなジョブダッシュボードがデフォルトで表示されます。 -![Tower Job Dashboard](images/tower_login.png) -1. 画面右上の **i** ボタンをクリックします。 +3. ジョブダッシュボードにログインすると、以下に示すようにデフォルトのビューになります。 - ![information button link](images/information_button.png) + ![automation controller dashboard](images/automation_controller_dashboard.png) -2. 以下のようなウインドウがポップアップします: +4. ユーザーインターフェイスの右上にある **?** ボタンをクリックし、**About** をクリックします。 - ![version info window](images/version_info.png) + ![about button link](images/automation_controller_about.png) - ここで Ansible Tower と Ansible Engine のバージョンを確認することができます。 +5. 次のようなウィンドウがポップアップ表示されます。 + ![version info window](images/automation_controller_about_info.png) -## Step 2: Examine the Ansible Tower Inventory -Ansible Tower でジョブを実行するためにはインベントリーが必要となります。インベントリーは先の演習で登場したインベントリーフェイルと同様のもので、ジョブの実行対象となるホストの一覧です。また、Red Hat Ansible Tower では、ServiceNow や Infoblox DDI のような構成管理データベース(CMDB)と連携することも可能です。 +### ステップ 2: 自動コントローラーインベントリーの検証 ->Ansible Tower のインベントリーに関する詳細情報は [documentation](https://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html) から参照できます。 +自動コントローラーがジョブを実行できるようにするには、インベントリーが必要です。インベントリーは、Ansible +インベントリーファイルと同じように、ジョブを起動できる一連のホストのコレクションです。さらに、自動コントローラーは、ServiceNow +やInfoblox DDI などの既存の設定管理データベース (cmdb) を利用できます。 -1. 左側のメニューから **RESOURCES** の下の **Inventories** をクリックします。 +> 注記: +> +> 自動コントローラーに関するインベントリーの詳細は、[このドキュメント](https://docs.ansible.com/automation-controller/4.0.0/html/userguide/inventories.html) を参照してください。 - ![Inventories Button](images/inventories.png) +1. 左側のメニューバーの **RESOURCES** の下にある **Inventories** ボタンをクリックします。 -2. インベントリーには `Demo Inventory` と `Workshop Inventory` の2つがあるはずです。`Workshop Inventory` をクリックします。 + ![Inventories Button](images/automation_controller_inventories.png) - ![Workshop Inventory Link](images/workshop_inventory.png) +2. Inventories で `Workshop Inventory` をクリックします。 -3. `Workshop Inventory` から上部の **HOSTS** ボタンを選択します。ここには rtr1 から rtr4 のホストが登録されています。1つのデバイスをクリックしてください。 + ![Workshop Inventory Link](images/automation_controller_workshop_inventory.png) - **VARIABLES** フィールドに注目してください。`ansible_host` 変数を含めて `host_vars`はここに設定されています。 +3. `Workshop Inventory` で、上部の **Hosts** ボタンをクリックします。ここには、rtr1 から rtr4 の 4 + つのホストと、Ansible コントロールノードがあります。 -4. 画面上部の `Workshop Inventory` リンクをクリックしてトップレベルメニューへと戻ります。 + ![automation controller workshop inventory hosts](images/workshop_inventory_hosts.png) - ![Workshop Inventory Top Link](images/workshop_inventory_top.png) +4. これらのデバイスの 1 つをクリックします。 -5. 次に **GROUPS** を選択します。`routers` や `cisco` などの複数のグループが確認できるはずです。1つのグループをクリックします。 + ![workshop inventory hosts rtr1](images/workshop_inventory_hosts_rtr1.png) - **VARIABLES** フィールドに注目してください。 `ansible_connection` や `ansible_network_os` 変数といった `group_vars` はここに設定されています。 + **VARIABLES** フィールドに注意してください。`host_vars` は、`ansible_host` 変数を含めてここで設定されます。 -ここでのチュートリアル動画は以下になります: +5. **GROUPS** をクリックします。ここには、`routers` と `cisco` を含む複数のグループがあります。これらのグループの 1 + つをクリックします。 -![animation walkthrough ansible tower](images/inventory.gif) -Youtube でも確認できます [Click Here](https://youtu.be/4JNbFNSUS9g) + ![workshop inventory groups](images/workshop_inventory_groups.png) +6. これらのグループの 1 つをクリックします。 -## Step 3: Examine the Ansible Tower Workshop Project + ![workshop inventory group vars](images/workshop_inventory_group_vars.png) -プロジェクトは Ansible Tower に Playbook をどのようにインポートするかを定義します。Playbook と関連するディレクトリを手動で Ansible Tower Server 上で管理することもできますし、Playbook を格納した Git や Subversion、Merucial のようなソースコード管理システム(SCM)を利用することも可能です。 + **VARIABLES** フィールドに注意してください。`group_vars` は、`ansible_connection` および `ansible_network_os` 変数を含めてここで設定されます。 -> プロジェクトに関するより詳細な情報は [documentation](https://docs.ansible.com/ansible-tower/latest/html/userguide/projects.html) を参照してください。 +### ステップ 3: 自動コントローラーワークショッププロジェクトの検証 -1. 左メニューバーの **RESOURCES** の下の **Projects** ボタンをクリックします。 +プロジェクトは、Ansible Playbook が自動コントローラーにインポートされる仕組みです。Playbook および Playbook +ディレクトリーを自動コントローラーサーバーのプロジェクトのベースパスに手動で配置するか、自動コントローラーがサポートするソースコード管理 (SCM) +システム (例: Git、Subversion) に Playbook を配置することで、Playbook と Playbook +ディレクトリーを管理できます。 - ![projects link](images/projects.png) +> 注記: +> +> 自動コントローラーのプロジェクトの詳細については、[ドキュメントを参照してください](https://docs.ansible.com/automation-controller/latest/html/userguide/projects.html) -2. **PROJECTS** には事前設定された2つのプロジェクト `Demo Project` と `Workshop Project` があるはずです。ここでは `Workshop Project` を選択します。 +1. 左側のメニューバーの **RESOURCES** の下にある **Projects** ボタンをクリックします。 + + ![Workshop Project Link](images/automation_controller_projects.png) + +2. **PROJECTS** の下に `Workshop Project` があります。 ![Workshop Project Link](images/workshop_project.png) - このプロジェクトでは `GIT` が選択されていることに注目してください。これは、このプロジェクトにおいてSCMとしてGITが利用されることを意味します。 + このプロジェクトには `GIT` がリストされていることに注意してください。これは、このプロジェクトが SCM に Git を使用していることを意味します。 -3. `Workshop Project` の中からドロップダウンメニューの **SCM TYPE** をクリックします。 +3. `Workshop Project` をクリックします。 - Git や Mercurial、Subversion などが選択できることを確認します。このあとの演習を正しく進めるために、選択は Git へと戻しておいてください。 + ![Workshop Project Detail](images/workshop_project_detail.png) -![animation walkthrough ansible tower projects](images/projects.gif) -Youtube でも確認できます [Click Here](https://youtu.be/xRA97XTxMjA) + ソースコントロールの URL が [https://github.com/network-automation/toolkit](https://github.com/network-automation/toolkit +) に設定されていることに注意してください。 -## Step 4: Examine the Ansible Tower Workshop Credential -クレデンシャルは認証情報を管理し、 Tower での **Jobs** を起動する時の対象マシンに対してやインベントリーソースの同期、SCMを使ったプロジェクトの同期に利用されます。このワークショップでは、ネットワークデバイスへの認証にクレデンシャルが必要になります。 +### ステップ 4: 自動コントローラーワークショップ認証情報の検証 -> クレデンシャルに関するより詳細な情報は [documentation](https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html) を参照してください。 +認証情報は、**Jobs** +をマシンに対して起動したり、インベントリーソースと同期したり、プロジェクトのコンテンツをバージョン管理システムからインポートしたりする際の認証用に、自動コントローラーによって使用されます。ワークショップでは、ネットワークデバイスへの認証に認証情報が必要です。 -1. 左メニューバーの **RESOURCES** の下の **Credentials** ボタンをクリックします。 +> 注記: +> +> 自動コントローラーの認証情報の詳細は、[ドキュメントを参照してください](https://docs.ansible.com/automation-controller/4.0.0/html/userguide/credentials.html)。 - ![credentials link](images/credentials.png) +1. 左側のメニューバーの **Resources** の下にある **Credentials** ボタンをクリックします。 -2. **CREDENTIALS** には事前設定された3つのクレデンシャル `Demo Credential`、`Tower Credntial` と `Workshop Credentials` があるはずです。ここでは `Workshop Credential` を選択します。 + ![credentials link](images/automation_controller_credentials.png) - ![Workshop Credential Link](images/workshop_credential.png) +2. **Credentials** には、`Workshop Credential`、`Controller Credential`、および + `registry.redhat.io credential` を含む複数の事前設定された認証情報があります。`Workshop + Credential` をクリックします。 -3. `Workshop Credential` の以下を確認してください: - - **CREDENTIAL TYPE** は **Machine** に設定されています。 - - **USERNAME** には `ec2-user` が入力されています。 - - **PASSWORD** はブランクです。 - - **SSH PRIVATE KEY** は設定されており、**ENCRYPTED** と隠蔽されています。 + ![ワークショップ認証情報のリンク](images/workshop_credential.png) -![animation walkthrough ansible credentials](images/credentials.gif) -Youtube でも確認できます [Click Here](https://youtu.be/UT0t_hlNw-c) +3. `Workshop Credential` で以下を確認します。 -# Takeaways +* **CREDENTIAL TYPE**は **Machine* 認証情報です。 +* **USERNAME** は `ec2-user` に設定されています。 +* **PASSWORD** は空白です。 +* **SSH PRIVATE KEY** はすでに構成されており、**ENCRYPTED** されています。 -- Ansible Tower は Playbook を実行するのにインベントリーが必要になります。このインベントリーは、コマンドラインからPlaybookを実行したときのものと同じです。 -- この演習では Tower のインベントリーは事前設定されていましたが、既存のコマンドライン用インベントリーをインポートすることも簡単です。[こちらの blog ](https://www.ansible.com/blog/three-quick-ways-to-move-your-ansible-inventory-into-red-hat-ansible-tower) ではいくつかの既存インベントリーを Ansible Tower へインポートする方法が紹介されています。 -- Ansible Tower は GitHub などの既存SCM(ソースコード管理システム)と同期することが可能です。 -- Ansible Tower は SSH秘密鍵やログイン用パスワードを暗号化して保存することが可能です。その他にも、CyberArk や HashiCorp の Vault など、既存の認証情報管理システムと連携することも可能です。 +## 重要なこと ---- +* 自動コントローラーは、Ansible Playbook + を再度実行するためのインベントリーが必要です。このインベントリーは、ユーザーがコマンドラインのみの Ansible + プロジェクトで使用するものと同じです。 +* このワークショップではすでにインベントリーが設定されていますが、既存の Ansible Automation + インベントリーをインポートするのは簡単です。既存のインベントリーを自動コントローラーに簡単に取り込むその他の方法については、[このブログポスト](https://www.ansible.com/blog/three-quick-ways-to-move-your-ansible-inventory-into-red-hat-ansible-tower) + をご覧ください。 +* 自動コントローラーは、Github を含む既存の SCM (ソース管理) と同期できます。 +* 自動コントローラーは、SSH 秘密鍵やプレーンテキストパスワードなどの資格情報を保存および暗号化できます。自動コントローラーは、HashiCorp + の CyberArk や Vault などの既存の資格情報ストレージシステムと同期することもできます。 -# Complete +## 完了 -以上で exercise 5 は終了です。 +ラボ演習 5 を完了しました -これで Ansible Tower を利用するために必要な3つのコンポーネント(クレデンシャル、インベントリー、プロジェクト)を確認できました。次の演習ではジョブテンプレートを作成していきます。 +これで、自動コントローラーの使用を開始するために必要な認証情報、インベントリー、およびプロジェクトの 3 +つのコンポーネントすべてを調べました。次の演習では、ジョブテンプレートを作成します。 + +--- +[前の演習](../4-resource-module/README.md) | +[次の演習](../6-controller-job-template/README.md) -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/6-controller-job-template/README.ja.md b/exercises/ansible_network/6-controller-job-template/README.ja.md index 7f7723ae4..75d81a851 100644 --- a/exercises/ansible_network/6-controller-job-template/README.ja.md +++ b/exercises/ansible_network/6-controller-job-template/README.ja.md @@ -1,165 +1,178 @@ -# Exercise 6: ジョブテンプレートの作成 +# 演習 6: 自動コントローラージョブテンプレートの作成 -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Guide](#guide) - - [Step 1: Create a Job Template](#step-1-create-a-job-template) - - [Step 2: Launch the Job Template](#step-2-launch-the-job-template) - - [Step 3: Examine the Job Details View](#step-3-examine-the-job-details-view) - - [Step 4: Examine the Jobs window](#step-4-examine-the-jobs-window) - - [Step 5: Verify the backups were created](#step-5-verify-the-backups-were-created) -- [Takeaways](#takeaways) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1: ジョブテンプレートの作成](#step-1-create-a-job-template) + * [ステップ 2: ジョブテンプレートの起動](#step-2-launch-the-job-template) + * [ステップ 3: ジョブ詳細ビューの検証](#step-3-examine-the-job-details-view) + * [ステップ 4: ジョブウィンドウの検証](#step-4-examine-the-jobs-window) + * [ステップ 5: バックアップが作成されたことの確認](#step-5-verify-the-backups-were-created) +* [重要なこと](#takeaways) -# Objective +## 目的 -Automation controller を使ってネットワークコンフィグのバックアップを行うジョブテンプレートを確認していきます。このジョブテンプレートは4つルーターから稼働中のコンフィグを取得し、コントローラーノードの /backup 配下にタイムスタンプ付きで保存します。 +自動コントローラーでネットワークバックアップ構成ジョブテンプレートをデモンストレーションします。このジョブテンプレートは、4 +つのルーターすべてから実行中の構成を保存し、タイムスタンプ付きでコントロールノードの /backup の下に保存します。 -Automation controller で Playbook を実行するには **Job Template** を作成する必要があります。**Job Template** の作成には以下が必要です: - - ジョブの対象となる **Inventory** - - デバイスへログインするための **Credential** - - Playbook を含んだ **Project** +自動コントローラーで Ansible Playbook を実行するには、**ジョブテンプレート** を作成する必要があります。**ジョブテンプレート** +には以下が必要です。 -# Guide +* ジョブを実行するための **インベントリー** +* デバイスにログインするための **認証情報**。 +* Ansible Playbook を含む **プロジェクト** -## Step 1: Create a Job Template +## ガイド -1. 左のメニューから `Templates` を選択します。 +### ステップ 1: ジョブテンプレートの作成 - ![templates link](images/templates.png) +* Web UI を開き、左側のメニューの `Templates` リンクをクリックします。 -2. グリーンのボタン ![templates link](images/add.png) をクリックしてジョブテンプレートを作成します。 + ![templates link](images/controller_templates.png) - >作成には `Job Template` を選択します。`Workflow Template` ではありません。 +* 青い **Add** ボタンをクリックして、新しいジョブテンプレートを作成します。 -3. 以下のジョブテンプレートのパラメーターを入力します: + ![templates link](images/controller_add.png) - | Parameter | Value | - |---|---| - | Name | Backup network configurations | - | Job Type | Run | - | Inventory | Workshop Inventory | - | Project | Workshop Project | - | Playbook | network_backup.yml | - | Credential | Workshop Credential | +> 注記: +> +> `workflow template` ではなく必ず `job template` を選択してください +* 次のようにジョブテンプレートパラメータを入力します。 - 入力した状態の画面は以下になります。 + | Parameter | Value | + |---|---| + | Name | Backup network configurations | + | Job Type | Run | + | Inventory | Workshop Inventory | + | Project | Workshop Project | + | Execution Environment | Default execution environment | + | Playbook | playbooks/network_backup.yml | + | Credential | Workshop Credential | - ![backup job template](images/backup.png) + 記入されたジョブテンプレートパラメータのスクリーンショット: + ![backup job template](images/controller_backup.png) -4. 2つ目の認証情報をジョブテンプレートに割り当てます。 +* ジョブテンプレートに 2 番目の認証情報を追加します。 - この **Tower Credential** (認証タイプ Automation controller)もジョブテンプレートに追加する必要があります。これは **Network-Restore** ジョブテンプレートが使用しているプールをアップデートするために使用されます。Automation controller ではジョブテンプレートから、プログラマブルに Automation controller 自身の設定を動的に追加・更新することができます。 + **コントローラー認証情報** もこのジョブテンプレートに追加する必要があります。これは、自動コントローラーが **Network-Restore** ジョブテンプレートが使用するバックアップのプールを更新できるようにするためです。自動コントローラーは、ジョブテンプレートを使用してプログラムで更新し、構成を動的に追加または更新できます。ドロップダウンボックスを使用して 2 番目の認証情報を選択し、**Red Hat Ansible Automation Platform** 認証情報タイプを選択します。 - ![tower credential](images/tower_credential.png) + ![switch credential type](images/controller_cred.png) -5. 画面を下方向へスクロールしてグリーンの `save` ボタンをクリックします。 + 両方の認証情報がジョブテンプレートに正常に追加されると、次の図のようになります。 -以下がチュートリアルです: + ![controller credential](images/controller_cred_multiple.png) -![animation walkthrough Automation controller](images/job_template.gif) -Youtube で確認するにはこちら [Click Here](https://youtu.be/EQVkFaQYRiE) +* 下にスクロールして、青い `Save` ボタンをクリックします。 +### ステップ 2: ジョブテンプレートの起動 -## Step 2: Launch the Job Template +1. すべてのジョブテンプレートが一覧表示されている `Templates` ウィンドウに戻ります。 -1. `Templates` 画面へと戻ります。ここでは全てのジョブテンプレートのリストが表示されます。 +2. ロケットボタンをクリックして、`Backup network configurations` ジョブテンプレートを起動します。 -2. ジョブテンプレート `Backup network configurations` のロケットボタンをクリックしてジョブを起動します。 + ![rocket button](images/controller_rocket.png) - ![rocket button](images/rocket.png) + ロケットボタンをクリックすると、ジョブが起動します。このジョブは、**Job Details View** と呼ばれる新しいウィンドウで開きます。[自動コントローラージョブ](https://docs.ansible.com/automation-controller/latest/html/userguide/jobs.html) の詳細は、ドキュメントをご覧ください。 - ロケットボタンをクリックするとジョブが起動されます。ジョブが起動されると **Job Details View** という新しい画面が起動します。ジョブについての詳細の情報は [Tower Jobs](https://docs.ansible.com/ansible-tower/latest/html/userguide/jobs.html) から参照できます。 +### ステップ 3: ジョブの検証 -## Step 3: Examine the Job Details View +ジョブテンプレートを実行すると、自動的に [Standard Out +ウィンドウ](https://docs.ansible.com/automation-controller/latest/html/userguide/jobs.html#standard-out) +が開きます -画面の左側は **Details pane** で、右側は **Standard Out pane** です。 +![job details view](images/controller_job_output.png) -![job details view](images/jobfinish.png) +1. *Standard Out ウィンドウ** を調べます -1. **Details pane** を確認します。 + Standard Out ウィンドウには、Ansible Playbook からの出力が表示されます。すべてのタスク出力は、コマンドラインに表示されるものと正確に一致します。 - **Details pane** ではジョブの起動、終了時間や、ジョブのタイプ(Check / Run)、ジョブを起動したユーザー、どのプロジェクトのどのPlaybookが使われているか等が確認できます。 +2. **Standard Out pane** でタスクをクリックして、その特定のタスクからの構造化された出力を開きます。 - もし、ジョブが実行中であれば **Details Pane** にはキャンセルボタン ![cancel button](images/cancel.png) が表示され、これを使うとジョブを停止することができます。 + > **changed** または **ok** がある行をクリックします -2. **Standard Out pane** を確認します。 + ![task details window](images/controller_details.png) - **Standard Out pane** には Playbook の出力が表示されます。この内容はコマンドラインで実行したものと同じです。 +3. **Details** タブをクリックして、**Details ウィンドウ** を開きます。 -3. **Expand Output** ![expand image](images/expand.png) ボタンをクリックします。 + **Details ウィンドウ** には、ジョブの開始と終了のタイムスタンプ、ジョブの種類 (チェックまたは実行)、ジョブを開始したユーザー、使用された Project とAnsible Playbook などの情報が表示されます。 - **Standard Out pane** が表示領域が拡大します。 + ジョブがまだ終了していない場合、**Details ウィンドウ** には **Cancel Job** ボタンがあり、ジョブを停止するために使用できます。 -4. **Standard Out pane** の中から特定タスクの出力部分をクリックすると、タスクが出力する構造化されたデータを表示できます。 +### ステップ 4: ジョブウィンドウを調べます - > **changed** または **ok** となっている好きな行をクリックしてください。 +実行済みまたは現在実行中の **ジョブテンプレート** は、**Jobs** ウィンドウの下に表示されます。 - ![task details window](images/task_details.png) +1. 左側のメニューのジョブボタンをクリックします。 -## Step 4: Examine the Jobs window + ![jobs button](images/controller_jobs.png) -起動された、もしくは起動中の **Job Template** は **Jobs** ウインドに全て表示されます。 + ジョブリンクには、ジョブの一覧とそれらのステータスが表示 (正常に完了、失敗、またはアクティブ (実行中の) ジョブとして表示) されます。この画面から実行できるアクションには、特定のジョブの詳細および標準出力、ジョブの起動、またはジョブの削除が含まれます。 -1. 左メニューから Jobs ボタンをクリックします。 +2. **Backup network configurations** ジョブをクリックします - ![jobs button](images/jobs.png) + ![jobs link](images/controller_jobs_link.png) - この Jobs 画面はジョブの一覧と成功、失敗、実行中といったジョブの状態を表示します。この画面からは、特定ジョブの詳細、出力結果、再実行、ジョブの削除が行えます。 + **Backup network configurations** ジョブは最新のものでした (より多くのジョブを起動していない場合に限る)。このジョブをクリックして、**Standard Out ウィンドウ** に戻ります。自動コントローラーは、開始されたすべてのジョブの履歴を保存します。 -2. **Backup network configurations** ジョブをクリックします。 +### ステップ 5: バックアップが作成されたことを確認する - ![jobs link](images/jobslink.png) +* Ansible コントロールノードのコマンドライン `ls /backup` で、タイムスタンプ付きのフォルダー + (または複数のバックアップを作成した場合はフォルダー) を表示します - この **Backup network configurations** ジョブは最も最近に起動されています(他のジョブを起動していなければ)。このジョブをクリックすると **Job Details View** へと戻ることができます。Automation controller は起動された全てのジョブの履歴を保存しています。 + ```sh + [student1@ansible-1 ~]$ ls /backup + 2021-08-31-12-58 2021-08-31-13-04 2021-08-31-13-11 + ``` -## Step 5: Verify the backups were created + `ls` は、Linux オペレーティングシステムのコンピュータファイルを一覧表示するコマンドです。 -1. コントローラーノード上で `ls /backup` コマンドを実行してタイムスタンプが付加されたディレクトリを確認します(もし複数回ジョブテンプレートを実行した場合は複数のディレクトリが存在します) +* Visual Studio Code で `/backup` を開くか、または `cat` + コマンドを使用して、タイムスタンプ付きのネットワークデバイスの 1 つのコンテンツを表示します - ``` - [student1@ansible ~]$ ls /backup - 2019-07-09-18-42 2019-07-09-19-18 - ``` + ```sh + [student1@ansible-1 ~]$ cat /backup/2021-08-31-1 + 2021-08-31-12-58/ 2021-08-31-13-04/ 2021-08-31-13-11/ + [student1@ansible-1 ~]$ cat /backup/2021-08-31-12-58/rtr1.txt + Building configuration... - - `ls` コマンドはファイルの一覧を表示します + Current configuration : 5072 bytes + ! + ! Last configuration change at 12:53:30 UTC Tue Aug 31 2021 by ec2-user + ! + version 16.9 + service timestamps debug datetime msec + service timestamps log datetime msec + platform qfp utilization monitor load 80 + no platform punt-keepalive disable-kernel-core + platform console virtual + ! + hostname rtr1 + ``` -2. `cat` コマンドでバックアップされたネットワークデバイスの内容を確認します。 +* 残りのルーターを調べます。インストラクターは、ジュニパーやアリスタなど、この演習用に複数のベンダーを設定している場合があります。Ansible + Playbook はベンダーに依存しないように作成できます。この場合、Github リポジトリ + [https://github.com/network-automation/toolkit](https://github.com/network-automation/toolkit) + を介して Ansible Playbook を提供しました。 - ``` - [student1@ansible ~]$ cat /backup/2019-07-09-18-42/rtr1 +## 重要なこと - Current configuration : 5625 bytes - ! - ! Last configuration change at 02:44:24 UTC Wed Jul 3 2019 by ec2-user - ! - version 16.9 - service tcp-keepalives-in - service tcp-keepalives-out - service timestamps debug datetime msec - service timestamps log datetime msec - service password-encryption - ! - ! [[REST OF OUTPUT REMOVED FOR BREVITY]] - ! - ``` +デモンストレーションに成功しました - 3. 残りのルーターに関してもバックアップファイルを確認してください。この演習環境はJuniper や Arista を含む複数のベンダーの機器でセットアップされています。Playbook はこのようにベンダー非依存で動くように書くことも可能です。ここで使われたPlaybookは [https://github.com/network-automation/toolkit](https://github.com/network-automation/toolkit) で確認できます。 +* ネットワーク構成をバックアップするためのジョブテンプレートの作成 +* 自動コントローラー UI からのジョブテンプレートの起動 +* バックアップが正しく保存されていることの確認 -# Takeaways +## 完了 -ここで確認した内容は以下となります。 - - ネットワーク設定のバックアップを行うジョブテンプレートの作成 - - Automation controller の UI からジョブテンプレートを起動 - - バックアップが正しく実行されたか確認 +ラボ演習 6 を完了しました --- +[前の演習](../5-explore-controller/README.md) | +[次の演習](../7-controller-survey/README.md) -# Complete - -以上で exercise 6 は終了です。 - -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/7-controller-survey/README.ja.md b/exercises/ansible_network/7-controller-survey/README.ja.md index eebe5635f..0184a9320 100644 --- a/exercises/ansible_network/7-controller-survey/README.ja.md +++ b/exercises/ansible_network/7-controller-survey/README.ja.md @@ -1,31 +1,37 @@ -# Exercise 7: Survey の作成 +# 演習 7: Survey の作成 -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Guide](#guide) - - [Step 1: Create a Job Template](#step-1-create-a-job-template) - - [Step 2: Examine the playbook](#step-2-examine-the-playbook) - - [Step 3: Create a survey](#step-3-create-a-survey) - - [Step 4: Launch the Job Template](#step-4-launch-the-job-template) - - [Step 5: Verify the banner](#step-5-verify-the-banner) -- [Takeaways](#takeaways) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1: ジョブテンプレートの作成](#step-1-create-a-job-template) + * [ステップ 2: Playbook の検証](#step-2-examine-the-playbook) + * [ステップ 3: Survey の作成](#step-3-create-a-survey) + * [ステップ 4: ジョブテンプレートの起動](#step-4-launch-the-job-template) + * [ステップ 5: バナーの確認](#step-5-verify-the-banner) +* [重要なこと](#takeaways) +* [完了](#complete) -# Objective +## 目的 -ここでは Ansible Tower の [survey](https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#surveys) 機能について確認します。Survey は ‘Prompt for Extra Variables’ と同じように Playbook に対して extra variables を設定しますが、ユーザーフレンドリーな質問と回答方法を提供できます。また Survey では入力値のバリデーションも可能です。 +自動コントローラー[survey +機能](https://docs.ansible.com/automation-controller/latest/html/userguide/job_templates.html#surveys) +の使用のデモンストレーションを行います。Survey は、「Prompt for Extra Variables (追加変数のプロンプト)」と同様に +Playbook の追加変数を設定しますが、ユーザーが使いやすい質問と回答を使ってこれを実行します。また、Survey +ではユーザー入力を検証することもできます。 -# Guide +## ガイド -## Step 1: Create a Job Template +### ステップ 1: ジョブテンプレートの作成 -1. 左メニューから `Templates` をクリックします。 +1. Web UI を開き、左側のメニューの `Templates` リンクをクリックします。 - ![templates link](images/templates.png) + ![templates link](images/controller_templates.png) -2. グリーンの `+` ボタンをクリックし、以下のパラメーターで新しいジョブテンプレートを作成します(`Job Template` を選択します。`Workflow Template` ではないので注意) +2. 青い `Add` ボタンをクリックして **Add job template** を選択し、新しいジョブテンプレートを作成します + (`Workflow Template` ではなく必ず `Job Template` を選択してください) | Parameter | Value | |---|---| @@ -33,18 +39,19 @@ | Job Type | Run | | Inventory | Workshop Inventory | | Project | Workshop Project | - | Playbook | `network_banner.yml` | + | Execution Environment | Default execution environment | + | Playbook | `playbooks/network_banner.yml` | | Credential | Workshop Credential | -3. 画面を下へスクロールしグリーンの `SAVE` ボタンをクリックします。 +3. 下にスクロールして、青い `Save` ボタンをクリックします。 +### ステップ 2: Playbook の検証 -## Step 2: Examine the playbook - -ここに `network_banner.yml` があります。内容は以下です: +`network_banner.yml` Ansible Playbook は次のようになります。 -```yml + +```yaml --- - name: set router banners hosts: routers @@ -55,80 +62,91 @@ vars: - network_banner: "{{ net_banner | default(None) }}" - banner_type: "{{ net_type | default('login') }}" - include_role: - name: banner + name: "../roles/banner" ``` - + -> Note: こちらから同じ Playbook を参照できます: [https://github.com/network-automation/toolkit](https://github.com/network-automation/toolkit) +> 注記: +> +> [https://github.com/network-automation/toolkit](https://github.com/network-automation/toolkit) で Ansible Playbook を確認することもできます -このロール **banner** はシンプルな `main.yml` ファイルを持っています: +ロール **banner** には、非常に単純な `main.yml` ファイルがあります。 -```yml -- name: configure banner - include_tasks: "{{ ansible_network_os }}.yml" + +```yaml +- name: configure banner include_tasks: "{{ ansible_network_os }}.yml" ``` + -この `ansible_network_os` 変数はネットワークOSをパラメーター化して、ベンダーニュートラルなPlaybookとなるように動作します。 +`ansible_network_os` 変数は、ネットワーク OS をパラメーター化し、ベンダーに依存しない playbook +を作成するために使用されています。 -もし、この Playbook を Junos 機器に実行すると、このPlaybookは `junos.yml` を呼び出します。同様に、この Playbook を IOS-XE 機器に実行すると、この Playbook は `ios.yml` を呼び出します。それぞれのファイルにはプラットフォーム固有のタスクが含まれています: +junos デバイスを使用している場合、この Playbook は `junos.yml` と呼ばれるタスクファイルを要求します。IOS-XE +デバイスを使用している場合、このプレイブックは `ios.yml` +と呼ばれるタスクファイルを要求します。このファイルには、プラットフォーム固有のタスクが含まれます。 -```yml + +```yaml --- - name: add the junos banner junos_banner: text: "{{ network_banner }}" banner: "{{ banner_type }}" ``` - -> Note: この Playbook のために作成されている ios, nxos, eos, junos を確認してください。 - -また、ここでは2つの変数をタスクに渡していことに注意してください。 + -1. `network_banner`: この変数は `net_banner` 変数を使って渡されます。 +> 注記: +> +> この Playbook の ios、nxos、eos、およびjunos 用に作成されたタスクファイルがあることに注意してください。 -2. `banner_type`: この変数は `net_type` 変数の値を確認して渡されます。 +また、2 つの変数をタスクファイルに渡していることにも注意してください。 +1. `network_banner`: この変数は `net_banner` 変数を使用して入力されます -## Step 3: Create a survey +2. `banner_type`: この変数には `net_type` という名前の変数が入力されます +### ステップ 3: Survey の作成 -このステップでは *"survey"* を作成し、変数 `net_banner` と `banner_type` のためにユーザーの入力を回収して設定します。 +このステップでは、ユーザー入力フォームの *"survey"* を作成して、ユーザーからの入力を収集し、変数 `net_banner` と +`banner_type` の値を入力します +1. Network-Banner ジョブテンプレート内の **Survey** タブをクリックします + ![add survey button](images/controller_job_survey.png) -1. ブルーの survey ボタンをクリックします。 +2. 青い **Add** ボタンをクリックします - ![add survey button](images/addsurvey.png) + ![add survey button](images/controller_add_survey.png) -2. 以下の値で項目を入力します +3. 以下に記入してください。 | Parameter | Value | |---|---| - | Prompt | Please enter the banner text | + | Question | Please enter the banner text | | Description | Please type into the text field the desired banner | | Answer Variable Name | `net_banner` | | Answer type | Textarea | | Required | Checkmark | - 入力例は以下: + 例: - ![workshop survey](images/survey.png) + ![workshop survey](images/controller_survey_q_one.png) -3. グリーンの `+Add` ボタンをクリックします。 +4. 緑色の `Add` ボタンをクリックして別の質問を作成します - ![add button](images/add.png) + ![add survey button](images/controller_add_survey.png) -4. 次に `banner_type` の値を回収するための survey を作成します。ここでは "motd" か "login" の値を選択させ、このデフォルトは "login" とします。 +5. 次に、`banner_type` を収集するための調査プロンプトを作成します。これは "motd" または "login" + のいずれかになり、上記のプレイブックに従ってデフォルトで "login" になります。 | Parameter | Value | |-------------------------|--------------------------------| - | Prompt | Please enter the banner type | + | Question | Please enter the banner type | | Description | Please choose an option | | Answer Variable Name | `net_type` | | Answer type | Multiple Choice(single select) | @@ -136,66 +154,77 @@ | default answer | login | | Required | Checkmark | - - Note: ブラウザによっては改行が入力できない場合があります。その場合は、別のエディタで作成してからコピーして貼り付けてください。 + 例: - 設定画面の例は以下: + ![workshop survey](images/controller_survey_q_two.png) - ![workshop survey](images/survey_2.png) +5. 保存をクリックします。 -5. グリーンの `+Add` ボタンをクリックします。 +6. トグルスイッチをクリックして Survey をアクティブにし、オンにします - ![add button](images/add.png) + ![workshop survey toggle](images/controller_survey_toggle.png) -6. グリーンの **SAVE** ボタンをクリックして survey を保存します。これでジョブテンプレート画面のメインへと戻ります。画面を下へスクロールしてグリーンの **SAVE** ボタンをクリックしてから、ジョブテンプレートの編集を終了し、ジョブテンプレート一覧へ戻ります。 +7. **Back to Templates** をクリックします -## Step 4: Launch the Job Template +### ステップ 4: ジョブテンプレートの起動 -1. 作成したジョブテンプレートのロケットボタンをクリックしてジョブを起動します。 +1. ロケットをクリックして、ジョブテンプレートを起動します。 - ![rocket launch](images/rocket.png) + ![rocket launch](images/controller_launch_template.png) - ジョブを起動するとバナーの入力とタイプを選択するプロンプトが起動します。 + ジョブはすぐにユーザーに、バナーとタイプを設定するように促します。 -2. ルーターに設定したい好きなバナーメッセージを入力します。 +2. ルーターに必要なバナーメッセージを入力します。 -3. `login` か `motd` のどちらかを選択します。 +3. `login` と `motd` のどちらかを選択します。 -4. next をクリックし、Playbook に設定される extra vars を確認します。以下の例では ANSIBLE という単語をアスキーアートで入力しています。 +4. 次へをクリックして、Survey が Ansible Playbook + の追加の変数として入力をどのようにレンダリングしたかを確認します。この例のバナーテキストは "This router was configured + by Ansible" に設定されています。 - ![survey screen](images/surveyscreen.png) + ![survey screen](images/controller_survey.png) -5. グリーンの **LAUNCH** ボタンをクリックしてジョブを起動します。 +5. 青い **Launch** ボタンをクリックして、ジョブを開始します。 - ![launch button](images/launch.png) + ![launch button](images/controller_launch.png) -ジョブの完了を待ちます。もしエラーが出る場合は講師に確認してください。 +ジョブを最後まで実行します。何かが失敗した場合は、インストラクターに知らせてください。 +### ステップ 5: バナーの確認 -## Step 5: Verify the banner - -1. 1つのルーターにログインし、バナーの設定を確認します。 +1. ルーターの 1 つにログインして、バナーの設定を確認します + ```sh + [student1@ansible]$ ssh rtr1 ``` - [student1@ansible]$ ssh rtr4 + + ログイン時にバナーが表示されます。上記の例を以下に示します。 + ``` + [student1@ansible-1 ~]$ ssh rtr1 + Warning: Permanently added 'rtr1,3.237.253.154' (RSA) to the list of known hosts. - バナーはログインで表示されます。ここの例では上記の **ANSIBLE** が表示されています。 + This router was configured by Ansible + ``` - ![terminal output screen](images/terminal_output.png) +2. 追加のルーターでの確認 -2. 他のルーターも確認してください。 +## 重要なこと -# Takeaways +デモンストレーションに成功しました -ここで確認した内容は以下となります。 - - Arista EOS や Cisco IOS 、Juniper Junos を含んだ複数のネットワークOSにバナーを設定するジョブテンプレートを作成しました。 - - 変数 `network_banner` と `banner_type` に値を入力するセルフサービス survey 作成しました。 - - 4台のルーターにジョブテンプレートを実行し、一斉にバナーの設定を行いました。 +* Arista EOS、Cisco IOS、JuniperJunos + などの複数のネットワークオペレーティングシステムでバナーを構成するためのジョブテンプレートの作成。 +* `network_banner` 変数と `banner_type` 変数に入力するためのジョブテンプレートのセルフサービス Survey の作成 +* 4 つのルーターすべてでジョブテンプレートを実行し、それらにバナーを同時にロードする ---- +## 完了 -# Complete +ラボ演習 7 を完了しました -以上で exercise 7 は終了です。 +--- +[前の演習](../6--controller-job-template/README.md) | +[次の演習](../8-controller-rbac/README.md) -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/8-controller-rbac/README.ja.md b/exercises/ansible_network/8-controller-rbac/README.ja.md index 2d88e7bbf..a081f630d 100644 --- a/exercises/ansible_network/8-controller-rbac/README.ja.md +++ b/exercises/ansible_network/8-controller-rbac/README.ja.md @@ -1,220 +1,266 @@ -# Exercise 8: RBAC によるアクセスコントロール +# 演習 8: 自動コントローラーの RBAC について -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#Objective) -- [Guide](#Guide) - - [Step 1: Login as network-admin](#step-1-login-as-network-admin) - - [Step 2: Open the NETWORK ORGANIZATION](#step-2-open-the-network-organization) - - [Step 3: Examine Teams](#step-3-examine-teams) - - [Step 4: Examine the Netops Team](#step-4-examine-the-netops-team) - - [Step 5: Login as network-admin](#step-5-login-as-network-admin) - - [Step 6: Understand Team Roles](#step-6-understand-team-roles) - - [Step 7: Job Template Permissions](#step-7-job-template-permissions) - - [Step 8: Login as network-operator](#Step-8-login-as-network-operator) - - [Step 9: Launching a Job Template](#step-9-launching-a-job-template) - - [Bonus Step](#bonus-step) -- [Takeaways](#takeaways) + * [目的](#objective) + * [ガイド](#guide) + * [ステップ 1: 組織を開く](#step-1-opening-up-organizations) + * [ステップ 2: ネットワーク組織を開く](#step-2-open-the-network-organization) + * [ステップ 3: チームの検証](#step-3-examine-teams) + * [ステップ 4: Netops チームの検証](#step-4-examine-the-netops-team) + * [ステップ 5: network-admin としてのログイン](#step-5-login-as-network-admin) + * [ステップ 6: チームのロールについて](#step-6-understand-team-roles) + * [ステップ 7: ジョブテンプレートのパーミッション](#step-7-job-template-permissions) + * [ステップ 8: network-operator としてのログイン](#step-8-login-as-network-operator) + * [ステップ 9: ジョブテンプレートの起動](#step-9-launching-a-job-template) + * [ボーナスステップ](#bonus-step) + * [重要なこと](#takeaways) + * [完了](#complete) +## 目的 -# Objective +自動コントローラーを使用する主な利点の 1 つは、システムを使用するユーザーを制御できることです。この演習の目的は、ロールベースのアクセス制御 +([RBAC](https://docs.ansible.com/automation-controller/latest/html/userguide/security.html#role-based-access-controls)) +を理解することです。自動コントローラー管理者は、これを使用してテナント、チーム、ロールを定義し、ユーザーをそれらのロールに関連付けることができます。これにより、組織は自動化システムを保護し、コンプライアンスの目標と要件を満たすことができます。 -Ansible Tower を利用するメリットとして、システムを利用するユーザーのコントロールがあります。 この演習の目的は、管理者が定義できるテナント、チーム、ロールと、これらの役割に割り当てるユーザーを使って、ロールベースのアクセス制御([RBAC](https://docs.ansible.com/ansible-tower/latest/html/userguide/security.html#role-based-access-controls))を理解することです。これは組織にセキュアな自動化システムとコンプライアンス要件の達成をサポートします。 +## ガイド -# Guide +自動コントローラーの用語をいくつか確認しましょう。 -いくつかの Ansible Tower 用語を確認します: +* **組織:** たとえば、*Network-org*、*Compute-org* + などのテナンシーを定義します。これは、顧客の組織の内部組織構造を反映している可能性があります。 +* **チーム:** + 各組織内には、複数のチームが存在する場合があります。たとえば、*tier1-helpdesk*、*tier2-support*、*tier3-support*、*build-team* + などです。 +* **チーム:** ユーザーは通常、チームに属しています。自動コントローラー内でユーザーが実行できることは、**ロール** + を使用して制御/定義されます。 +* **ロール:** ロールは、ユーザーが実行できるアクションを定義します。これは、ユーザーがレベル 1 のヘルプデスク担当者、レベル + 2、または上級管理者のいずれであるかに基づいてアクセスが制限されている一般的なネットワーク組織に非常にうまく対応できます。自動コントローラー + [ドキュメント](https://docs.ansible.com/automation-controller/latest/html/userguide/security.html#built-in-roles) + は、一連の組み込みロールを定義します。 -- **Organizations:** テナントを定義します。例、 *Network-org* 、 *Compute-org* 。 これは顧客の組織の内部構造を写したものになるかもしれません。 -- **Teams:** 各 organization 内で複数のチームがあるかもしれません。例えば、 *tier1-helpdesk*, *tier2-support*, *tier3-support*, *build-team* などです。 -- **Users:** 一般的にユーザーはチームに所属します。Tower でユーザーは何ができるかは **role** によって制御、定義されます。 -- **Roles:** ロールはユーザーが実行可能なアクションを定義します。この仕組みは、Lv1 ヘルプデスクのメンバー、Lv2 または上級管理者といった役割に応じたアクセス制限を設けている一般的なネットワーク組織とうまくマッピングすることができるはずです。Tower は組み込みの role セットを持っています。[documentation ](https://docs.ansible.com/ansible-tower/latest/html/userguide/security.html#built-in-roles) +### ステップ 1: 組織を開く -より詳細な RBAC 関連の用語に関しては [documentation](https://docs.ansible.com/ansible-tower/latest/html/userguide/security.html#role-based-access-controls) を参照してください。 +* **admin** ユーザーで自動コントローラーにログインします。 + | Parameter | Value | + |---|---| + | username | `admin` | + | password| provided by instructor | -## Step 1: Opening up Organizations +* **admin** ユーザーとしてログインしていることを確認します。 -1. Tower へ **admin** ユーザーでログインします。 + ![admin user](images/step_1.png) - | Parameter | Value | - |---|---| - | username | `admin` | - | password| 講師から指示があります | - -2. **admin** としてログインしたことを確認してください。 +* **Access** セクションで、**Organizations** をクリックします - ![admin user](images/RBAC_2.png) + *admin* ユーザーとして、自動コントローラー用に設定されたすべての組織を表示できます。 -3. 左メニューから **ACCESS** の下の **Organizations** をクリックします。 + + + + + + +
注記: このワークショップでは、組織、チーム、およびユーザーが自動入力されました
- *admin* ユーザーの時には、Tower 上で構成されている全ての組織を確認できます: +* 組織を調べます - >Note: 組織、チーム、ユーザーは演習のために自動作成されています。 + 2 つの組織があります (デフォルト以外): -4. 組織の確認 + * **Red Hat compute organization** + * **Red Hat network organization** - 2つの組織が作成されています(他はデフォルトで存在している組織です): + ![organizations image](images/step1-organizations.png) - 1. **RED HAT COMPUTE ORGANIZATION** - 2. **RED HAT NETWORK ORGANIZATION** + + + + + + +
このページには、それに関連するすべてのチーム、ユーザー、インベントリ、プロジェクト、およびジョブテンプレートの概要が表示されます。組織レベルの管理者が構成されている場合は、それも表示されます。
- ![organizations image](images/RBAC_3.png) - >このページでは、組織に割り当てられている全てのチーム、ユーザー、インベントリー、プロジェクト、ジョブテンプレートのサマリーが確認できます。他のユーザーでも、組織レベルの管理者権限が設定されている場合には同じ画面を確認することができます。 +### ステップ 2: ネットワーク組織を開く -## Step 2: Open the NETWORK ORGANIZATION +1. **Red Hat network organization** をクリックします。 -1. **RED HAT NETWORK ORGANIZATION** をクリックしてください。 + これにより、組織の詳細を表示するセクションが表示されます。 - 組織の詳細を表示する画面が表示されます。 + ![network organization image](images/step2-network_org.png) - ![network organization image](images/RBAC_4.png) +2. **Access** タブをクリックして、この組織に関連付けられているユーザーを表示します。 -2. **USERS** をクリックすると、この組織に割り当てられているユーザーを確認できます。 + + + + + + +
network-adminnetwork-operator ユーザーの両方がこの組織に関連付けられていることを確認します。
- >**network-admin** と **network-operator** ユーザーの両方がこの組織に割り当てられていることを確認します。 +### ステップ 3: チームの検証 -## Step 3: Examine Teams +1. サイドバーの **Teams** をクリックします -1. サイドバーの **TEAMS** をクリックします。 + ![image identifying teams](images/step3_teams.png) - ![image identifying teams](images/RBAC_5.png ) +2. チームを調べます。自動コントローラー管理者は、利用可能なすべてのチームを表示できます。4 つのチームがあります。 -2. チームを確認します。Ansible Tower 管理者は全ての有効なチームを確認できます。ここでは4つのチームが存在します: + * Compute T1 + * Compute T2 + * Netadmin + * Netops - 1. Compute T1 - 2. Compute T2 - 3. Netadmin - 4. Netops + ![teams window image](images/step3_teams_view.png) - ![teams window image](images/RBAC_6.png ) +### ステップ 4: Netops チームの検証 -## Step 4: Examine the Netops Team +* **Netops** チームをクリックしてから、**Access** タブをクリックします。2 人の特定のユーザーに注意してください。 -1. **Netops** チームをクリックし、その後に **USERS** ボタンをクリックします。ここには2つの特定ユーザーがいることに注意してください: + * network-admin + * network-operator - 1. network-admin - 2. network-operator + ![image showing users](images/step_4.png) - ![image showing users](images/RBAC_7.png ) +* 次の 2 つの点に注意してください。 -2. 以下の2つを確認します: + * **network-admin** ユーザーには、**Red Hat network organization** の管理者権限があります。 + * **network-operator** は、単に Netops チームのメンバーです。これらの各ユーザーについて詳しく調べ、ロールを理解します - 1. **network-admin** ユーザーは **RED HAT NETWORK ORGANIZATION** の管理者権限を持っています。 - 2. **network-operator** は Netops チームの一般メンバーです。ロールについ理解するために、それぞれのユーザーでログインします。 +### ステップ 5: network-admin としてのログイン +* 自動コントローラー UI の右上隅にある admin ボタンをクリックして、管理者ユーザーからログアウトします。 -## Step 5: Login as network-admin + ![logout image](images/step5_logout.png) -1. Tower 右上の電源アイコンボタンをクリックして admin をログアウトします: +* **network-admin** ユーザーでシステムにログインします。 - 電源アイコン: ![power symbol image](images/logout.png) + | Parameter | Value | + |---|---| + | username | network-admin | + | password| provided by instructor | -2. **network-admin** ユーザーで再ログインします。 +* **network-admin** ユーザーとしてログインしていることを確認します。 - | Parameter | Value | - |---|---| - | username | network-admin | - | password| 講師から指示があります | + ![picture of network admin](images/step5_network-admin.png) -3. **network-admin** でログインしていることを確認してください。 +* サイドバーの **Organization** リンクをクリックします。 - ![picture of network admin](images/RBAC_1.png) + 自分が管理者である組織 **Red Hat network organization** のみを表示できることに気付くでしょう。 -4. サイドバーから **Organizations** をクリックします。 + 次の 2 つの組織はもう表示されません。 - 自分が管理者である **REDHAT NETWORK ORGANIZATION** のみが確認できることに注目してください。 + * Red Hat compute organization + * Default - 以下の2つの組織は表示されません: - - REDHAT COMPUTE ORGANIZATION - - Default +* ボーナスステップ: これをネットワークオペレーターユーザーとして試してください (network-admin と同じパスワード)。 -5. オプション: network-operator ユーザーで同じ手順を実行します(パスワードは network-admin と同じです)。 + * network-operator と network-admin の違いは? + * ネットワーク事業者として、他のユーザーを表示できるか。 + * 新しいユーザーを追加したり、ユーザーの資格情報を編集したりできるか。 - - どのような違いが確認できるでしょうか? - - network-operator は他のユーザーを確認できますか? - - 新しいユーザーを追加したり、資格情報の編集を行えますか? +### ステップ 6: チームのロールについて -## Step 6: Understand Team Roles +1. さまざまなロール、つまり RBAC がどのように適用されるかを理解するには、**admin** + ユーザーとしてログアウトしてから再度ログインします。 -1. ロールの違いと RBAC の割当てを理解するために、**admin** ユーザーでログインし直します。 +2. **インベントリー** に移動し、**Workshop Inventory** をクリックします -2. **Inventories** へ移動し、 **Workshop Inventory** をクリックします。 +3. **Access** ボタンをクリックします。 -3. **PERMISSIONS** ボタンをクリックします。 + ![workshop inventory window](images/step6_inventory.png) - ![workshop inventory window](images/RBAC_8.png ) +4. 各ユーザーに割り当てられているパーミッションを調べます -4. それぞれのユーザーへの権限の割当てを確認します。 + ![permissions window](images/step6_inventory_access.png) - ![permissions window](images/RBAC_9.png ) + + + + + + +
注記: network-admin および network-operator ユーザーに割り当てられた ロール。*Use ロールを割り当てることにより、network-operator ユーザーにこの特定のインベントリを使用する権限が付与されます。
- **network-admin** と **network-operator** ユーザーに割り当てられた **TEAM ROLE** に注意してください。 **network-operator** は **USE** ロールを割り当てられたことで、このインベントリーを使用する権限を得ています。 -## Step 7: Job Template Permissions -1. 左メニューから **Templates** をクリックします。 +### ステップ 7: ジョブテンプレートのパーミッション -2. **Network-Commands** ジョブを選択します。 +1. 左側のメニューの **Template** ボタンをクリックします -3. 上部の **PERMISSIONS** ボタンをクリックします。 +2. **Netowork-Commands** ジョブテンプレートをクリックします - ![permissions window](images/RBAC_10.png ) +3. 上部の **Access** ボタンをクリックします - >先と同じユーザーがジョブテンプレートに対しては異なるロールを持っていることに注意してください。Ansible Tower では「誰が何にアクセス可能か」を操作の粒度で指定できることに注目してください。この例では、network-admin は **Network-Commands** を更新(**ADMIN**)できますが、network-operator は実行(**EXECUTE**) しかできません。 + ![permissions window](images/step7_job_template_access.png) + + + + + + +
注記: 同じユーザーがジョブテンプレートに対して異なるロールを持ちます。これは、「誰が何にアクセスできるか」を制御することにおいて、自動コントローラーを使用して運用者が導入できる粒度を強調しています。この例では、network-adminは Network-Commands ジョブテンプレートを更新 (管理) できますが、network-operator はそれを 実行 することしかできません。
-## Step 8: Login as network-operator +### ステップ 8: network-operator としてのログイン -最後に操作を実行して RBAC を確認します。 +最後に、RBAC の動作を確認します。 -1. admin からログアウトし、**network-operator** ユーザーでログインし直します。 +1. admin でログアウトし、**network-operator** ユーザーとして再度ログインします。 | Parameter | Value | |---|---| | username | `network-operator` | - | password| 講師から指示されます | + | password| provided by instructor | -2. **Templates** へ移動し、**Network-Commands** をクリックします。 +2. **Templates** に移動し、**Network-Commands** ジョブテンプレートをクリックします。 - ![network commands job template](images/RBAC_11.png ) + ![network commands job template](images/step8_operator.png) -3. ここで、 *network-operator* ユーザーはどのフィールドも変更できないことに注目してください。 + + + + + + +
network-operator ユーザーは、どのフィールドも変更できないことに注意してください。Edit ボタンは利用できなくなります。
+### ステップ 9: ジョブテンプレートの起動 -## Step 9: Launching a Job Template +1. **Launch** ボタンをクリックして、**Network-Commands** テンプレートを起動します。 -1. `network-operator` ユーザーでログインしていることを確認します。 +4. 事前設定された show コマンドの 1 つを選択できるダイアログボックスが表示されます。 -2. サイドバーの **Templates** を再びクリックします。 + ![pre configured survey image](images/step9_survey.png) -3. 今回は **Network-Commands** のロケットアイコンをクリックしてジョブを起動します: +5. 先に進んでコマンドを選択し、** Next** に続いて **Launch** をクリックして、実行中の Playbook + と表示されている結果を確認します。 - ![click the rocket icon](images/RBAC_12.png ) +### ボーナスステップ -4. 事前設定された、show コマンドを1つ選択するプロンプトが表示されます。 +時間があれば、network-admin として再度ログインし、オペレーターに実行させたい別の show +コマンドを追加します。これは、network-admin ユーザーの *Admin* +ロールでジョブテンプレートを編集/更新する方法を確認するのにも役立ちます。 - ![pre configured survey image](images/RBAC_13.png ) +## 重要なこと -5. 1つのコマンドを選択して、**Next** 、 **Launch** と選択し Playbook が実行され結果が表示されることを確認します。 +* 自動コントローラーの強力な RBAC + 機能を使用すると、オペレーターがシステム自体にアクセスせずに、本番システムで所定のコマンドを実行できるアクセスを簡単に制限できることがわかります。 +* 自動コントローラーは、複数の組織、複数のチーム、およびユーザーに対応できます。ユーザーは、必要に応じて複数のチームや組織に属することもできます。この演習で説明されていないことは、自動コントローラーでユーザーを管理する必要がないことです。[エンタープライズ認証](https://docs.ansible.com/automation-controller/latest/html/administration/ent_auth.html) + を使用できます。これは、Active Directory、LDAP、RADIUS、SAML、および TACACS+ を含みます。 +* 例外が必要な場合 (ユーザーはアクセスが必要ですが、チーム全体は必要ありません)、これも可能です。RBAC + の粒度は、個々のユーザーの資格情報、インベントリー、またはジョブテンプレートにまで及ぶ可能性があります。 -## Bonus Step +## 完了 -時間に余裕があれば、network-admin でログインし直して、オペレーターに実行してもらいたい好きな show コマンドを追加してください。これは、 network-admin の *Admin* ロールがジョブテンプレートの編集と更新を許可していることを確認するのに役立ちます。 - -# Takeaways - - - Ansible Tower の RBAC 機能を使うことで、運用オペレーターが商用環境へのアクセスを必要とせずに、許可されたコマンドだけを実行をさせることが簡単に行なえます。 - - Ansible Tower は複数の組織、チーム、ユーザーをサポートしています。ユーザーは必要に応じて、複数の組織とチームに所属することができます。この演習ではカバーされていませんが、Ansible Tower は Active Directory, LDAP, RADIUS, SAML, TACACS+ などの [enterprise authentication](https://docs.ansible.com/ansible-tower/latest/html/administration/ent_auth.html) を使うと Tower でユーザー管理を行う必要はなくなります。 - - 例外的なアクセス権(ユーザーはアクセスできるが、このユーザーが属するチームはアクセスできない等)にも対応可能です。RBAC の粒度は個別のユーザーに対してクレデンシャル、インベントリー、ジョブテンプレートまで落とし込めます。 +ラボ演習 8 を完了しました --- +[前の演習](../7-controller-survey/) | [次の演習](../9-controller-workflow/README.md) -# Complete - -以上で exercise 8 は終了です。 - -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/9-controller-workflow/README.ja.md b/exercises/ansible_network/9-controller-workflow/README.ja.md index e59512194..e66830b7f 100644 --- a/exercises/ansible_network/9-controller-workflow/README.ja.md +++ b/exercises/ansible_network/9-controller-workflow/README.ja.md @@ -1,122 +1,205 @@ -# Exercise 9: ワークフローの作成 +# 演習 9: ワークフローの作成 -**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**他の言語でもお読みいただけます**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md)、![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md) -## Table of Contents +## 目次 -- [Objective](#objective) -- [Guide](#guide) - - [Step 1: Create a Job Template](#step-1-create-a-job-template) - - [Step 2: The Workflow Visualizer](#step-2-the-workflow-visualizer) - - [Step 3: Add the Configure Banner Job Template](#step-3-add-the-configure-banner-job-template) - - [Step 4: Add the Configure Network-User Job Template](#step-4-add-the-configure-network-user-job-template) - - [Step 5: Add the Network-Restore Job Template](#step-5-add-the-network-restore-job-template) - - [Step 6: Create a converged link](#step-6-create-a-converged-link) - - [Step 7: Run the Workflow](#step-7-run-the-workflow) -- [Takeaways](#takeaways) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1: ワークフローテンプレートの作成](#step-1-create-a-workflow-template) + * [ステップ 2: ワークフロービジュアライザー](#step-2-the-workflow-visualizer) + * [ステップ 3: + バナージョブテンプレートの設定の追加](#step-3-add-the-configure-banner-job-template) + * [ステップ 4: + ネットワークユーザージョブテンプレートの設定の追加](#step-4-add-the-configure-network-user-job-template) + * [ステップ 5: + ネットワーク復元ジョブテンプレートの追加](#step-5-add-the-network-restore-job-template) + * [ステップ 6: コンバージドリンクの作成](#step-6-create-a-converged-link) + * [ステップ 7: ワークフローの実行](#step-7-run-the-workflow) +* [重要なこと](#takeaways) +* [完了](#complete) -# Objective +## 目的 -[Ansible Tower workflow](https://docs.ansible.com/ansible-tower/latest/html/userguide/workflows.html)を確認します。ワークフローでは、インベントリー、Playbook、認証を共有する(また共有しない)異なるジョブテンプレート(またはワークフローテンプレート)でシーケンスを設定できます。 +[自動コントローラーワークフロー](https://docs.ansible.com/automation-controller/latest/html/userguide/workflows.html) +の使用法を示します。ワークフローを使用すると、インベントリー、プレイブック、またはパーミッションを共有する場合と共有しない場合がある、一連の異なるジョブテンプレート +(またはワークフローテンプレート) を構成できます。 -この演習では、まずタイムスタンプ付きのバックアップを作成し、それに成功したらバナーとユーザーを同時に作成します。しかし、いずれかのジョブテンプレートが失敗したらタイムスタンプ付きバックアップからリストアを実行します。 +この演習では、タイムスタンプ付きのバックアップを作成します。バックアップジョブが正常に完了すると、ワークフローはバナーとユーザーを同時に構成します。いずれかのジョブテンプレートが失敗した場合は、タイムスタンプ付きのバックアップに復元します。 -# Guide +## ガイド -## Step 1: Create a Job Template +### ステップ 1: ワークフローテンプレートの作成 -1. **admin** ユーザーでログインしていることを確認します。 +1. **admin** ユーザーとしてログインしていることを確認してください。 -2. 左メニューから **Templates** をクリックします。 +2. 左側のメニューの **テンプレート** リンクをクリックします。 -3. グリーンの **+** ボタンをクリックし、**Workflow Template** を選択します。 +3. 青い Add ボタンをクリックして、**Add workflow template** を選択します。 -4. 以下のパラメーターを入力します: + ![add workflow template button](images/controller_add_workflow.png) -| Parameter | Value | -|---|---| -| Name | Workshop Workflow | -| Organization | Default | -| Inventory | Workshop Inventory | +4. 次のようにフォームに記入します。 -5. **Save** ボタンをクリックします。 + | Parameter | Value | + |---|---| + | Name | Workshop Workflow | + | Organization | Default | + | Inventory | Workshop Inventory | -![workflow creation](images/workflow_create.gif) +5. 青い **Save** ボタンをクリックします -## Step 2: The Workflow Visualizer +### ステップ 2: ワークフロービジュアライザー -1. **SAVE** ボタンを押すと、上部の **WORKFLOW VISUALIZER** が選択可能になります。**WORKFLOW VISUALIZER** ボタンがブルーのときはクリックしないでください。 +1. **Save** をクリックすると、**ワークフロービジュアライザー** が自動的に開きます。そうでない場合は、**Visualizer** + をクリックしてください。 -2. デフォルトではグリーンの **START** ボタンだけが配置されています。この **START** ボタンをクリックします。 + ![visualizer tab link](images/visualizer_tab.png) -3. 右側に **ADD A TEMPLATE** ウィンドが表示されます。Exercise 6 で作成した *Backup* ジョブテンプレートを選択します。ドロップダウンボックスから `always` を選択します。最後にグリーンの **SELECT** ボタンをクリックします。 +2. デフォルトでは、緑色の **Start** ボタンのみが表示されます。**Start** ボタンをクリックします。 - ![add a template](images/add-a-template.png) +3. **Add Node** ウィンドウが表示されます。 - これで `Backup network configurations` ジョブテンプレートがノードとなります。ジョブやワークフロージョブはノード呼ばれるグラフ構造で相互に接続されていきます。これらのノードにはジョブ、プロジェクトの同期、インベントリーの同期を選択することができます。ワークフローテンプレートを別のワークフローの一部にすることや、同じワークフロー内で複数回使用することもできます。ワークフローを起動すると、グラフ構造のコピーがワークフロージョブに保存されます。 + * ノードタイプを `Job Template` に設定します。 - ![configure backup node](images/configure-backup.png) + * 演習 6 で作成した `Backup` ジョブテンプレートを選択します。 -## Step 3: Add the Configure Banner Job Template + ![add a template](images/add_backup_node.png) -1. *Backup network configurations* ノードにマウスオーバーして、グリーンの **+** アイコンをクリックします。再度 **ADD A TEMPLATE** ウインドが表示されます。 + * 青い **Save** ボタンをクリックします -2. **Network Banner** ジョブテンプレートを選択します。 **Run** パラメーターはドロップダウンメニューから **On Success** を選択します。 + + + + + + +
Backup network configurations ジョブテンプレートがノードとなりました。ジョブまたはワークフローテンプレートは、ノードと呼ばれるグラフのような構造を使って相互に連携します。これらのノードには、承認、ジョブ、プロジェクト同期、インベントリー同期、または他のワークフローも含まれます。テンプレートは異なるワークフローの一部となることも、同じワークフローで複数回使用することもできます。
-3. プロンプトの入力を設定するまで **SELECT** をクリックしないでください。**PROMPT** をクリックして好きなバナーを入力します。 + ![configure backup node](images/step2_workflow.png) -4. ここまでで **Backup network configurations** と **Network Banner** はグリーンの線で繋がれているはずです。 +### ステップ 3: バナージョブテンプレートの設定の追加 - ![banner node](images/configure-banner.png) +1. *Backup network configurations* ノードにカーソルを合わせ、**+** 記号をクリックします。**Add + Node** ウィンドウが再び表示されます。 -## Step 4: Add the Configure Network-User Job Template +2. **Run type** については、ドロップダウンメニューから **On Success** を選択します。青い **Next** + ボタンを押します。 -1. *Backup* ノード(**Network Banner** ノードではありません)にマウスオーバーして、グリーンの **+** アイコンをクリックします。**ADD A TEMPLATE** が再び表示されます。 + ![add second node](images/step3_add_node.png) -2. **Network-User** ジョブテンプレートを選択します。 **Run** パラメーターにはドロップダウンメニューから **On Success** を選択します。先の手順と同じように、プロンプトの入力をしてから **SELECT** をクリックします。 + + + + + + +
ワークフローは、前のノードが成功または失敗した場合に自動化ジョブを実行するように設定したり、前のジョブの状況に関わらず、必ず自動化ジョブを実行するように設定したりできます。これにより、ワークフローは問題を修正したり、デバイスの状態を元に戻したりすることができます。 +
- ![configure user node](images/configure-user.png) +3. **Network-Banner** ジョブテンプレートを選択します。 + ![add network banner job template](images/step3_add_network_banner.png) -## Step 5: Add the Network-Restore Job Template + * 青い **Next** ボタンをクリックします -1. **Network Banner** ノードにマウスオーバーし、グリーンの **+** アイコンをクリックします。**ADD A TEMPLATE** が再度表示されます。 +4. 演習 7 と同様の Survey に記入します。 -2. **Network-Restore** ジョブテンプレートを選択します。 **Run** パラメーターにはドロップダウンメニューから **On Failure** を選択します。 + ![enter banner text](images/step3_add_network_survey.png) - ![configure restore node](images/configure-restore.png) +5. Next をクリックし、続いて Save をクリックします。 -## Step 6: Create a converged link +4. **Backup network configurations** と **Configure Banner** + の間に緑色の線が存在する必要があります -1. **Network-User** ノードにマウスオーバーしてブルーの **chain** アイコンをクリックします。 + ![banner node](images/step3_final.png) -2. ここですでに存在している **Network-Restore** をクリックします。**ADD LINK** が表示されます。**RUN** パラメーターには **On Failure** を選択します。 +### ステップ 4: ネットワークユーザージョブジョブテンプレートの設定の追加 - ![restore node](images/completed-workflow.png) +1. *Backup network configurations* ノード (**Configure Banner** ノードではない) + にカーソルを合わせ、**+** 記号をクリックします。**Add Node** が再び表示されます。 -3. グリーンの **SAVE** ボタンをクリックします。 +2. **Run type** については、ドロップダウンメニューから **On Success** を選択します。青い **Next** + ボタンを押します。 -## Step 7: Run the Workflow + ![add second node](images/step3_add_node.png) -1. **Templates** の一覧画面へ戻ります。 +3. **Network-User** ジョブテンプレートを選択します。 -2. **Workshop Workflow** ワークフローテンプレートのロケットアイコンをクリックしワークフローを起動します。 + ![select network user job](images/step4_add_node.png) - ![workflow job launched](images/running-workflow.png) +4. Survey に記入します(または、デフォルトで `ansible` ユーザーを設定するようにします) - この画面で、個々のノードをクリックするとジョブの詳細を確認できます。 +5. **Next** および **Save** をクリックします。 -# Takeaways + ![configure user node](images/step4_final.png) -この演習では以下を学習しました。 - - 全てのネットワークノードに対して、バックアップを取得し、バナーとユーザーを設定するワークフロージョブテンプレートを作成しました。 - - ワークフローを堅牢にするため、いずれかのジョブテンプレートが失敗した場合に、特定のバックアップからリストアを行います。 - - ワークフロージョブテンプレートを起動し、 **VISUALIZER** を確認しました。 +### ステップ 5: ネットワーク復元ジョブテンプレートの追加 ---- +1. **Network-Banner** ノードにカーソルを合わせ、**+** 記号をクリックします。**Add Node** + ウィンドウが再び表示されます。 + +2. Run type に **On Failure** を選択します。 + + ![on failure run type](images/step5_on_failure.png) + + * Next をクリックします。 + +3. **Network-Restore** ジョブテンプレートを追加します。 + + ![add restore](images/step5_add_node_restore.png) + +4. ロールバックの日付を選択し、**Next** および **Save** をクリックします。 + + ![configure restore node](images/step5_final.png) + + +### ステップ 6: コンバージドリンクの作成 + +1. **Network-User** ノードにカーソルを合わせ、**chain** ![chain](images/chain.png) + 記号をクリックします。 + +2. 次に、既存の **Network-Restore** をダブルクリックします。**Add Link** ウィンドウが表示されます。**RUN** + パラメーターには、**On Failure** を選択します。 + + ![on fail](images/step6_on_fail.png) + + * 保存をクリックします。 + +3. ワークフローは、以下のようになります。 -# Complete + ![restore node](images/step6_complete_workflow.png) -以上で exercise 9 は終了です。 +4. Save をクリックしてビジュアライザーを終了します。 + +### ステップ 7: ワークフローの実行 + +1. Launch ボタンをクリックします。 + + ![launch workflow](images/step7_launch.png) + +2. **Workshop Workflow** を確認します。 + + ![workflow job launched](images/step7_final.png) + + ワークフロージョブ中はいつでも、ノードをクリックしてステータスを確認することにより、個々のジョブテンプレートを選択できます。 + +## 重要なこと + +以下を行いました。 + +* バックアップを作成し、すべてのネットワークノードのユーザーとバナーの作成を試行するワークフローテンプレートを作成しました +* ワークフローを堅牢にしました。いずれかのジョブテンプレートが失敗した場合、指定されたバックアップに復元します +* ワークフローテンプレートを起動し、**ワークフロービジュアライザー** を調べました。 + +## 完了 + +ラボ演習 9 を完了しました。これでネットワーク自動化ワークショップは終了です。ご参加いただきありがとうございました! + +追加の演習については、[追加の演習](../supplemental/README.md) を参照してください。 + +--- +[前の演習](../8-controller-rbac/README.md) -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/README.ja.md b/exercises/ansible_network/README.ja.md index 4e87fdd80..b5c5b4c31 100644 --- a/exercises/ansible_network/README.ja.md +++ b/exercises/ansible_network/README.ja.md @@ -1,35 +1,51 @@ # Ansible Network Automation Workshop -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). -このコンテンツは、ネットワーク機器(Arista、Cisco、Juniper など)に対するAnsibleの機能を効果的に実証するために、インストラクター主導、ハンズオンまたは自習などのさまざまな形式でワークショップを提供する非公式の多目的ツールキットです。 +**This is documentation for Ansible Automation Platform 2** + +The Ansible Network Automation workshop is a comprehensive beginners guide +to automating popular network data center devices from Arista, Cisco and +Juniper via Ansible playbooks. You’ll learn how to pull facts from devices, +build templated network configurations, and apply these concepts at scale +with Ansible automation controller. You’ll put it all together by exploring +the controller’s job templates, surveys, access controls and more. ## Presentation -プレゼン資料が必要な場合はこちらになります: -[Ansible Network Automation Workshop Deck](https://ansible.github.io/workshops/decks/ansible_network.pdf) -## Ansible Network Automation Exercises +Want the Presentation Deck? Its right here: - [Ansible Network Automation +Workshop +Deck](https://ansible.github.io/workshops/decks/ansible_network.pdf) PDF - +[Google +Source](https://docs.google.com/presentation/d/1PIT-kGAGMVEEK8PsuZCoyzFC5CIzLBwdnftnUsdUNWQ/edit?usp=sharing) +for Red Hat employees -- [Exercise 1 - ラボ環境の確認](./1-explore/README.ja.md) -- [Exercise 2 - 最初の Playbook](./2-first-playbook/README.ja.md) -- [Exercise 3 - Ansible facts の利用](./3-facts/README.ja.md) -- [Exercise 4 - Jinja2 template を使ったネットワーク設定](./4-jinja/README.ja.md) -- [Exercise 5 - Automation controller 環境の確認](./5-explore-controller/README.ja.md) -- [Exercise 6 - ジョブテンプレートの作成](./6-controller-job-template/README.ja.md) -- [Exercise 7 - Survey の作成](./7-controller-survey/README.ja.md) -- [Exercise 8 - RBAC によるアクセスコントロール](./8-controller-rbac/README.ja.md) -- [Exercise 9 - ワークフローの作成](./9-controller-workflow/README.ja.md) +## Ansible Network Automation Exercises -補足の追加演習(昔の演習)は[こちら](supplemental/README.ja.md)。 +* [Exercise 1 - Exploring the lab environment](./1-explore/) +* [Exercise 2 - Execute your first network automation + playbook](./2-first-playbook/) +* [Exercise 3 - Use Ansible facts on network devices](./3-facts/) +* [Exercise 4 - Ansible Network Resource Modules](./4-resource-module/) +* [Exercise 5 - Explore the Automation controller + environment](./5-explore-controller/) +* [Exercise 6 - Create an Automation controller job + template](./6-controller-job-template/) +* [Exercise 7 - Create an Automation controller + Survey](./7-controller-survey/) +* [Exercise 8 - Using the Role Based Access Control (RBAC) + feature](./8-controller-rbac/) +* [Exercise 9 - Create an Automation controller + Workflow](./9-controller-workflow) + +There are additional supplemental exercises that are [located +here](supplemental/). ## Network Diagram -![Red Hat Ansible Automation](../../images/network_diagram.png) -## Additional information - - [Network Automation with Ansible Homepage](https://www.ansible.com/network-automation) - - [List of Networking Ansible Modules](http://docs.ansible.com/ansible/latest/list_of_network_modules.html) - - [Module Maintenance & Support](http://docs.ansible.com/ansible/latest/modules_support.html) - - [Network Automation GitHub Repo](https://github.com/network-automation) +![Red Hat Ansible +Automation](https://github.com/ansible/workshops/blob/devel/images/ansible_network_diagram.png?raw=true) - --- - ![Red Hat Ansible Automation](../../images/rh-ansible-automation-platform.png) +--- +![Red Hat Ansible +Automation](https://github.com/ansible/workshops/blob/devel/images/rh-ansible-automation-platform.png?raw=true) diff --git a/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md new file mode 100644 index 000000000..946ccf49b --- /dev/null +++ b/exercises/ansible_network/supplemental/4-resource-module-cisco/README.ja.md @@ -0,0 +1,399 @@ +# Exercise 4: Ansible Network Resource Modules - Cisco Example + +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md) + +## Table of Contents + + * [Objective](#objective) + * [Guide](#guide) + * [Step 1 - Verify VLAN + configuration](#step-1---verify-vlan-configuration) + * [Step 2 - Creating the Ansible + Playbook](#step-2---creating-the-ansible-playbook) + * [Step 3 - Examine the Ansible + Playbook](#step-3---examine-the-ansible-playbook) + * [Step 4 - Execute the Ansible + Playbook](#step-4---execute-the-ansible-playbook) + * [Step 5 - Verify VLAN + configuration](#step-5---verify-vlan-configuration) + * [Step 6 - Using the gathered + parameter](#step-6---using-the-gathered-parameter) + * [Step 7 - Execute the gathered + playbook](#step-7---execute-the-gathered-playbook) + * [Step 8 - Examine the files](#step-8---examine-the-files) + * [Takeaways](#takeaways) + * [Solution](#solution) + * [Complete](#complete) + +## Objective + +Demonstration use of [Ansible Network Resource +Modules](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) + +Ansible network resource modules simplify and standardize how you manage +different network devices. Network devices separate configuration into +sections (such as interfaces and VLANs) that apply to a network service. + +Network resource modules provide a consistent experience across different +network devices. This means you will get an identical experience across +multiple vendors. For example the **VLANs** module will work identically +for the following modules: + +* `arista.eos.snmp_server` +* `cisco.ios.snmp_server` +* `cisco.nxos.snmp_server` +* `cisco.iosxr.snmp_server` +* `junipernetworks.junos.snmp_server` + +Configuring +[SNMP](https://en.wikipedia.org/wiki/Simple_Network_Management_Protocol) on +network devices is an extremely common task, and mis-configurations can +cause headaches and monitoring issues. SNMP configurations also tend to be +identical across multiple network switches resulting in a perfect use case +for automation. + +This exercise will cover: + +* Configuring SNMP on Cisco IOS +* Building an Ansible Playbook using the [arista.eos.snmp_server + module](https://docs.ansible.com/ansible/latest/collections/cisco/ios/ios_snmp_server_module.html#ansible-collections-cisco-ios-ios-snmp-server-module). +* Understanding the `state: merged` +* Understanding the `state: gathered` + +## Guide + +### Step 1 - Verify SNMP configuration + +* Login to an Cisco IOS router and verify the current SNMP configuration. + +* From the control node terminal, you can `ssh rtr2` and type `enable` + + ```bash + [student1@ansible-1 ~]$ ssh rtr1 + + + rtr1# + ``` + +* Use the command `show snmp` to examine the SNMP configuration: + + ```bash + rtr1#show snmp + %SNMP agent not enabled + ``` + +* Use the `show run | s snmp` to examine the SNMP running-configuration on + the Cisco device: + + ```bash + rtr1#sh run | s snmp + rtr1# + ``` + +As you can see in the output above there is no SNMP configuration on the +Cisco router. + +### Step 2 - Creating the Ansible Playbook + +* Create a new file in Visual Studio Code named `resource.yml` + + ![new file](images/step1_new_file.png) + +* Copy the following Ansible Playbook into your `resource.yml` + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: Override commands with provided configuration + cisco.ios.snmp_server: + config: + location: 'Durham' + packet_size: 500 + communities: + - acl_v4: acl_uq + name: Durham-community + rw: true + - acl_v4: acl_uq + name: ChapelHill-community + rw: true +``` + +### Step 3 - Examine the Ansible Playbook + +* First lets examine the first four lines: + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + ``` + + * The `---` designates this is a + [YAML](https://en.wikipedia.org/wiki/YAML) file which is what we write + playbooks in. + * `name` is the description of what this playbook does. + * `hosts: arista` will execute this playbook only on the Arista network + devices. + * `gather_facts: false` this will disable fact gathering for this play, by + default this is turned on. + + +* For the second part we have one task that uses the `arista.eos.vlans` + + ```yaml + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: merged + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + + * `name:` - just like the play, each task has a description for that + particular task + * `state: merged` - This is the default behavior of resource modules. + This will simply enforce that the supplied configuration exists on the + network device. There is actually seven parameters possible for + resource modules: + * merged + * replaced + * overridden + * deleted + * rendered + * gathered + * parsed + + Only two of these parameters will be covered in this exercise, but additional are available in the [supplemental exercises](../supplemental/README.md). + * `config:` - this is the supplied VLAN configuration. It is a list of dictionaries. The most important takeaway is that if the module was change from `arista.eos.vlans` to `junipernetworks.junos.vlans` it would work identically. This allows network engineers to focus on the network (e.g. VLAN configuration) versus the vendor syntax and implementation. + +### Step 4 - Execute the Ansible Playbook + +* Execute the playbook using the `ansible-navigator run`. Since there is + just one task we can use the `--mode stdout` + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* The output will look similar to the following: + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + changed: [rtr4] + changed: [rtr2] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Re-running the playbook will demonstrate the concept of + [idempotency](https://en.wikipedia.org/wiki/Idempotence) + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr2] + ok: [rtr4] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* As you can see in the output, everything will return `ok=1` indiciating + that no changes were taken place. + +### Step 5 - Verify VLAN configuration + +* Login to an Arista switch and verify the current VLAN configuration. + +* From the control node terminal, you can `ssh rtr2` and type `enable` + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* Use the command `show vlan` to examine the VLAN configuration: + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 desktops active + 30 servers active + 40 printers active + 50 DMZ active + ``` + +* Use the `show run | s vlan` to examine the VLAN running-confgiuration on + the Arista device: + + ```bash + rtr2#sh run | s vlan + vlan 20 + name desktops + ! + vlan 30 + name servers + ! + vlan 40 + name printers + ! + vlan 50 + name DMZ + ``` + +As you can see, the resource module configured the Arista EOS network device +with the supplied configuration. There are now five total VLANs (including +the default vLAN 1). + +### Step 6 - Using the gathered parameter + +* Create a new playbook named `gathered.yml` + + + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: gathered + register: vlan_config + + - name: copy vlan_config to file + copy: + content: "{{ vlan_config | to_nice_yaml }}" + dest: "{{ playbook_dir }}/{{ inventory_hostname }}_vlan.yml" + ``` + + +* The first task is identical except the `state: merged` has been switched + to `gathered`, the `config` is no longer needed since we are reading in + the configuration (verus applying it to the network device), and we are + using the `register` to save the output from the module into a variable + named `vlan_config` + +* The second task is copying the `vlan_config` variable to a flat-file. The + double currly brackets denotes that this is a variable. + +* The `| to_nice_yaml` is a + [filter](https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html), + that will transform the JSON output (default) to YAML. + +* The `playbook_dir` and `inventory_hostname` are special varaible also + referred to as [magic + variables](https://docs.ansible.com/ansible/latest/reference_appendices/special_variables.html). + The `playbook_dir` simply means the directory we executed the playbook + from, and the `inventory_hostname` is the name of the device in our + inventory. This means the file will be saved as + `~/network-workshop/rtr2_vlan.yml` and `~/network-workshop/rtr4_vlan.yml` + for the two arista devices. + +### Step 7 - Execute the gathered playbook + +* Execute the playbook using the `ansible-navigator run`. + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + ``` + +* The output will look similar to the following: + + ```bash + $ ansible-navigator run gathered.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] + ok: [rtr2] + + TASK [copy vlan_config to file] ************************************************ + changed: [rtr2] + changed: [rtr4] + + PLAY RECAP ********************************************************************* + rtr2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +### Step 8 - Examine the files + +* Open the newly created files that `gathered` the VLAN confgiuration from + the Arista network devices. + +* The two files were saved to `~/network-workshop/rtr2_vlan.yml` and + `~/network-workshop/rtr4_vlan.yml` for the two arista devices. + +* Here is a screenshot: + + ![examine vlan yml](images/step8_examine.png) + +## Takeaways + +* Resource modules have a simple data structure that can be transformed to + the network device syntax. In this case the VLAN dictionary is + transformed into the Arista EOS network device syntax. +* Resource modules are Idempotent, and can be configured to check device + state. +* Resource Modules are bi-directional, meaning that they can gather facts + for that specific resource, as well as apply configuration. Even if you + are not using resource modules to configure network devices, there is a + lot of value for checking resource states. +* The bi-directional behavior also allows brown-field networks (existing + networks) to quickly turn their running-configuration into structured + data. This allows network engineers to get automation up running more + quickly and get quick automation victories. + +## Solution + +The finished Ansible Playbook is provided here for an answer key: + +- [resource.yml](resource.yml) - [gathered.yml](gathered.yml) + +## Complete + +You have completed lab exercise 4 + +As stated previously only two of the resource modules parameters were +covered in this exercise, but additional are available in the [supplemental +exercises](../supplemental/README.md). + +In the next exercise we will start using Automation controller. +--- +[Previous Exercise](../3-facts/README.md) | [Next +Exercise](../5-explore-controller/README.md) + +[Click here to return to the Ansible Network Automation +Workshop](../README.md) diff --git a/exercises/ansible_network/supplemental/README.ja.md b/exercises/ansible_network/supplemental/README.ja.md new file mode 100644 index 000000000..b9ded6931 --- /dev/null +++ b/exercises/ansible_network/supplemental/README.ja.md @@ -0,0 +1,22 @@ +## Ansible Network Automation に関する追加の演習 + +これらは、すでにワークショップを完了しているか、さらに知識を習得したい受講者向けの追加の演習です。 + +- [ネットワークリソースモジュール - 続き ](resource) - これは、[演習 4 - Ansible +ネットワークリソースモジュール](../4-resource-module) の追加演習です - [Jinja +テンプレートを使用したネットワーク設定](jinja) - この演習では、ネットワークエンジニアを対象に Jinja2 +を使用してネットワーク設定をテンプレート化する方法を説明します + + +## ご参加ありがとうございます + +Ansible ネットワーク自動化ワークショップにご参加いただき、ありがとうございます。 + +- Github +ソースについては、[https://github.com/ansible/workshops](https://github.com/ansible/workshops) +を参照してください - Ansible Network Automation の詳細は、弊社の Web サイト +[https://www.ansible.com/use-cases/network-automation](https://www.ansible.com/use-cases/network-automation) +を参照してください + +![workshop +logo](https://github.com/ansible/workshops/blob/devel/images/Ansible-Workshop-Logo.png?raw=true) diff --git a/exercises/ansible_network/supplemental/jinja/README.ja.md b/exercises/ansible_network/supplemental/jinja/README.ja.md index e4fe25ef5..d08d50823 100644 --- a/exercises/ansible_network/supplemental/jinja/README.ja.md +++ b/exercises/ansible_network/supplemental/jinja/README.ja.md @@ -1,46 +1,65 @@ -# Exercise 4 - Jinja2 template を使ったネットワーク設定 +# Supplemental - Network Configuration with Jinja Templates -**別の言語で読む**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md), ![japan](https://github.com/ansible/workshops/raw/devel/images/japan.png) [日本語](README.ja.md). ## Table of Contents -- [Objective](#objective) -- [Guide](#guide) -- [Takeaways](#takeaways) -- [Solution](#solution) +* [Objective](#objective) +* [Guide](#guide) + * [Step 1 - Creating group vars](#step-1---creating-group-vars) + * [Step 2 - Creating Jinja2 template](#step-2---creating-jinja2-template) + * [Step 3 - Exploring the Jinja2 + template](#step-3---exploring-the-jinja2-template) + * [Step 4 - Create a playbook](#step-4---create-a-playbook) + * [Step 5 - Execute the Ansible + Playbook](#step-5---execute-the-ansible-playbook) + * [Step 6 - Verify configuration](#step-6---verify-configuration) +* [Takeaways](#takeaways) +* [Solution](#solution) +* [Complete](#complete) -# Objective +## Objective -ネットワーク構成をテンプレート化して機器に送ります。 +Demonstration templating a network configuration and pushing it a device -- 必要となるIPアドレスをグループ[変数](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html) にストアして利用する。 -- [Jinja2 template lookup plugin](https://docs.ansible.com/ansible/latest/plugins/lookup.html) を利用する。 -- [cli_config モジュール](https://docs.ansible.com/ansible/latest/modules/cli_config_module.html) を利用してネットワーク自動化を確認する。 +* Use and understand group + [variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html) + to store the IP addresses we want. +* Use the [Jinja2 template lookup + plugin](https://docs.ansible.com/ansible/latest/plugins/lookup.html) +* Demonstrate use of the network automation [cli_config + module](https://docs.ansible.com/ansible/latest/modules/cli_config_module.html) -# Guide +## Guide -#### Step 1 +### Step 1 - Creating group vars -このステップでは Ansible の変数を作成して Playbook の中で利用します。この演習では以下のIPアドレスを rtr1 と rtr2 のループバックアドレスとして利用します: +This step will cover creating Ansible variables for use in an Ansible +Playbook. This exercise will use the following IP address schema for +loopbacks addresses on rtr1 and rtr2: -Device | Loopback100 IP | ------------- | ------------- | -rtr1 | 192.168.100.1/32 | -rtr2 | 192.168.100.2/32 | +Device | Loopback100 IP | ------------ | ------------- | rtr1 | +192.168.100.1/32 | rtr2 | 192.168.100.2/32 | -変数の情報は host_vars と group_vars に格納することができます。この演習のために `group_vars` という名前のディレクトリを作成します: +Variable information can be stored in `host_vars` and `group_vars`. For +this exercise create a folder named `group_vars`: -```bash -[student1@ansible network-workshop]$ mkdir ~/network-workshop/group_vars -``` +- Create a new folder called `group_vars`. Right click on the Explorer +toolbar on the left side of Visual Studio Code and select **New Folder** -そしてこのディレクトリ内に `all.yml` という名前のファイルを好きなエディタで作成してください。コントローラーノードでは vim か nano がインストールされています。 + ![new folder](images/ansible-navigator-new-folder.png) -``` -[student1@ansible network-workshop]$ nano group_vars/all.yml -``` +- Create a new file called `all.yml`. Right click on the Explorer toolbar +on the left side of Visual Studio Code and select **New File** inside the +`group_vars` directory. + + ![new file](images/ansible-navigator-new-file.png) -インターフェースとIPアドレスの情報は Playbook から利用できるように、変数として上記のファイルに格納されている必要があります。上記のテーブル表を格納するためにシンプルな YAML の辞書データを作ることから始めます。トップレベルの変数(例えば `nodes`)を使用し、`inventory_hostname` に基づいて検索可能となるよう以下のように定義します: +The interface and IP address information above must be stored as variables +so that the Ansible playbook can use it. Start by making a simple YAML +dictionary that stores the table listed above. Use a top level variable +(e.g. `nodes`) so that a lookup can be performed based on the +`inventory_hostname`: ```yaml nodes: @@ -50,82 +69,108 @@ nodes: Loopback100: "192.168.100.2" ``` -group_vars/all.yml ファイルに上記の YAML 辞書データを記入して保存します。 +Copy the YAML dictionary we created above into the `group_vars/all.yml` file +and save the file. ->全てのデバイスはデフォルトで **all** グループの一部です。もし **cisco** グループを作成し、このグループにしか所属しないデバイスがあったとしても、この変数にはアクセスすることができます。 +> All devices are part of the group **all** by default. If we create a group named **cisco** only network devices belonging to that group would be able to access those variables. -#### Step 2 +### Step 2 - Creating Jinja2 template -`template.j2` という名前のファイルを作成します: +Create a new file called `template.j2` in the `network-workshop` directory. +Right click on the Explorer toolbar on the left side of Visual Studio Code +and select **New File**. The directory stucture will look like this: ``` -[student1@ansible network-workshop]$ nano template.j2 +├── group_vars +│ └── all.yml +├── template.j2 ``` -以下を template.j2 ファイルに記述します: +Copy the following into the template.j2 file: + ```yaml {% for interface,ip in nodes[inventory_hostname].items() %} interface {{interface}} ip address {{ip}} 255.255.255.255 {% endfor %} ``` - + -ファイルを保存します。 +Save the file. -#### Step 3 +### Step 3 - Exploring the Jinja2 template -このステップでは新しく作成された template.j2 ファイルの各行について詳しく説明します。 +This step will explain and elaborate on each part of the newly created +template.j2 file. + ```yaml {% for interface,ip in nodes[inventory_hostname].items() %} ``` + -- Jinja テンプレートの中ではコード部分は `{%` と `%}` でエスケープされます。`for` はループ処理の開始をプログラムに指示します。`interface,ip` は、辞書形式を `interface` という名前のキーと、`ip` という名前の値に分解します。 + +* Pieces of code in a Jinja template are escaped with `{%` and `%}`. The + `interface,ip` breaks down the dictionary into a key named `interface` and + a value named `ip`. + -- `nodes[inventory_hostname]` は辞書形式で、`group_vars/all.yml` ファイルの中を検索します。**inventory_hostname** はインベントリーファイルの中で設定されたホスト名が入ります。Playbookが `rtr1` に対して実行されるときには inventory_hostname は `rtr1` となり、`rtr2` に対して実行されるときには inventory_hostname は `rtr2` となり、その他も同様です。 +* The `nodes[inventory_hostname]` does a dictionary lookup in the + `group_vars/all.yml` file. The **inventory_hostname** is the name of the + hostname as configured in Ansible's inventory host file. When the + playbook is executed against `rtr1` inventory_hostname will be `rtr1`, + when the playbook is executed against `rtr2`, the inventory_hostname will + be `rtr2` and so forth. ->変数 inventory_hostname は自動的に提供される [magic variable](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts) です。 +> The inventory_hostname variable is considered a [magic variable](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts) which is automatically provided. -- `items()` キーワードは辞書形式のリストを返します。この場合は、辞書形式のキーはインターフェース名 (例 Loopback100) で、値は IP アドレス (例 192.168.100.1)となります。 +* The keyword `items()` returns a list of dictionaries. In this case the + dictionary's key is the interface name (e.g. Loopback100) and the value is + an IP address (e.g. 192.168.100.1) + ```yaml interface {{interface}} ip address {{ip}} 255.255.255.255 ``` + -- 変数は次のように中括弧で表現します: `{{ variable_here }}` この場合、変数名のキーと値はループの中に存在しています。ループの外側でこの2つの変数は存在しません。それぞれの繰り返しで変数の値は、元の変数値に基づいて再割当てされます。 +* Variables are rendered with the curly braces like this: `{{ variable_here + }}` In this case the variable name key and value only exist in the context + of the loop. Outside of the loop those two variables don't exist. Each + iteration will re-assign the variable name to new values based on what we + have in our variables. + +Finally: -最終行: -``` + +```yaml {% endfor %} ``` - - -- Jinja の中ではループの終了が必要となります。 -#### Step 4 + -config.yml という Playbook を作成します: +* In Jinja we need to specify the end of the loop. -``` -[student1@ansible network-workshop]$ nano config.yml -``` +### Step 4 - Create a playbook -以下を config.yml へと記述します: +- Create a new Ansible Playbook file called `config.yml`. Right click on +the Explorer toolbar on the left side of Visual Studio Code and select **New +File** . Either copy the playbook below or type this in: -``` + +```yaml --- - name: configure network devices hosts: rtr1,rtr2 @@ -135,64 +180,81 @@ config.yml という Playbook を作成します: cli_config: config: "{{ lookup('template', 'template.j2') }}" ``` + -- この Playbook は *configure device with config* と名付けられた1つのタスクを持ちます。 -- **cli_config** モジュールはベンダー非依存です。このモジュールは Arista、Cisco、Juniper に対して同じように動作します。このモジュールは **network_cli** コネクションプラグインを利用しているときにのみ動作します。 -- cli_config モジュールは1つのパラメーターが必要で、ここでは **config** です。ここには lookup プラグインで検索されるフラットファイルを指定しています。利用可能な lookup プラグインはこちらです [visit the documentation](https://docs.ansible.com/ansible/latest/plugins/lookup.html) -- template lookup プラグインは2つのパラメーターを必要とします。プラグインのタイプである *template* と対応したテンプレート名の *template.j2* です。 +* This Ansible Playbook has one task named *configure device with config* +* The **cli_config** module is vendor agnostic. This module will work + identically for an Arista, Cisco and Juniper device. This module only + works with the **network_cli** connection plugin. +* The cli_config module only requires one parameter, in this case **config** + which can point to a flat file, or in this case uses the lookup plugin. + For a list of all available lookup plugins [visit the + documentation](https://docs.ansible.com/ansible/latest/plugins/lookup.html) +* Using the template lookup plugin requires two parameters, the plugin type + *template* and the corresponding template name *template.j2*. -#### Step 5 +### Step 5 - Execute the Ansible Playbook -Playbook を実行します: +Use the `ansible-navigator` command to execute the playbook: ``` [student1@ansible network-workshop]$ ansible-playbook config.yml ``` -出力は以下のようになるはずです。 +The output will look similar to the following:. ``` -[student1@ansible ~]$ ansible-playbook config.yml +[student1@ansible-1 network-workshop]$ ansible-navigator run config.yml --mode stdout -PLAY [rtr1,rtr2] ******************************************************************************** +PLAY [configure network devices] *********************************************** -TASK [configure device with config] ******************************************************************************** +TASK [configure device with config] ******************************************** changed: [rtr1] changed: [rtr2] -PLAY RECAP ******************************************************************************** -rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 -rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +PLAY RECAP ********************************************************************* +rtr1 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -#### Step 6 +### Step 6 - Verify configuration -`show ip int br` コマンドを実行して、ネットワークデバイスに設定されたIPアドレスを確認します。 +Use the command `show ip int br` to verify the IP addresses have been +confirmed on the network devices. -``` +```sh [student1@ansible network-workshop]$ ssh rtr1 rtr1#show ip int br | include Loopback100 Loopback100 192.168.100.1 YES manual up up ``` -# Takeaways +## Takeaways -- [Jinja2 template lookup plugin](https://docs.ansible.com/ansible/latest/plugins/lookup.html) はデバイスのコンフィグをテンプレート化することが可能です。 -- `*os_config` (例 ios_config) と cli_config モジュールは Jinja2 テンプレートを読み込み、機器に直接プッシュすることが可能です。もしコントローラーノード上で単純にコンフィグファイルを記述したい場合は [template モジュール](https://docs.ansible.com/ansible/latest/modules/template_module.html) が利用できます。 -- 変数は一般的に group_vars と host_vars に格納されています。この演習では group_vars を利用しました。 +* The [Jinja2 template lookup + plugin](https://docs.ansible.com/ansible/latest/plugins/lookup.html) can + allow us to template out a device configuration. +* The `config` (e.g. `cisco.ios.config`, `arista.eos.config`) and cli_config + modules can source a jinja2 template file, and push directly to a device. + If you want to just render a configuration locally on the control node, + use the [template + module](https://docs.ansible.com/ansible/latest/modules/template_module.html). +* Variables are mostly commonly stored in `group_vars` and `host_vars`. + This short example only used group_vars. -# Solution +## Solution -完成したPlaybookはここから参照できます: [config.yml](config.yml). +The finished Ansible Playbook is provided here for an answer key: +[config.yml](config.yml). -完成したJinja2 templateはここから参照できます: [template.j2](template.j2). +The provided Ansible Jinja2 template is provided here: +[template.j2](template.j2). ---- - -# Complete +## Complete -以上で exercise 4 は終了です。 +You have completed this lab exercise -[Click here to return to the Ansible Network Automation Workshop](../README.ja.md) +--- +[Click here to return to the Ansible Network Automation +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/resource/README.ja.md b/exercises/ansible_network/supplemental/resource/README.ja.md new file mode 100644 index 000000000..56d7c5e6d --- /dev/null +++ b/exercises/ansible_network/supplemental/resource/README.ja.md @@ -0,0 +1,603 @@ +# Supplemental Exercise: Ansible Network Resource Modules + +**Read this in other languages**: ![uk](https://github.com/ansible/workshops/raw/devel/images/uk.png) [English](README.md) + +## Table of Contents + + * [Objective](#objective) + * [Step 1 - Manually modify the Arista + configuration](#step-1---manually-modify-the-arista-configuration) + * [Step 2 - Run the playbook](#step-2---run-the-playbook) + * [Step 3 - Modify the playbook](#step-3---modify-the-playbook) + * [Step 4 - Run replaced playbook](#step-4---run-replaced-playbook) + * [Step 5 - Add a VLAN to rtr2](#step-5---add-a-vlan-to-rtr2) + * [Step 6 - Use overridden + parameter](#step-6---use-overridden-parameter) + * [Step 7 - using rendered + parameter](#step-7---using-rendered-parameter) + * [Step 8 - Using the parsed + parameter](#step-8---using-the-parsed-parameter) + * [Takeaways](#takeaways) + * [Solution](#solution) + * [Complete](#complete) + +## Objective + +Demonstration use of [Ansible Network Resource +Modules](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) + +This exercise builds upon [exercise 4 - Ansible Network Resource +Modules](../../4-resource-module/). Please complete that exercise before +starting this one. + +There are two parts to this exercise: + +1. Cover additional configuration `state` parameters: + + * `replaced` + * `overridden` + + and contrast them to what we saw with `merged`. + +2. Cover additional read-only `state` parameters + + * `rendered` + * `parsed` + + and contrast them to the `gathered` parameter. + +### Step 1 - Manually modify the Arista configuration + +* Login to an Arista switch. We are assuming the configuration from + exercise 4 is already applied + + ```bash + vlan 20 + name desktops + ! + vlan 30 + name servers + ! + vlan 40 + name printers + ! + vlan 50 + name DMZ + ``` + +* From the control node terminal, you can `ssh rtr2` and type `enable` + + ```bash + $ ssh rtr2 + Last login: Wed Sep 1 13:44:55 2021 from 44.192.105.112 + rtr2>enable + ``` + +* Use the command `configure terminal` to manually edit the Arista + configuration: + + ```bash + rtr2#configure terminal + rtr2(config)# + ``` +* Now configure vlan 50 to `state suspend` + + ```bash + rtr2(config)#vlan 50 + rtr2(config-vlan-50)#state ? + active VLAN Active State + suspend VLAN Suspended State + + rtr2(config-vlan-50)#state suspend + ``` + +* Save the configuration + + ```bash + rtr2(config-vlan-50)#exit + rtr2(config)#end + rtr2#copy running-config startup-config + Copy completed successfully. + ``` + +* Examine the configuration + + ```bash + rtr2#sh run | s vlan + vlan 20 + name desktops + ! + vlan 30 + name servers + ! + vlan 40 + name printers + ! + vlan 50 + name DMZ + state suspend + ``` + + * The running-configuration no longer matches our playbook! vlan 50 is now + in state suspend. + +### Step 2 - Run the playbook + +* Execute the playbook using the `ansible-navigator run`. + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* The output will look similar to the following: + + ```bash + [student1@ansible-1 network-workshop]$ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] + ok: [rtr2] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* The playbook did **NOT** modify the configuration. The `state: merged` + only enforces that the config provided exists on the network device. Lets + contrast this to `replaced`. If you login to the Arista network device + the `state: suspend` will still be there. + +### Step 3 - Modify the playbook + +* Modify the `resource.yml` playbook so that `state: merged` is now `state: + replaced` + +* The playbook should look like the following: + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: replaced + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` + +### Step 4 - Run replaced playbook + +* Execute the playbook using the `ansible-navigator run`. Since there is + just one task we can use the `--mode stdout` + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* The output will look similar to the following: + + ```bash + $ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + changed: [rtr4] + changed: [rtr2] + + PLAY RECAP ********************************************************************* + rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` +* Now examine the config on rtr2, the `state: suspend` is now gone. + Replaced will enforce (for the specified VLANs) the supplied + configurations. This means that since `state: suspend` was not supplied, + and NOT the default for a VLAN, it will remove it from the network device. + +### Step 5 - Add a VLAN to rtr2 + +* Create vlan 100 on `rtr2` + + ```bash + rtr2(config)#vlan 100 + rtr2(config-vlan-100)#name ? + WORD The ASCII name for the VLAN + rtr2(config-vlan-100)#name artisanal + ``` + +* We can assume that someone has created this VLAN outside of automation + (e.g. they hand-crafted a VLAN i.e. artisanal VLAN) This is referred to + as "out of band" network changes. This is very common in the network + industry because a network engineer solved a problem, but then never + documented or circled back to remove this configuration. This manual + cofiguration change does not match best practices or their documented + policy. This could cause issues where someone tries to use this VLAN in + the future, and not aware of this configuration. + + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 desktops active + 30 servers active + 40 printers active + 50 DMZ active + 100 artisanal active + ``` + +* Re-run the playbook again. The VLAN 100 is NOT removed. + +### Step 6 - Use overridden parameter + +* Modify the playbook again, this time using the `state: overridden` + + ```yaml + --- + - name: configure VLANs + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: overridden + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + ``` +* Execute the playbook using the `ansible-navigator run`. + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` +* Login back into the `rtr2` device and examine the VLANs + ```bash + rtr2#show vlan + VLAN Name Status Ports + ----- -------------------------------- --------- ------------------------------- + 1 default active + 20 desktops active + 30 servers active + 40 printers active + 50 DMZ active + ``` + +* The artisanal VLAN 100 has been removed! Now the same resource modules can + be used to not only configure network devices, but enforce which VLANs are + configured. This is referred to as policy enforcement, and a huge part of + configuration management. Going from `merged` to `replaced` to + `overridden` will often match the automation journey for a network team as + they gain more and more confidence with automation. + +### Step 7 - using rendered parameter + +Now lets return to using read-only parameters. These parameters do not +modify the configuration on a network device. In exercise 4, we used the +`state: gathered` to retrieve the VLAN configuration from the Arista network +device. This time we will use `rendered` to get the Arista commands that +generate the configuration: + +* Modify the `resource.yml` playbook to `state: rendered` + +* Register the output from the task to a variable named `rendered_config` + +* Add a `debug` task to print the output to the terminal window + +* The playbook will look like the following: + + ```yaml + - name: use vlans resource module + arista.eos.vlans: + state: rendered + config: + - name: desktops + vlan_id: 20 + - name: servers + vlan_id: 30 + - name: printers + vlan_id: 40 + - name: DMZ + vlan_id: 50 + register: rendered_config + + - name: use vlans resource module + debug: + msg: "{{ rendered_config }}" + ``` + +* Execute the playbook using the `ansible-navigator run`. + + ```bash + $ ansible-navigator run resource.yml --mode stdout + +* The output will look like the following: + + ```bash + [student1@ansible-1 network-workshop]$ ansible-navigator run resource.yml --mode stdout + + PLAY [configure VLANs] ********************************************************* + + TASK [use vlans resource module] *********************************************** + ok: [rtr2] + ok: [rtr4] + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "rendered": [ + "vlan 20", + "name desktops", + "vlan 30", + "name servers", + "vlan 40", + "name printers", + "vlan 50", + "name DMZ" + ] + } + } + ok: [rtr2] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "rendered": [ + "vlan 20", + "name desktops", + "vlan 30", + "name servers", + "vlan 40", + "name printers", + "vlan 50", + "name DMZ" + ] + } + } + + PLAY RECAP ********************************************************************* + rtr2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* Specifically the `rendered` key will display the Arista commands that are + used to generate the configuration! This allows network automators to know + exactly what commands would be run and executed before they actually run + automation to apply the commands. + +### Step 8 - Using the parsed parameter + +Finally lets cover the parsed parameter. This parameter is used when a +existing file contains the network device configuration. Imagine there was +already a backup performed. + +* First lets backup a configuration. Here is a simple playbook for doing a + configuration backup. The playbook is [backup.yml](backup.yml). + + ```yaml + --- + - name: backup config + hosts: arista + gather_facts: false + + tasks: + + - name: retrieve backup + arista.eos.config: + backup: true + backup_options: + filename: "{{ inventory_hostname }}.txt" + ``` + +* Execute the playbook: + + ```bash + $ ansible-navigator run backup.yml --mode stdout + ``` + +* Verify the backups were created: + + ```bash + $ ls backup + rtr2.txt rtr4.txt + ``` + +* Now modify the `resource.yml` playbook to use the `parsed` playbook: + + ```yaml + --- + - name: use parsed + hosts: arista + gather_facts: false + + tasks: + + - name: use vlans resource module + arista.eos.vlans: + state: parsed + running_config: "{{ lookup('file', 'backup/{{ inventory_hostname }}.txt') }}" + register: parsed_config + + - name: print to terminal screen + debug: + msg: "{{ parsed_config }}" + ``` + +* There is a couple additional changes: + + * instead of `config` we are using `running-config` and pointing to the + backup file. + * We are registering the output from the module to `parsed_config` + varaible + * We are using the debug module to print the `parsed_config` variable + +* Execute the playbook: + + ```bash + $ ansible-navigator run resource.yml --mode stdout + ``` + +* The output will look like the following: + + ```yaml + [student1@ansible-1 network-workshop]$ ansible-navigator run resource.yml --mode stdout + + PLAY [use parsed] ************************************************************** + + TASK [use vlans resource module] *********************************************** + ok: [rtr4] + ok: [rtr2] + + TASK [print to terminal screen] ************************************************ + ok: [rtr2] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "parsed": [ + { + "name": "desktops", + "state": "active", + "vlan_id": 20 + }, + { + "name": "servers", + "state": "active", + "vlan_id": 30 + }, + { + "name": "printers", + "state": "active", + "vlan_id": 40 + }, + { + "name": "DMZ", + "state": "active", + "vlan_id": 50 + } + ] + } + } + ok: [rtr4] => { + "msg": { + "ansible_facts": { + "discovered_interpreter_python": "/usr/bin/python" + }, + "changed": false, + "failed": false, + "parsed": [ + { + "name": "desktops", + "state": "active", + "vlan_id": 20 + }, + { + "name": "servers", + "state": "active", + "vlan_id": 30 + }, + { + "name": "printers", + "state": "active", + "vlan_id": 40 + }, + { + "name": "DMZ", + "state": "active", + "vlan_id": 50 + } + ] + } + } + + PLAY RECAP ********************************************************************* + rtr2 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + rtr4 : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 + ``` + +* In the output above you will see that the flat-file backup was parsed into + structured data: + + ```json + "parsed": [ + { + "name": "desktops", + "state": "active", + "vlan_id": 20 + } + ``` + +* The default output is JSON but can be easily transformed into YAML. + +## Takeaways + +We covered two additional configuration `state` parameters: + + * `replaced` - enforced config for specified VLANs + * `overridden`- enforced config for ALL vlans + +Going from `merged` to `replaced` to `overridden` follows the automation adoption journey as network teams gain more confidence with automation. + +We covered additional read-only `state` parameters + + * `rendered` - shows commands that would generate the desired + configuration + * `parsed` - turned a flat-file configuration (such as a backup) into + structured data (versus modifying the actual device) + +These allow network automators to use resource modules in additional +scenarios, such as disconnected environments. Network resource modules +provide a consistent experience across different network devices. + +The [documentation +guide](https://docs.ansible.com/ansible/latest/network/user_guide/network_resource_modules.html) +provided additional info of using network resource modules. + +## Solution + +The finished Ansible Playbook is provided here for an answer key: + +- [overridden.yml](overridden.yml) - [backup.yml](backup.yml) - +[parsed.yml](parsed.yml) + + +## Complete + +You have completed the supplemental lab! + + +--- +[Click here to return to supplemental exercises](../README.md) + +[Click here to return to the Ansible Network Automation +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/1-2-playbook-basics/README.ja.md b/exercises/ansible_network/supplemental/under_construction/1-2-playbook-basics/README.ja.md index 63bcc21f8..766e0fee7 100644 --- a/exercises/ansible_network/supplemental/under_construction/1-2-playbook-basics/README.ja.md +++ b/exercises/ansible_network/supplemental/under_construction/1-2-playbook-basics/README.ja.md @@ -1,46 +1,51 @@ -# Exercise 1.2 - Moduleのドキュメントの確認方法、 出力結果の登録方法、 tagの使い方 +# Exercise 1.2 - Module documentation, Registering output & tags -前のセクションでは、`ios_facts` と `debug` の使い方を学びました。 -`debug` モジュールの使い方では、 `msg` と呼ばれるパラメータを設定しましたが、`ios_facts`モジュールについては特にそのようなものを設定しませんでした。 -これらのモジュールに設定できるパラメータについて知りたいと思った場合、どうすれば良いでしょうか? -解決するためには、2つのオプションがあります。 +In the previous section you learned to use the `ios_facts` and the `debug` +modules. The `debug` module had an input parameter called `msg` whereas the +`ios_facts` module had no input parameters. As someone just starting out how +would you know what these parameters were for a module? -1. https://docs.ansible.com へアクセスし、Network Moduleについてのドキュメントを確認することができます。 -1. コマンドラインから、`ansible-doc `コマンドを実行し、ドキュメントを確認することができます。 +There are 2 options. +- 1. Point your browser to https://docs.ansible.com > Network Modules and + read the documentation -#### Step 1 +- 2. From the command line, issue the `ansible-doc ` to read + the documentation on the control host. -コントロールホスト上で、ドキュメントを確認してみましょう。 -この演習で確認するドキュメントは、`debug`モジュールと `ios_facts`モジュールです。 +#### Step 1 +On the control host read the documentation about the `ios_facts` module and +the `debug` module. ``` [student1@ansible networking-workshop]$ ansible-doc debug + ``` -`debug`モジュールを、何もオプションを指定せずに実行した場合に何が起こるかをドキュメント上で確認してみてください。 +What happens when you use `debug` without specifying any parameter? ``` [student1@ansible networking-workshop]$ ansible-doc ios_facts + ``` -factsの取得を制限したい場合、どうすれば良いでしょうか?答えはドキュメント上で確認してみてください。 +How can you limit the facts collected ? -#### Step 2 -前のセクションでは、`ios_facts`モジュールを用いてデバイスの詳細を取得する方法を学習しました。 -`ios_facts`モジュールでは取得ができない情報があった場合、`ios_command`モジュールを利用することで、手動オペレーションと同様`show`コマンドの結果から取得することができます。 -この演習を進めて、_show_ コマンドの実行結果から、**hostname**と`show ip interface brief`の出力結果を自動収集する方法を学びましょう。 +#### Step 2 +In the previous section, you learned how to use the `ios_facts` module to +collect device details. What if you wanted to collect the output of a `show` +command that was not provided as a part of `ios_facts` ? -``` -[student1@ansible networking-workshop]$ vim gather_ios_data.yml -``` +The `ios_command` module allows you to do that. Go ahead and add another +task to the playbook to collect the output of 2 _show_ commands to collect +the **hostname** and the output of the `show ip interface brief` commands: -{%raw%} ``` yaml +{%raw%} --- - name: GATHER INFORMATION FROM ROUTERS hosts: cisco @@ -59,30 +64,31 @@ factsの取得を制限したい場合、どうすれば良いでしょうか? debug: msg: "The serial number is:{{ ansible_net_serialnum }}" + - name: COLLECT OUTPUT OF SHOW COMMANDS ios_command: commands: - show run | i hostname - show ip interface brief -``` {%endraw%} +``` + +> Note: **commands** is a parameter required by the **ios_module**. The input to this parameter is a "list" of IOS commands. -> Note: **commands** 以下は、**ios_module**が必要とするパラメータを入力します。 -パラメータとして入力する値は、"list"形式で記述されるIOS コマンドとなります。 #### Step 3 -playbookを実行する前に、最後のtaskへ`tag`を追加しましょう。 -ここでは`show`と名前をつけます。 +Before running the playbook, add a `tag` to the last task. Name it "show" + +> Tags can be added to tasks, plays or roles within a playbook. You can assign one or more tags to any given task/play/role. Tags allow you to selectively run parts of the playbook. + + -> Tagは、playbookの中でタスク、play、rolesに対して追加することができます。 -> 1つもしくは複数のtagをtask/play/roleへ追加することができます。 -> tagを指定してplaybookの一部だけを選択して実行することができるようになります。 -{%raw%} ``` yaml +{%raw%} --- - name: GATHER INFORMATION FROM ROUTERS hosts: cisco @@ -101,20 +107,21 @@ playbookを実行する前に、最後のtaskへ`tag`を追加しましょう。 debug: msg: "The serial number is:{{ ansible_net_serialnum }}" + - name: COLLECT OUTPUT OF SHOW COMMANDS ios_command: commands: - show run | i hostname - show ip interface brief tags: show -``` + {%endraw%} +``` #### Step 4 -部分的な実行を試してみましょう。 -この機能を利用するには、`--tags`オプションをつけてplaybookを実行します。 +Selectively run the last task within the playbook using the `--tags` option: ``` [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts gather_ios_data.yml --tags=show @@ -137,29 +144,35 @@ rtr4 : ok=1 changed=0 unreachable=0 failed=0 ``` -2つの重要なポイントを記します。 +Note 2 important points here. -1. playbookの実行中には、1つのタスクだけが実行されたはずです。(シリアル番号と、IOS Versionが表示されなくなったはずです。) +1. Only a single task was executed during the playbook run (You no longer + can see the serial number and IOS version being displayed) -1. show commandの実行結果が、表示されていないはずです。 +2. The output of the show commands is not being displayed. #### Step 5 -playbookを `-v`オプション(vervose mode)をつけて再実行してみましょう。ルータに実行されたコマンドの出力結果が確認できます。 +Re-run the playbook using the `-v` verbose flag to see the output coming +back from the routers. ``` [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts gather_ios_data.yml --tags=show -v + ``` #### Step 6 -`ios_facts`モジュールでは、取得された情報は自動的に`ansible_*`変数へ割り当てされていました。 -それとは対照的にアドホックなコマンドを実行した際には出力結果が自動的になにがしかの変数に割当たることがないため、playbook内で利用するには任意の変数に登録(register)する必要があります。 -先ほど作成したplaybookの中へ、`show_output`と定義した変数を追加し、showコマンドの出力結果を登録`register`する構文を追加してみましょう。 +With the `ios_facts` module, the output was automatically assigned to the +`ansible_*` variables. For any of the ad-hoc commands we run against remote +devices, the output has to be "registered" to a variable in order to use it +within the playbook. Go ahead and add the `register` directive to collect +the output of the show commands into a variable called `show_output`: + -{%raw%} ``` yaml +{%raw%} --- - name: GATHER INFORMATION FROM ROUTERS hosts: cisco @@ -185,17 +198,20 @@ playbookを `-v`オプション(vervose mode)をつけて再実行してみま - show ip interface brief tags: show register: show_output -``` {%endraw%} +``` + #### Step 7 -`debug` モジュールを用いて、先ほど作成した`show_output`変数の内容を表示するタスクを追加してください。 -また、このtaskにも"show"というtagを付与してください。 + +Add a task to use the `debug` module to display the content's of the +`show_output` variable. Tag this task as "show" as well. + -{%raw%} ``` yaml +{%raw%} --- - name: GATHER INFORMATION FROM ROUTERS hosts: cisco @@ -226,17 +242,18 @@ playbookを `-v`オプション(vervose mode)をつけて再実行してみま debug: var: show_output tags: show -``` {%endraw%} +``` + +> Note the use of **var** vs **msg** for the debug module. -> debugモジュールにおける、**var** と **msg** の使い方に注意してください。 #### Step 8 -playbookを再実行して、タグ付けしたタスクのみを実行します。 -今回は、`-v`フラグを付けずにplaybookを実行します。 +Re-run the playbook to execute only the tasks that have been tagged. This +time run the playbook without the `-v` flag. ``` @@ -284,24 +301,22 @@ ok: [rtr1] => { . ``` - - #### Step 9 -みなさんが作成し定義した`show_output` 変数は、`python dictionary`(辞書)と同じように構文解析を行うことができます。 -それらは、通常 "key" と呼ばれる `stdout`(標準出力)を含みます。 -`stdout`は、リスト型のオブジェクトで、`ios_command`タスクの`command`パラメータへの入力と同じだけの数の構成数になります。 +The `show_output` variable can now be parsed just like a `Python` +dictionary. It contains a "key" called `stdout`. `stdout` is a list object, +and will contain exactly as many elements as were in the input to the +`commands` parameter of the `ios_command` task. This means +`show_output.stdout[0]` will contain the output of the `show running | i +hostname` command and `show_output.stdout[1]` will contain the output of +`show ip interface brief`. -つまり、 -- `show_output.stdout[0]`は`show running | i hostname`コマンドの結果が格納され、 -- `show_output.stdout[1]`は、 `show ip interface brief`の結果が格納される、 -ということです。 +Write a new task to display only the hostname using a debug command: -debug コマンドを用いて hostname だけを表示する新しいtaskを追記してみましょう。 -{%raw%} ``` yaml +{%raw%} --- - name: GATHER INFORMATION FROM ROUTERS hosts: cisco @@ -337,12 +352,12 @@ debug コマンドを用いて hostname だけを表示する新しいtaskを追 debug: msg: "The hostname is {{ show_output.stdout[0] }}" tags: show -``` {%endraw%} +``` #### Step 10 -playbookを再実行してみましょう。 +Re-run the playbook. ``` yaml @@ -391,12 +406,15 @@ rtr2 : ok=3 changed=0 unreachable=0 failed=0 rtr3 : ok=3 changed=0 unreachable=0 failed=0 rtr4 : ok=3 changed=0 unreachable=0 failed=0 +[student1@ansible networking-workshop]$ + + ``` # Complete -お疲れ様でした。 -以上でlab exercise 1.2 は終了です。 +You have completed lab exercise 1.2 --- -[ここをクリックすると Ansible Linklight - Networking Workshop へ戻ります](../../README.ja.md) +[Click Here to return to the Ansible Linklight - Networking +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/10-tower-api/README.ja.md b/exercises/ansible_network/supplemental/under_construction/10-tower-api/README.ja.md new file mode 100644 index 000000000..69587ebb2 --- /dev/null +++ b/exercises/ansible_network/supplemental/under_construction/10-tower-api/README.ja.md @@ -0,0 +1,214 @@ +# Exercise 4-5: Working with the Ansible Tower API + +# Objective + +Demonstrate the use of [Ansible Tower +API](https://docs.ansible.com/ansible-tower/latest/html/towerapi/index.html). +The Ansible Tower API allows you to programmatically invoke actions against +Tower. All actions in the GUI can also be done via the API. + +For this exercise we will browse the API and invoke a Workflow via the +browser and cURL. + +# Guide + +## Step 1 + +First, we're going to browse the Tower API at https://X.X.X.X/api. The IP to +use is the IP of your control node. + +![api login](images/api_login.png) + +If you're not logged in, do that now by clicking on **Login in** button in +the top right. + +## Step 2 + +After logging in click on the **current_version** link. Feel free to browse +around. After browsing around click on the **workflow_job_templates** link. + +![workflow link](images/workflow_link.png) + +The output on this screen shows you all of the available Workflow Job +Templates available to your user. For the next step, we'll want to launch a +Workflow Job Template. + +## Step 3 + +Find the Workflow Job Template that you want to execute. Select the +**launch** link for the respective Workflow Job Template + +![workflow launch link](images/workflow_launch.png) + +After clicking the link, scroll to the very bottom of the page. Here you +will see the payload options we can send to the Workflow Job Template and +issue a POST to start the Workflow Job Template. Go ahead and click the +**POST** button and browse to the Tower active jobs to see the Workflow Job +running. + +![post workflow](images/post_launch.png) + +## Step 4 + +Next let's run some cURL commands against the Ansible Tower API. First we're +going to install [jq](https://stedolan.github.io/jq/) onto the control +node. SSH into the control node, and issue the following commands + +```bash +$ wget https://github.com/stedolan/jq/releases/download/jq-1.6/jq-linux64 +$ chmod +x jq-linux64 +$ sudo mv jq-linux64 /usr/local/bin/jq +``` + +You should be able to use `jq` now + +```bash +$ jq +jq - commandline JSON processor [version 1.6] + +Usage: jq [options] [file...] + jq [options] --args [strings...] + jq [options] --jsonargs [JSON_TEXTS...] + +jq is a tool for processing JSON inputs, applying the given filter to +its JSON text inputs and producing the filter's results as JSON on +standard output. + +The simplest filter is ., which copies jq's input to its output +unmodified (except for formatting, but note that IEEE754 is used +for number representation internally, with all that that implies). + +For more advanced filters see the jq(1) manpage ("man jq") +and/or https://stedolan.github.io/jq + +Example: + + $ echo '{"foo": 0}' | jq . + { + "foo": 0 + } + +For a listing of options, use jq --help. +``` + +Now let's query the Tower API and pipe that to jq for readability. + +```bash +$ curl -ks https://X.X.X.X/api/ | jq +{ + "description": "AWX REST API", + "current_version": "/api/v2/", + "available_versions": { + "v1": "/api/v1/", + "v2": "/api/v2/" + }, + "oauth2": "/api/o/", + "custom_logo": "", + "custom_login_info": "" +} +``` + +...and start walking through the links + +```bash +$ curl -ks https://X.X.X.X/api/v2/ | jq +{ + "ping": "/api/v2/ping/", + "instances": "/api/v2/instances/", + "instance_groups": "/api/v2/instance_groups/", + "config": "/api/v2/config/", + "settings": "/api/v2/settings/", + "me": "/api/v2/me/", + "dashboard": "/api/v2/dashboard/", + "organizations": "/api/v2/organizations/", + "users": "/api/v2/users/", + "projects": "/api/v2/projects/", + "project_updates": "/api/v2/project_updates/", + "teams": "/api/v2/teams/", + "credentials": "/api/v2/credentials/", + "credential_types": "/api/v2/credential_types/", + "applications": "/api/v2/applications/", + "tokens": "/api/v2/tokens/", + "inventory": "/api/v2/inventories/", + "inventory_scripts": "/api/v2/inventory_scripts/", + "inventory_sources": "/api/v2/inventory_sources/", + "inventory_updates": "/api/v2/inventory_updates/", + "groups": "/api/v2/groups/", + "hosts": "/api/v2/hosts/", + "job_templates": "/api/v2/job_templates/", + "jobs": "/api/v2/jobs/", + "job_events": "/api/v2/job_events/", + "ad_hoc_commands": "/api/v2/ad_hoc_commands/", + "system_job_templates": "/api/v2/system_job_templates/", + "system_jobs": "/api/v2/system_jobs/", + "schedules": "/api/v2/schedules/", + "roles": "/api/v2/roles/", + "notification_templates": "/api/v2/notification_templates/", + "notifications": "/api/v2/notifications/", + "labels": "/api/v2/labels/", + "unified_job_templates": "/api/v2/unified_job_templates/", + "unified_jobs": "/api/v2/unified_jobs/", + "activity_stream": "/api/v2/activity_stream/", + "workflow_job_templates": "/api/v2/workflow_job_templates/", + "workflow_jobs": "/api/v2/workflow_jobs/", + "workflow_job_template_nodes": "/api/v2/workflow_job_template_nodes/", + "workflow_job_nodes": "/api/v2/workflow_job_nodes/" +} + + +$ curl -ks https://54.184.105.54/api/v2/workflow_job_templates/ | jq +{ + "detail": "Authentication credentials were not provided. To establish a login session, visit /api/login/." +} +``` + +As you can see, RBAC applies to the API as well. This shouldn't be a +surprise since the GUI leverages the API for all functionality. For now we +can pass the username/password to the cURL command. + +**NOTE:** Do not use the following for production environments since the username and password are in plain text. + +```bash +$ curl -ks -u ':' https://X.X.X.X/api/v2/workflow_job_templates/ | jq +{ + "count": 2, + "next": null, + "previous": null, + "results": [ + { + "id": 15, + "type": "workflow_job_template", + "url": "/api/v2/workflow_job_templates/15/", + "related": { + "created_by": "/api/v2/users/1/", + "modified_by": "/api/v2/users/1/", + "last_job": "/api/v2/workflow_jobs/210/", + "notification_templates_error": "/api/v2/workflow_job_templates/15/notification_templates_error/", + "notification_templates_success": "/api/v2/workflow_job_templates/15/notification_templates_success/", +... + "allow_simultaneous": false, + "ask_variables_on_launch": false, + "inventory": null, + "ask_inventory_on_launch": false + } + ] +} +``` + +To help parse this more easily we'll execute the following command + +```bash +$ curl -ks -u ':' https://X.X.X.X/api/v2/workflow_job_templates/ | jq '.results[] | "Workflow Template \(.id) is \(.name)"' +``` + +This will give you the ID and name of the Workflow Job Templates available +to you. Pick one for the following command + +```bash +$ curl -ks -u ':' -H "Content-Type: application/json" -X POST -d '{}' https://X.X.X.X/api/v2/workflow_job_templates//launch/ +``` + +If you browse the GUI, you will see the job has been launched. This +concludes this exercise. + +[Click here to return to the lab guide](../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/2-0-config/README.ja.md b/exercises/ansible_network/supplemental/under_construction/2-0-config/README.ja.md index df95d4c2e..9fc833f14 100644 --- a/exercises/ansible_network/supplemental/under_construction/2-0-config/README.ja.md +++ b/exercises/ansible_network/supplemental/under_construction/2-0-config/README.ja.md @@ -1,17 +1,15 @@ -# Exercise 2.0 - Routerのコンフィグを更新してみよう +# Exercise 2.0 - Updating the router configurations using Ansible -Ansibleを用いて、ルータのコンフィグを更新することができます。 -コンフィグファイルを機器へPushする方法や、コンフィグレーションを1列ごとにPushすることもできます。 +Using Ansible you can update the configuration of routers either by pushing +a configuration file to the device or you can push configuration lines +directly to the device. #### Step 1 -`router_configs.yml`という名前の新しいファイルを作成します(実行方法はお任せします。`vim` や `nano`がjumphostにはインストールされています。みなさんのラップトップにインストールされているエディタを用いて後ほどコピーをするなどの方法でも構いません) +Create a new file called `router_configs.yml` (use either `vim` or `nano` on +the jumphost to do this or use a local editor on your laptop and copy the +contents to the jumphost later). Add the following play definition to it: -``` -[student1@ansible networking-workshop]$ vim router_configs.yml -``` - -以下の通りにplayを定義します。 ``` yaml --- @@ -19,18 +17,20 @@ Ansibleを用いて、ルータのコンフィグを更新することができ hosts: cisco gather_facts: no connection: network_cli + ``` #### Step 2 -全てのルータに、SNMP strings `ansible-public` と `ansible-private` の両方が存在するようにタスクを追加します。 -このタスクには`ios_config`モジュールを利用します。 +Add a task to ensure that the SNMP strings `ansible-public` and +`ansible-private` are present on all the routers. Use the `ios_config` +module for this task -> Note: **ios_config** モジュールのヘルプについては、**ansible-doc ios_config** コマンドをCLIから実行するか、docs.ansible.comをチェックしましょう。 -> いずれかのヘルプを確認すれば、モジュールの使用例から利用可能な全てのオプションを表示してくれるはずです。 +> Note: For help on the **ios_config** module, use the **ansible-doc ios_config** command from the command line or check docs.ansible.com. This will list all possible options with usage examples. ``` yaml + --- - name: SNMP RO/RW STRING CONFIGURATION hosts: cisco @@ -44,11 +44,12 @@ Ansibleを用いて、ルータのコンフィグを更新することができ commands: - snmp-server community ansible-public RO - snmp-server community ansible-private RW + ``` #### Step 3 -playbookを実行します。 +Run the playbook: ``` shell [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml @@ -67,28 +68,22 @@ rtr2 : ok=1 changed=1 unreachable=0 failed=0 rtr3 : ok=1 changed=1 unreachable=0 failed=0 rtr4 : ok=1 changed=1 unreachable=0 failed=0 -``` - -必要に応じてルータへログインしてコンフィグがUpdateされたか確認してみましょう。 - -``` -[student1@ansible networking-workshop]$ ssh rtr1 +[student1@ansible networking-workshop]$ -rtr1#show running-config ``` ->このホストからの接続はユーザー名、パスワードが必要ありません。 +Feel free to log in and check the configuration update. #### Step 4 -`ios_config`モジュールは冪等性(べきとうせい。常に同じ状態であろうとする性質)を有しています。 -これの意味するところは、機器側のコンフィグに変更が必要な場合(差分が認められる場合)にのみ、Ansibleは変更をPushします。 -冪等性を確認するために、playbookを再実行してみましょう。 +The `ios_config` module is idempotent. This means, a configuration change is +pushed to the device if and only if that configuration does not exist on the +end hosts. To validate this, go ahead and re-run the playbook: ``` shell -[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml +[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml PLAY [UPDATE THE SNMP RO/RW STRINGS] ******************************************************************************************************************************************************** @@ -104,14 +99,18 @@ rtr2 : ok=1 changed=0 unreachable=0 failed=0 rtr3 : ok=1 changed=0 unreachable=0 failed=0 rtr4 : ok=1 changed=0 unreachable=0 failed=0 +[student1@ansible networking-workshop]$ + + + ``` -> Note: **PLAY RECAP** において、**changed** パラメータが0であることに注目してください。playが実行されたが変更は何もなかったことを示しています。 +> Note: See that the **changed** parameter in the **PLAY RECAP** indicates 0 changes. #### Step 5 -もう一つ、SNMP RO ストリングを追加するタスクを追加してみましょう。 +Now update the task to add one more SNMP RO community string: ``` yaml @@ -129,18 +128,20 @@ rtr4 : ok=1 changed=0 unreachable=0 failed=0 - snmp-server community ansible-public RO - snmp-server community ansible-private RW - snmp-server community ansible-test RO + ``` -#### Step 6 +#### Step 6 -今回は、プレイブックを実行して変更を機器にプッシュするのではなく、 `--check`フラグを使って実行します。 -さらに、`-v`(またはverbose mode)フラグと組み合わせて詳細を見てみましょう。 +This time however, instead of running the playbook to push the change to the +device, execute it using the `--check` flag in combination with the `-v` or +verbose mode flag: ``` shell -[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml --check -v +[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml --check -v Using /home/student1/.ansible.cfg as config file PLAY [UPDATE THE SNMP RO/RW STRINGS] ******************************************************************************************************************************************************** @@ -157,24 +158,30 @@ rtr2 : ok=1 changed=1 unreachable=0 failed=0 rtr3 : ok=1 changed=1 unreachable=0 failed=0 rtr4 : ok=1 changed=1 unreachable=0 failed=0 +[student1@ansible networking-workshop]$ + ``` -この`--check`モードと`-v`オプションの組み合わせは、実際に変更を実施することはなく、実行対象になっている機器側での変更点のみを表示させています。 -これは、実際には作業を実施する前に変更点のみを確認することができる非常に優れたテクニックです。 +The `--check` mode in combination with the `-v` flag will display the exact +changes that will be deployed to the end device without actually pushing the +change. This is a great technique to validate the changes you are about to +push to a device before pushing it. + +> Go ahead and log into a couple of devices to validate that the change has not been pushed. -> いずれかの機器(複数でも構いません)へログインして、実際に変更が実施されたかどうかを確認してみてください。 -この後のStep7でplaybook実行時に冪等性の意味が少しわかると思います。 -ポイントとしては、作成されたplaybookの中では3つのコマンドが定義されていますが、まだ実行されていない(機器に設定されていない)コマンド1つだけが実行されるというところです。 +Also note that even though 3 commands are being sent to the device as part +of the task, only the one command that is missing on the devices will be +pushed. #### Step 7 -playbookを再実行します。 -今度は`-v`や`--check`などのオプションは付けずに実行し、機器に対して変更をPushしましょう。 +Finally re-run this playbook again without the `-v` or `--check` flag to +push the changes. ``` shell -[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml +[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml PLAY [UPDATE THE SNMP RO/RW STRINGS] ******************************************************************************************************************************************************** @@ -196,13 +203,10 @@ rtr4 : ok=1 changed=1 unreachable=0 failed=0 #### Step 8 - -個々のコンフィグの行における変更をPushするのではなく、コンフィグレーションの塊をデバイスに対してPushすることもできます。 -playbookと同じディレクトリへ、`secure_router.cfg`というファイルと作成し、次の通りに追記しましょう。 - -```shell -[student1@ansible networking-workshop]$ vim secure_router.cfg -``` +Rather than push individual lines of configuration, an entire configuration +snippet can be pushed to the devices. Create a file called +`secure_router.cfg` in the same directory as your playbook and add the +following lines of configuration into it: ``` shell line con 0 @@ -215,15 +219,17 @@ ip ssh authentication-retries 5 service password-encryption service tcp-keepalives-in service tcp-keepalives-out + ``` #### Step 9 -playbookには、playのリストが含まれるということを忘れないでください。 -`HARDEN IOS ROUTERS`という新しいplayを`router_configs.yml` playbookへ追加します。 +Remember that a playbook contains a list of plays. Add a new play called +`HARDEN IOS ROUTERS` to the `router_configs.yml` playbook. ``` yaml + --- - name: UPDATE THE SNMP RO/RW STRINGS hosts: cisco @@ -245,11 +251,14 @@ playbookには、playのリストが含まれるということを忘れない gather_facts: no connection: network_cli + + ``` #### Step 10 -**STEP 8**で作成した `secure_router.cfg`ファイルの設定をプッシュするために、新しいプレイにタスクを追加します。 +Add a task to this new play to push the configurations in the +`secure_router.cfg` file you created in **STEP 8** ``` yaml @@ -284,10 +293,10 @@ playbookには、playのリストが含まれるということを忘れない #### Step 11 -playbookを実行しましょう。 +Go ahead and run the playbook. ``` shell -[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml +[student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_configs.yml PLAY [UPDATE THE SNMP RO/RW STRINGS] ******************************************************************************************************************************************************** @@ -317,8 +326,8 @@ rtr4 : ok=2 changed=1 unreachable=0 failed=0 # Complete -お疲れ様でした。 -以上でlab exercise 2.0 は終了です。 +You have completed lab exercise 2.0 --- -[ここをクリックすると Ansible Linklight - Networking Workshop へ戻ります](../../README.ja.md) +[Click Here to return to the Ansible Linklight - Networking +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/2-1-backup/README.ja.md b/exercises/ansible_network/supplemental/under_construction/2-1-backup/README.ja.md index 67256074d..4020e2b8e 100644 --- a/exercises/ansible_network/supplemental/under_construction/2-1-backup/README.ja.md +++ b/exercises/ansible_network/supplemental/under_construction/2-1-backup/README.ja.md @@ -1,16 +1,16 @@ -# Exercise 2.1 - Routerのコンフィグをバックアップしてみよう +# Exercise 2.1 - Backing up the router configuration -このシナリオでは、Ciscoルータの設定をバックアップするためのプレイブックを作成します。 -その後の演習で、このバックアップされたコンフィグを利用してデバイスを正常な状態にリストアします。 +In this realistic scenario, you will create a playbook to back-up Cisco +router configurations. In subsequent labs we will use this backed up +configuration, to restore devices to their known good state. -> Note: おそらく、ほとんどすべてのNetworkチームにおいて、このようなDay 2 オペレーション手順が存在しているのではないでしょうか。 -> この演習のコンテンツをほとんどそのまま再利用することで、みなさんの環境にも適用できるかもしれません。 +> Note: Since this is a common day 2 operation for most network teams, you can pretty much re-use most of this content for your environment with minimum changes. #### Step 1 -`backup.yml`という新しいファイルを作成し、以下と同じようにplayを定義してください。 -(これまでの章と同じく好きなエディタを用いてください) +Create a new file called `backup.yml` using your favorite text editor and +add the following play definition: ``` yaml --- @@ -23,12 +23,14 @@ #### Step 2 -`ios_config`モジュールを用いて、新しいtaskを記述します。 -このタスクは`cisco`グループと定義された全ての機器からバックアップを取得するという内容です。 +Use the `ios_config` Ansible module to write a new task. This task should +back up the configuration of all devices defined in `cisco` group. -`backup` パラメータは自動的に`backup`というディレクトリをplaybookと同一のフォルダに作成し、バックアップが実行されたタイムスタンプを付けてコンフィグレーションのバックアップを保存します。 +The `backup` parameter automatically creates a directory called `backup` +within the playbook root and saves a time-stamped backup of the running +configuration. -> Note: **ansible-doc ios_config** コマンドを実行するか、**docs.ansible.com**を確認することで、モジュールの利用方法を確認できます。 +> Note: Use **ansible-doc ios_config** or check out **docs.ansible.com** for help on the module usage. ``` yaml @@ -45,14 +47,14 @@ register: config_output ``` -なぜ、このタスクの中で`config_output`という変数を定義しているのでしょうか? -**Step 5**にてそれが明らかになります。 +Why are we capturing the output of this task into a variable called +`config_output`? **Step 5** will reveal this. #### Step 3 -playbookを実行して、次に進みましょう。 +Go ahead and run the playbook: ``` shell [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts backup.yml @@ -78,7 +80,8 @@ rtr4 : ok=1 changed=0 unreachable=0 failed=0 #### Step 4 -プレイブックは `backup`というディレクトリを作成しました。次にこのディレクトリの内容をリストします。 +The playbook should now have created a directory called `backup`. Now, list +the contents of this directory: ``` shell @@ -92,19 +95,22 @@ total 1544 ``` -任意のバックアップされたファイルをエディターなどで開いて、きちんとバックアップが取れているのかを検証してみてください。 +Feel free to open up these files using a text editor (`vim` & `nano` work as +well) to validate their content. #### Step 5 -この先、バックアップしたコンフィグをリストア用途で用いるかもしれません。 -バックアップしたファイルを機器名称でリネームしておきましょう。 +Since we will be using the backed up configurations as a source to restore +the configuration. Let's rename them to reflect the device name. + +In **Step 2** you captured the output of the task into a variable called +`config_output`. This variable contains the name of the backup file. Use the +`copy` Ansible module to make a copy of this file. -**Step 2**において、タスクの出力結果を`config_output`という変数名称に取り込んでいました。 -この変数には、バックアップしたファイルの名前が含まれています。 -`copy`モジュールを用いて、このファイルのコピーを作成してみましょう。 ``` yaml +{%raw%} --- - name: BACKUP ROUTER CONFIGURATIONS hosts: cisco @@ -121,12 +127,15 @@ total 1544 copy: src: "{{config_output.backup_path}}" dest: "./backup/{{inventory_hostname}}.config" +{%endraw%} ``` #### Step 6 -再度playbookを実行してみます。 +Re-run the playbook. + + ``` shell [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts backup.yml @@ -157,7 +166,7 @@ rtr4 : ok=2 changed=1 unreachable=0 failed=0 #### Step 7 -もう一度 `backup`ディレクトリの内容をリストしてみましょう。 +Once again list the contents of the `backup` directory: ``` shell [student1@ansible networking-workshop]$ ls -l backup @@ -174,13 +183,16 @@ total 3088 ``` -ディレクトリには別のバックアップされたコンフィグファイルがありますが、デバイスの名前のみが反映されたファイルがあるということに注意してください。 +Notice that the directory now has another backed-up configuration but one +that reflects the device's name. -#### Step 8 +#### Step 8 -取得したファイルの内容でそれぞれのデバイスを手動でリストアしようとすると、コンフィグにエラーが発生する行が2箇所あります。 +If we were to try and manually restore the contents of this file to the +respective device there are two lines in the configuration that will raise +errors: ``` shell Building configuration... @@ -188,12 +200,14 @@ Building configuration... Current configuration with default configurations exposed : 393416 bytes ``` +These lines have to be "cleaned up" to have a restorable configuration. -これらの邪魔な行を避けてリストア可能なコンフィグとするためには、"クリーンナップ"を実行する必要があります。 +Write a new task using Ansible's `lineinfile` module to remove the first +line. -Ansibleの`lineinfile` モジュールを利用して新しいタスクを作成することで、最初の行を削除することができます。 ``` yaml +{%raw%} --- - name: BACKUP ROUTER CONFIGURATIONS hosts: cisco @@ -216,19 +230,24 @@ Ansibleの`lineinfile` モジュールを利用して新しいタスクを作成 path: "./backup/{{inventory_hostname}}.config" line: "Building configuration..." state: absent +{%endraw%} ``` -> Note: モジュールのパラメータ **line** は、指定されたファイルにおいて"Building configuration ..."と一致している行があるかを検索し、`absent`(不在/欠けている)状態にします。 + +> Note: The module parameter **line** is matching an exact line in the configuration file "Building configuration..." #### Step 9 -playbookを実行する前に、もう一つタスクを追加し、2つ目の不要な行("Current configuration ...etc")を削除する必要があります。 -しかし、この行には可変データ(バイト数)があるので、先ほどのように`lineinfile`モジュールと`line`パラメータを用いることはできません。 -その代わりに、 `regexp`パラメータを使用して正規表現で照合し、ファイル内の行を削除します: +Before we run the playbook, we need to add one more task to remove the +second line "Current configuration ...etc". Since this line has a variable +entity (the number of bytes), we cannot use the `line` parameter of the +`lineinfile` module. Instead, we'll use the `regexp` parameter to match on +regular expressions and remove the line in the file: ``` yaml +{%raw%} --- - name: BACKUP ROUTER CONFIGURATIONS hosts: cisco @@ -257,12 +276,13 @@ playbookを実行する前に、もう一つタスクを追加し、2つ目の path: "./backup/{{inventory_hostname}}.config" regexp: 'Current configuration.*' state: absent +{%endraw%} ``` #### Step 10 -では、playbookを実行してみましょう。 +Now run the playbook. ``` shell @@ -307,8 +327,8 @@ rtr4 : ok=4 changed=3 unreachable=0 failed=0 #### Step 11 -エディタを利用してファイルの中を確認してみましょう。 -先ほどまであった最初の2行が削除されているはずです。 +Use an editor to view the cleaned up files. The first 2 lines that we +cleaned up in the earlier tasks should be absent: ``` shell [student1@ansible networking-workshop]$ head -n 10 backup/rtr1.config @@ -322,15 +342,16 @@ no service log backtrace no service config no service exec-callback no service nagle +[student1@ansible networking-workshop]$ ``` -> Note: **head** というunixコマンドは引数で指定されたn行目までを表示します。 +> Note: The **head** unix command will display the first N lines specified as an argument. # Complete -お疲れ様でした。 -以上でlab exercise 2.1 は終了です。 +You have completed lab exercise 2.1 --- -[ここをクリックすると Ansible Linklight - Networking Workshop へ戻ります](../../README.ja.md) +[Click Here to return to the Ansible Linklight - Networking +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/2-2-restore/README.ja.md b/exercises/ansible_network/supplemental/under_construction/2-2-restore/README.ja.md index 9631744b5..803f3201b 100644 --- a/exercises/ansible_network/supplemental/under_construction/2-2-restore/README.ja.md +++ b/exercises/ansible_network/supplemental/under_construction/2-2-restore/README.ja.md @@ -1,11 +1,13 @@ -# Exercise 2.2 - バックアップしたコンフィグでRouterをリストアしてみよう +# Exercise 2.2 - Using Ansible to restore the backed up configuration + + +In the previous lab you learned how to backup the configuration of the 4 +cisco routers. In this lab you will learn how to restore the +configuration. The backups had been saved into a local directory called +`backup`. -ここまでの演習で、4つのCiscoルータのコンフィグをバックアップする方法を学びました。 -この演習では、どのようにリストアをするのか?を学習します。 -バックアップファイルは、Anisbleノードの`backup`ディレクトリへ格納されています。 ``` -[student1@ansible networking-workshop]$ tree backup backup ├── rtr1.config ├── rtr1_config.2018-06-07@20:36:05 @@ -15,18 +17,20 @@ backup ├── rtr3_config.2018-06-07@20:36:04 ├── rtr4.config └── rtr4_config.2018-06-07@20:36:06 -``` +``` -我々の目的は、"最後に動いていた状態のバックアップ"をルータへ適用するということです。 +Our objective is to apply this "last known good configuraion backup" to the +routers. #### Step 1 -いずれかのルータ(ここでは`rtr1`を例)の設定を、マニュアルで変更してみましょう。 -ルータ上で、新しいloopback interfaceを設定します。 -`ssh rtr1`コマンドを実行して`rtr1`へログインし、以下の通りにコンフィグを追加します。 +On one of the routers (`rtr1`) manually make a change. For instance add a +new loopback interface. + +Log into `rtr1` using the `ssh rtr1` command and add the following: ``` rtr1#config terminal @@ -38,7 +42,7 @@ rtr1# ``` -新しく作成されたloopback interfaceを確認してみましょう。 +Now verify the newly created Loopback Interface ``` rtr1#sh run interface loopback 101 @@ -54,11 +58,12 @@ rtr1# ``` #### Step 2 -Step 1では、マニュアルオペレーションによって想定外の変更がNetwork機器上に発生したことをシミュレーションしました。 -この変更はリバートされる必要があります。 -そのためには、新しいplaybookを作成し、直前の演習で取得したバックアップを適用できるようにしましょう。 +Step 1 simulates our "Out of process/band" changes on the network. This +change needs to be reverted. So let's write a new playbook to apply the +backup we collected from our previous lab to achieve this. -新しく`restore_config.yml`というファイルを作成し、新しいplayを以下のように定義します。 +Create a file called `restore_config.yml` using your favorite text editor +and add the following play definition: ``` yaml --- @@ -72,10 +77,11 @@ Step 1では、マニュアルオペレーションによって想定外の変 #### Step 3 -以前にバックアップしたファイルをルータにコピーするタスクを記述します。 +Write the task to copy over the previously backed up configuration file to +the routers. -{%raw%} ``` yaml +{%raw%} --- - name: RESTORE CONFIGURATION hosts: cisco @@ -85,17 +91,16 @@ Step 1では、マニュアルオペレーションによって想定外の変 tasks: - name: COPY RUNNING CONFIG TO ROUTER command: scp ./backup/{{inventory_hostname}}.config {{inventory_hostname}}:/{{inventory_hostname}}.config -``` + {%endraw%} +``` -> Note: **inventory_hostname**変数の利用方法に注意してください。 -> インベントリーファイル内でciscoグループに定義されているそれぞれのデバイスへ、このタスクによって各デバイスのbootflash上へバックアップコンフィグが直接SCPでコピーされ渡されます。 +> Note the use of the **inventory_hostname** variable. For each device in the inventory file under the cisco group, this task will secure copy (scp) over the file that corresponds to the device name onto the bootflash: of the CSR devices. #### Step 4 -続いてplaybookを実行してみましょう。 - +Go ahead and run the playbook. ``` [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts restore_config.yml @@ -116,14 +121,16 @@ rtr4 : ok=1 changed=1 unreachable=0 failed=0 [student1@ansible networking-workshop]$ + + ``` #### Step 5 -ルータへログインして、ファイルがコピーされたことを確認してみましょう。 +Log into the routers to check that the file has been copied over -> Note bootflash:/ディレクトリの一番下に**rtr1.config**があるはずです。 +> Note **rtr1.config** at the bottom of the bootflash:/ directory ``` [student1@ansible networking-workshop]$ ssh rtr1 @@ -166,12 +173,14 @@ rtr1# #### Step 6 -かつて動いていたはずのコンフィグが送付先のデバイス上にあることが確認できました。 -新しいtaskをplaybookへ追加して、running-configをコピーしたものに入れ替えましょう。 +Now that the known good configuration is on the destination devices, add a +new task to the playbook to replace the running configuration with the one +we copied over. + -{%raw%} ``` yaml +{%raw%} --- - name: RESTORE CONFIGURATION hosts: cisco @@ -186,16 +195,17 @@ rtr1# ios_command: commands: - config replace flash:{{inventory_hostname}}.config force -``` + {%endraw%} +``` -> Note: Cisco機器が持っている**archive**機能を利用していることに注意してください。 -> config replaceコマンドは全てのコンフィグの入れ替えを実施せず、差分のみを更新します。 + +> Note: Here we take advantage of Cisco's **archive** feature. The config replace will only update the differences to the router and not really a full config replace. #### Step 7 -アップデートされたplaybookを実行してみましょう。 +Let's run the updated playbook: ``` @@ -230,11 +240,16 @@ rtr4 : ok=2 changed=1 unreachable=0 failed=0 #### Step 8 -我々がマニュアルオペレーションによるミスで**Step 1**にて追加してしまったインターフェースが存在していないことを確認してみてください。 + +Validate that the new loopback interface we added in **Step 1** is no longer +on the device. + ``` [student1@ansible networking-workshop]$ ssh rtr1 + + rtr1#sh ip int br Interface IP-Address OK? Method Status Protocol GigabitEthernet1 172.16.165.205 YES DHCP up up @@ -243,7 +258,8 @@ Loopback1 10.1.1.101 YES manual up up Tunnel0 10.100.100.1 YES manual up up Tunnel1 10.200.200.1 YES manual up up VirtualPortGroup0 192.168.35.101 YES TFTP up up - +rtr1#sh run inter +rtr1#sh run interface Loo rtr1#sh run interface Loopback 101 ^ % Invalid input detected at '^' marker. @@ -252,13 +268,14 @@ rtr1# ``` -上記の出力結果は、Loopback 101 interfaceがもはや存在していないことを示しています。 -あなたはCiscoルータのコンフィグのバックアップと、リストア作業の自動化に成功しました! +The output above shows that the Loopback 101 interface is no longer present, +you have successfully backed up and restored configurations on your Cisco +routers! # Complete -お疲れ様でした。 -以上でlab exercise 2.2 は終了です。 +You have completed lab exercise 2.2 --- -[ここをクリックすると Ansible Linklight - Networking Workshop へ戻ります](../../README.ja.md) +[Click Here to return to the Ansible Linklight - Networking +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/3-0-templates/README.ja.md b/exercises/ansible_network/supplemental/under_construction/3-0-templates/README.ja.md index 62eda549e..1fe766387 100644 --- a/exercises/ansible_network/supplemental/under_construction/3-0-templates/README.ja.md +++ b/exercises/ansible_network/supplemental/under_construction/3-0-templates/README.ja.md @@ -1,19 +1,36 @@ -# Exercise 3.0 - Jinja2 によるテンプレート処理のご紹介 +# Exercise 3.0 - An introduction to templating with Jinja2 -一般的に言えば、ネットワーク自動化について言及する時、具体的にはネットワーク装置の構成管理にフォーカスされがちです。 -このラボでは Ansible を活用して現状確認と動的なドキュメント生成を行う方法についても学習していきます。 -これにより同じ情報を使用してレポートやドキュメントを作成することが可能となり、キーボードが好きなネットワークエンジニアのニーズに答えることが出来ます。そしてネットワークエンジニアが作ったネットワークの状態に対するレポートを、マネージャー層が理解する必要がある場合においてもWebページであれば一目瞭然です。 +Generally speaking, when one talks about network automation the focus is +specifically around configuration management of devices. In this lab you +will learn how to use Ansible as a tool to generate living, dynamic +documentation. + +This allows the ability to generate reports and documents, using the same +information and can cater to the needs of a hands-on-keyboard network +engineer to a manager who needs to understand the state of the network with +a glance of a web-page! + + +[Jinja2](http://jinja.pocoo.org/docs/2.10/) is a powerful templating engine +for Python. There is native integration of Jinja2 with Ansible. Jinja2 +allows for manipulating variables and implementing logical constructs. In +combination with the Ansible `template` module, the automation engineer has +a powerful tool at their disposal to generate live or dynamic reports. + + +In this lab you will learn how to use the `template` module to pass +collected data from devices to a Jinja2 template. The template module then +renders the output as a `markdown` file. -Python で使われている [Jinja2](http://jinja.pocoo.org/docs/2.10/) は、とてもパワフルなテンプレートエンジンです。Ansible では Jinja2 のネイティブ実装を採用しています。Jinja2 を使うことで変数の操作や、論理構造の実装が可能になります。Ansible の `template` モジュールと組み合わせることで、自動化に取り組むエンジニアが動的なレポート生成する場合において強力なツールとなることでしょう。 -このラボでは、`template` モジュールを使ってネットワーク装置から収集したデータを Jinja2 テンプレートと一緒に処理する方法を学習していきます。`template` モジュールを使って Markdown ファイルとして出力します。 #### Step 1 -まず最初に `router_report.yml` というファイル名の新しい Playbook を作っていきましょう。最初に次の内容を Playbook に記述してください。 +Create a new playbook called `router_report.yml` and add the following play +definition to it: + -{% raw %} ``` yaml --- - name: GENERATE OS REPORT FROM ROUTERS @@ -21,14 +38,14 @@ Python で使われている [Jinja2](http://jinja.pocoo.org/docs/2.10/) は、 connection: network_cli gather_facts: no ``` -{% endraw %} #### Step 2 -`ios_facts` モジュールを使って facts を収集するタスクを追加します。これまでのラボで、このモジュールを使用した演習を思い出してください。 +Add a task that collects the facts using the `ios_facts` module. Recollect +that we used this module in an earlier lab. + -{% raw %} ``` yaml --- - name: GENERATE OS REPORT FROM ROUTERS @@ -41,16 +58,20 @@ Python で使われている [Jinja2](http://jinja.pocoo.org/docs/2.10/) は、 ios_facts: ``` -{% endraw %} -> **facts** モジュールは実行時に **ansible_net_version** と **ansible_net_serial_number** の変数を自動的に設定する事を思い出してください。これを検証するには `-v` オプションを付けて verbose モードで Playbook を実行してください。 +> Recall that the **facts** modules automatically populate the **ansible_net_version** and **ansible_net_serial_number** variables within the play. You can validate this by running the playbook in verbose mode. + + + #### Step 3 -ここでは debug モジュールか verbose モードで出力結果を画面で見るのではなく、次のように template モジュールを使って新しいタスクを追加していきます。 +Rather than using debug or verbose mode to display the output on the screen, +go ahead and add a new task using the template module as follows: + -{% raw %} ``` yaml +{%raw%} --- - name: GENERATE OS REPORT FROM ROUTERS hosts: cisco @@ -71,39 +92,52 @@ Python で使われている [Jinja2](http://jinja.pocoo.org/docs/2.10/) は、 template: src: os_report.j2 dest: reports/{{ inventory_hostname }}.md - +{%endraw%} ``` -{% endraw %} -ここで少しタスクを詳しく解説していきましょう。`template` モジュールには `os_report.j2` の値を持つ `src` パラメーターがあります。次からのステップでは、このファイルを Jinja2 テンプレート形式で作っていきます。`dest` パラメーターで指定した任意のファイル名でレポートファイルを生成します。 + + +Let's break this task down a bit. The `template` module has a `src` +parameter that has a value of `os_report.j2`. In the next few steps, we will +create this file. This will be the Jinja2 template, used to generate the +desired report. The `dest` parameter specifies the destination file name to +render the report into. #### Step 4 -次のステップでは Jinja2 テンプレートを作っていきましょう。Ansible はカレントの作業ディレクトリの中に `templates` ディレクトリがあるかを自動的に探します。ベストプラクティスとしては `templates` ディレクトリにテンプレートファイルを作成することです。 -`vi` や `nano`、もしくはお好みのテキストエディターを使って `templates` の中にある `os_report.j2` を作成してください。ファイルの内容としては次のとおりです。 +The next step is to create a Jinja2 template. Ansible will look for the +template file in the current working directory and within a directory called +`templates` automatically. Convention/best-practice is to create the +template file within the templates directory. -```shell -[student1@ansible networking-workshop]$ vim templates/os_report.j2 -``` +Using `vi`, `nano` or another text editor, go ahead and create the file +called `os_report.j2` under the `templates` directory. Add the following +into the template file: -{% raw %} + +{%raw%} ``` python + + {{ inventory_hostname.upper() }} --- {{ ansible_net_serialnum }} : {{ ansible_net_version }} -``` -{% endraw %} -このファイルには、今までの演習の Playbook で使用した変数が含まれています。 -> 注記: データ型のための Python 組み込みのメソッドは、Jinja2 からネイティブに使用できます。これにより書式設定などの操作が非常に簡単になります。 + +``` +{%endraw%} +This file simply contains some of the variables we have been using in our +playbooks until now. + +> Note: Python inbuilt methods for datatypes are available natively in Jinja2 making it very easy to manipulate the formatting etc. #### Step 5 -では、Playbook を実行してみましょう。 +With this in place, go ahead and run the playbook: ``` shell [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_report.yml @@ -132,15 +166,17 @@ rtr3 : ok=2 changed=1 unreachable=0 failed=0 rtr4 : ok=2 changed=1 unreachable=0 failed=0 [student1@ansible networking-workshop]$ + ``` #### Step 6 -Playbook を実行した後、reports ディレクトリに次のファイルが生成されます。 +After the playbook run, you should see the following files appear in the +reports directory: + ``` shell -[student1@ansible networking-workshop]$ tree reports reports/ ├── rtr1.md ├── rtr2.md @@ -148,9 +184,10 @@ reports/ └── rtr4.md 0 directories, 4 files + ``` -例として、1つレポートの中身を確認してみましょう。 +The contents of one of them for example: ``` shell [student1@ansible networking-workshop]$ cat reports/rtr4.md @@ -166,10 +203,15 @@ RTR4 #### Step 7 -データが取れたことは良いことですが、これらの個々のルーターレポートを1つのレポートに結合する方が良いでしょう。それを行うための新しいタスクを追記していきます。 -{% raw %} +While it is nice to have the data, it would be even better to consolidate +all these individual router reports into a single document. Let's add a new +task to do that + + + ``` yaml +{%raw%} --- - name: GENERATE OS REPORT FROM ROUTERS hosts: cisco @@ -197,17 +239,22 @@ RTR4 dest: network_os_report.md delegate_to: localhost run_once: yes - +{%endraw%} ``` -{% endraw %} -ここでは `assemble` モジュールを使います。`src` パラメーターで結合するファイルを含むディレクトリを指定し、`dest` パラメーターで生成する先のファイルを指定します。 -> 注記: **delegate_to** を使用して、ローカルで実行する必要のあるタスクを指定できます。**run_once** の指示により与えられたタスクが一度だけ実行されることを保証します。 +Here we are using the `assemble` module. The `src` parameter specifies the +directory that contain file fragments that need to be consolidated and the +`dest` parameter provides the file to render the fragments into. + +> Note: The **delegate_to** can be used to specify tasks that need to be executed locally. The **run_once** directive will ensure that the given task is executed only once. + + + #### Step 8 -それでは Playbook を実行してみましょう。 +Go ahead and run the playbook. ``` shell [student1@ansible networking-workshop]$ ansible-playbook -i lab_inventory/hosts router_report.yml @@ -239,42 +286,62 @@ rtr3 : ok=2 changed=1 unreachable=0 failed=0 rtr4 : ok=2 changed=1 unreachable=0 failed=0 [student1@ansible networking-workshop]$ + ``` + + #### Step 9 -`network_os_report.md` という新しいファイルが作られました。Playbook が格納されているディレクトリのルートに作られます。中身を確認してみましょう。 +A new file called `network_os_report.md` will now be available in the +playbook root. Use the `cat` command to view it's contents: + ``` shell [student1@ansible networking-workshop]$ cat network_os_report.md + RTR1 --- 9YJXS2VD3Q7 : 16.08.01a + + RTR2 --- 9QHUCH0VZI9 : 16.08.01a + + RTR3 --- 9ZGJ5B1DL14 : 16.08.01a + + RTR4 --- 9TCM27U9TQG : 16.08.01a +[student1@ansible networking-workshop]$ + ``` -> 注記: Markdown ファイルは HTML のように整形して表示することが可能です +> Note: Markdown files can be rendered visually as HTML -ここでポイントです。3つの小さなタスクによって、あなたが管理するネットワーク上の IOS を搭載するすべての装置からレポートを得ることができました。これは簡単な例ですが、他に何か拡張する際の原則は変わりません。たとえば、デバイスの `show` コマンドの出力に依存する状態レポートやダッシュボードを作成することができます。 +At this point, with 3 small tasks, you have an OS report on all the IOS +devices in your network. This is a simple example but the principle remains +as you expand upon the capabilities. For example, you can build status +reports and dashboards that rely on the output of device show commands. -この演習で体感頂いたように、Ansibleは、構成管理以外のネットワーク自動化はもちろんのこと、ドキュメントやレポートの生成などに用途を拡張するためのツールと手法も提供します。 +Ansible provides the tools and methods to extend network automation beyond +configuration management to more robust capabilities, such as, generating +documentation and or reports. # Complete -ラボの Exercise 3.0 が完了しました。 +You have completed lab exercise 3.0 --- -[Ansible Linklight - Networking Workshop に戻るにはクリックしてください](../../README.ja.md) +[Click Here to return to the Ansible Linklight - Networking +Workshop](../../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/5-0-httpapi/README.ja.md b/exercises/ansible_network/supplemental/under_construction/5-0-httpapi/README.ja.md new file mode 100644 index 000000000..41b17661c --- /dev/null +++ b/exercises/ansible_network/supplemental/under_construction/5-0-httpapi/README.ja.md @@ -0,0 +1,129 @@ +# Exercise 5-0: The httpapi connection plugin + +## Table of Contents + +- [Objective](#objective) - [Guide](#guide) - [Playbook +Output](#playbook-output) - [Solution](#solution) + +# Objective + +Demonstrate the use of the [httpapi connection +plugin](https://docs.ansible.com/ansible/latest/plugins/connection/httpapi.html) +to connection to, run a command and display network output to the terminal +window. + +# Guide + +## Step 1: + +Using your text editor of choice create a new file called `httpapi.yml`. + +``` +[student1@ansible ~]$ nano httpapi.yml +``` + +>`vim` and `nano` are available on the control node, as well as Visual Studio and Atom via RDP + +## Step 2: + +Ansible playbooks are **YAML** files. YAML is a structured encoding format +that is also extremely human readable (unlike it's subset - the JSON +format). + +Enter the following play definition into `httpapi.yml`: + +``` yaml +--- +- name: TURN ON HTTPAPI CONNECTION PLUGINS + hosts: arista + gather_facts: false +``` + +- The `---` at the top of the file indicates that this is a YAML file. - +Always give your playbooks and tasks good, descriptive names. These names +form part of the playbook output. - The `hosts: arista`, indicates the play +is run only on the Arista network switches (this is pre-setup in inventory +via `~/networking-workshop/lab_inventory/hosts`) - `gather_facts: no` +disables facts gathering. We are not using any fact variables for this +playbook. + +> One of the most common errors in YAML files is caused by incorrect spacing. See [Yaml Files in a Nutshell]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/getting_started_with_kubernetes/yaml_in_a_nutshell for a good overview of YAML files. + +## Step 3 + +Next, add the first `task`. This task will use the [eos_eapi +module](https://docs.ansible.com/ansible/latest/modules/eos_eapi_module.html) +to turn on Arista eAPI. This task has no required parameters, the defaults +will be sufficient for the exercise. + +```yaml +--- +- name: TURN ON HTTPAPI CONNECTION PLUGINS + hosts: arista + gather_facts: false + tasks: + - name: TURN ON EAPI + eos_eapi: +``` + +## Step 4 + +Run the playbook - exit back into the command line of the control host and +execute the following: + +``` +[student1@ansible ~]$ ansible-playbook debug.yml +``` +# Playbook Output + +The output will look as follows. + +```yaml +[student1@ansible ~]$ ansible-playbook httpapi.yml + +PLAY [arista] ****************************************************************** + +TASK [TURN ON EAPI] ************************************************************ +changed: [rtr2] +changed: [rtr4] + +PLAY RECAP ********************************************************************* +rtr2 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 +rtr4 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 +``` +> Notice that the names you gave the play and task appear in this output. This is especially important when you have longer playbooks that include multiple tasks. + +## Step 5 + +Modify the inventory to change the default connection plugin to httpapi. + +``` +[student1@ansible ~]$ nano ~/networking-workshop/lab_inventory/hosts +``` + +Modify the `[arista:vars]` section and change ansible_connection=network_cli +to ansible connection=httpapi. + +``` +[arista:vars] +ansible_user=ec2-user +ansible_network_os=eos +ansible_connection=httpapi +ansible_become=true +ansible_become_method=enable +ansible_httpapi_use_ssl=true +ansible_httpapi_validate_certs=false +```` + +Save the file and return to the Linux CLI. + +You can verify the eAPI is setup correctly with the `show management api +http-commands` + +# Solution +The finished Ansible Playbook is provided here for an Answer key. + + + +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/5-1-json/README.ja.md b/exercises/ansible_network/supplemental/under_construction/5-1-json/README.ja.md new file mode 100644 index 000000000..1ef3223e9 --- /dev/null +++ b/exercises/ansible_network/supplemental/under_construction/5-1-json/README.ja.md @@ -0,0 +1,155 @@ +# Exercise 5-1: Working with JSON Output + +## Table of Contents + +- [Objective](#objective) - [Guide](#guide) - [Playbook +Output](#playbook-output) - [Solution](#solution) + +# Objective + +Demonstrate the advantage of using structured output (in this case JSON) and +pulling out useful information with show commands. + +# Guide + +## Step 1: + +Using your text editor of choice create a new file called `json.yml`. + +``` +[student1@ansible ~]$ nano json.yml +``` + +>`vim` and `nano` are available on the control node, as well as Visual Studio and Atom via RDP + +## Step 2: + +Enter the following play definition into `json.yml`: + +``` yaml +--- +- name: JSON EXAMPLE + hosts: arista + gather_facts: no +``` + +- The `---` at the top of the file indicates that this is a YAML file. - +Always give your playbooks and tasks good, descriptive names. These names +form part of the playbook output. - The `hosts: arista`, indicates the play +is run only on the Arista network switches (this is pre-setup in inventory +via `~/networking-workshop/lab_inventory/hosts`) - `gather_facts: no` +disables facts gathering. We are not using any fact variables for this +playbook. + +## Step 3 + +Next, add the first `task`. This task will use the [eos_command +module](https://docs.ansible.com/ansible/latest/modules/eos_command_module.html) +to run an arbitrary command. Using the pipe json (`| json`) it is possible +to return the command in structured data. + +```yaml +--- +- name: JSON EXAMPLE + hosts: arista + gather_facts: no + + tasks: + + - name: RUN ARISTA COMMAND + eos_command: + commands: show interfaces eth1 | json + register: command_output +``` + +## Step 4 + +Add an additional task to print the output to the terminal window using the +debug module. + +``` +--- +- name: RUN COMMAND AND PRINT TO TERMINAL WINDOW + hosts: arista + gather_facts: false + + tasks: + + - name: RUN ARISTA COMMAND + eos_command: + commands: show interfaces eth1 | json + register: command_output + + - name: PRINT TO TERMINAL WINDOW + debug: + msg: "{{command_output.stdout}}" +``` + +## Step 5 + +Run the playbook - exit back into the command line of the control host and +execute the following: + +``` +[student1@ansible ~]$ ansible-playbook json.yml +``` +# Playbook Output + +The output will look as follows. + +```yaml +[student1@ansible ~]$ ansible-playbook json.yml + +PLAY [RUN COMMAND AND PRINT TO TERMINAL WINDOW] *********************************************************************************************************** + +TASK [RUN ARISTA COMMAND] ********************************************************************************************************************************* +ok: [rtr2] +ok: [rtr4] + +TASK [PRINT TO TERMINAL WINDOW] *************************************************************************************************************************** +ok: [rtr2] => + msg: + - interfaces: + Ethernet1: + autoNegotiate: success + bandwidth: 1000000000 + burnedInAddress: 02:f3:9e:70:cf:12 + description: '' + duplex: duplexFull + +<<<>>> +``` + +## Step 6 + +Now that structured output can be used, it is trivial to keep honing in on +the value you want. For example in the output above + +``` + - interfaces: + Ethernet1: + autoNegotiate: success + bandwidth: 1000000000 + burnedInAddress: 02:f3:9e:70:cf:12 +``` + +to return the MAC address or what Arista is calling the `burnedInAddress` the following would work-> + +``` +command_output.stdout[0].Ethernet1.burnedInAddress +``` +which would return `02:f3:9e:70:cf:12`. + +## Step 7 + +Without looking at the solution guide try to print out the IPv4 address. + + +# Solution +The finished Ansible Playbook is provided here for an Answer key. +[json.yml](json.yml) + + + +You have finished this exercise. [Click here to return to the lab +guide](../README.md) diff --git a/exercises/ansible_network/supplemental/under_construction/README.ja.md b/exercises/ansible_network/supplemental/under_construction/README.ja.md index 34c189a50..ec94b69b8 100644 --- a/exercises/ansible_network/supplemental/under_construction/README.ja.md +++ b/exercises/ansible_network/supplemental/under_construction/README.ja.md @@ -1,36 +1,24 @@ -# Ansible Linklight - Networking +## Additional Ansible Network Automation Exercises -このコンテンツは、Ansibleのネットワーク機器向け機能(Arista, Cisco, Cumulus, Juniper etc)の効果的なデモやワークショップトレーニング(講師による講義、ハンズあるいはセルフスタディ)の為の多目的ツールキットです。 +### Section 01 - Using Ansible to gather data from network devices +- [Exercise 1.0 - Exploring the lab environment](1-0-explore) - [Exercise +1.1 - Writing your first playbook](1-1-first-playbook) - [Exercise 1.2 - +Module documentation, Registering output & tags](1-2-playbook-basics) -## Presentation -プレゼンテーション用のスライドが必要ですか? -こちらを確認ください。: -[Ansible Networking Linklight Deck](../../decks/ansible_network.pdf) +### Section 02 - Using Ansible to configure, backup and restore +- [Exercise 2.0 - Updating the router configurations using +Ansible](2-0-config) - [Exercise 2.1 - Backing up the router +configuration](2-1-backup/) - [Exercise 2.2 - Using Ansible to restore the +backed up configuration](2-2-restore) -## Ansible Network Automation Exercises +### Section 03 - Using Ansible to parse information for reporting +- [Exercise 3.0 - An introduction to templating with Jinja2](3-0-templates) +- [Exercise 3.1 - Building dynamic documentation using the command +parser](3-1-parser/) -### Section 01 - Ansibleを用いたネットワーク機器からのデータ取集 -- [Exercise 1.0 - Anisbleのlab環境を確認してみよう](1-0-explore/README.ja.md) -- [Exercise 1.1 - 初めてのplaybookを書いてみよう](1-1-first-playbook/README.ja.md) -- [Exercise 1.2 - Moduleのドキュメントの確認方法、 出力結果の登録方法、 tagの使い方](1-2-playbook-basics/README.ja.md) - -### Section 02 - Ansibleを用いたコンフィグ・バックアップ・リストアの実践 -- [Exercise 2.0 - Routerのコンフィグを更新してみよう](2-0-config/README.ja.md) -- [Exercise 2.1 - Routerのコンフィグをバックアップしてみよう](2-1-backup/README.ja.md) -- [Exercise 2.2 - バックアップしたコンフィグでRouterをリストアしてみよう](2-2-restore/README.ja.md) - -### Section 03 - Ansibleを使ってレポート作成するための情報抽出 -- [Exercise 3.0 - Jinja2 によるテンプレート処理のご紹介](3-0-templates/README.ja.md) -- [Exercise 3.1 - コマンドパーザーを使って動的なドキュメントを生成する](3-1-parser/README.ja.md) - -## Network Diagram この演習のNW構成図 -![Red Hat Ansible Automation](../../images/network_diagram.png) - -## 追加情報 - - [Network Automation with Ansible Homepage](https://www.ansible.com/network-automation) - - [AnsibleのNetwork用Moduleを見てみる](http://docs.ansible.com/ansible/latest/list_of_network_modules.html) - - [Moduleのメンテナンス と Supportについて見てみる](http://docs.ansible.com/ansible/latest/modules_support.html) - - [Network Automation GitHub レポジトリを見てみる](https://github.com/network-automation) +## Network Diagram +![Red Hat Ansible Automation](../../../images/network_diagram.png) --- -![Red Hat Ansible Automation](../../../images/rh-ansible-automation-platform.png) +![Red Hat Ansible +Automation](../../../images/rh-ansible-automation-platform.png) diff --git a/exercises/ansible_rhel/1.1-setup/README.ja.md b/exercises/ansible_rhel/1.1-setup/README.ja.md index 6bb16e201..ad008ab42 100644 --- a/exercises/ansible_rhel/1.1-setup/README.ja.md +++ b/exercises/ansible_rhel/1.1-setup/README.ja.md @@ -1,16 +1,19 @@ -# Workshop Exercise - Check the Prerequisites +# ワークショップ演習 - 前提条件の確認 -**その他の言語はこちらをお読みください。**: -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) -* [ラボ環境](#your-lab-environment) -* [Step 1 - ラボ環境へのアクセス](#step-1---access-the-environment) -* [Step 2 - ラボの作業](#step-2---working-the-labs) -* [Step 3 - チャレンジラボ](#step-3---challenge-labs) + * [ラボ環境](#your-lab-environment) + * [ステップ 1 - 環境へのアクセス](#step-1---access-the-environment) + * [ステップ 2 - ターミナルの使用](#step-2---using-the-terminal) + * [ステップ 3 - 実行環境の検証](#step-3---examining-execution-environments) + * [ステップ 4 - ansible-navigator + 設定の検証](#step-4---examining-the-ansible-navigator-configuration) + * [ステップ 5 - チャレンジラボ](#step-5---challenge-labs) ## 目的 @@ -18,6 +21,27 @@ * ワークショップの演習の仕組みを理解する。 * チャレンジラボについて理解する。 +この最初のいくつかのラボ演は、Ansible Automation Platform +のコマンドラインユーティリティーを使用します。これには、以下が含まれます。 + +- [ansible-navigator](https://github.com/ansible/ansible-navigator) - +Ansible オートメーションコンテンツを実行・開発するためのコマンドラインユーティリティとテキストベースのユーザーインターフェース(TUI)。- +[ansible-core](https://docs.ansible.com/core.html) - Ansible Automation +Platform +を支えるフレームワーク、言語、機能を提供する基本的な実行ファイルです。また、`ansible`、`ansible-playbook`、`ansible-doc` +などのさまざまなクリエートツールも含まれています。Ansible Coreは、無料でオープンソースのAnsibleを提供する上流のコミュニティと、Red +Hatが提供する下流のエンタープライズオートメーション製品であるAnsible Automation Platformとの橋渡しの役割を果たします。- +[実行環境](https://docs.ansible.com/automation-controller/latest/html/userguide/execution_environments.html) +- このワークショップでは特に取り上げません。なぜなら、ビルトインの Ansible 実行環境には、Red +Hatがサポートするすべてのコレクションがすでに含まれており、このワークショップで使用するすべてのコレクションも含まれているからです。実行環境とは、Ansible +の実行環境として利用できるコンテナイメージです。- +[ansible-builder](https://github.com/ansible/ansible-builder) - +このワークショップでは特に取り上げませんが、`ansible-builder` +は実行環境の構築プロセスを自動化するためのコマンドラインユーティリティです。 + +Ansible Automation Platformの新しいコンポーネントに関する情報が必要な場合は、このランディングページをブックマークしてください +[https://red.ht/AAP-20](https://red.ht/AAP-20) + ## ガイド ### ラボ環境 @@ -31,79 +55,121 @@ | Managed Host 2 | node2 | | Managed Host 3 | node3 | -### Step 1 - 環境へのアクセス +### ステップ 1 - 環境へのアクセス -SSH 経由でコントロールホストにログインします。 + + + + + + +
ワークショップの演習には、Visual Studio Codeの使用が強く推奨されます。Visual Studio Codeは以下を提供します。 +
    +
  • ファイルブラウザ
  • +
  • 構文強調表示の機能付きテキストエディタ
  • +
  • ブラウザ内ターミナル
  • +
+ バックアップとして、あるいはVisual Studio Codeでは不十分な場合には、SSHによる直接アクセスが可能です。さらなる説明が必要な場合は、短い YouTube ビデオが用意されています。 Ansible Workshops - ワークベンチ環境へのアクセス +
-> **Warning** -> -> **11.22.33.44** はお使いの環境の **IP** に変更します。student**X** の **X** は、指定の学習者 ID に変更します。 +- ワークショップの起動ページ(講師が用意したもの)からVisual Studio +Codeに接続します。パスワードは、WebUIのリンクの下に記載されています。 -```bash -ssh studentX@11.22.33.44 -``` + ![launch page](images/launch_page.png) -> **ヒント** -> -> パスワードは、インストラクターから渡されます。 +- 接続する提供されたパスワードを入力します。 -次に、root に切り替えます。 + ![login vs code](images/vscode_login.png) -```bash -[student@ansible-1 ~]$ sudo -i -``` + - Visual Studio Code で `rhel-workshop` ディレクトリーを開きます。 -以下のような前提条件タスクの多くは既に完了しています。 +### ステップ 2 - ターミナルの使用 -* Ansible ソフトウェアのインストール -* SSH 接続および鍵の設定 -* root 権限が必要なコマンドを実行できるように、`sudo` が管理対象ホストで設定されています。 +- Visual Studio Code でターミナルを開きます。 -Ansible が正しくインストールされていることを確認します。 + ![picture of new terminal](images/vscode-new-terminal.png) + +Ansible コントロールノードターミナルで `rhel-workshop` ディレクトリーに移動します。 ```bash -[root@ansible-1 ~]# ansible --version -ansible 2.7.0 -[...] +[student@ansible-1 ~]$ cd ~/rhel-workshop/ +[student@ansible-1 rhel-workshop]$ pwd +/home/student/rhel-workshop +[student@ansible-1 rhel-workshop]$ ``` -> **注意** > -> -> Ansible では、設定管理を容易に保っています。データベースやデーモンを実行する必要はなく、ノートパソコン上で簡単に実行できます。管理対象ホストで、エージェントを実行する必要は必要ありません。 +* `~` - このコンテキストでのチルダは `/home/student` のショートカットです +* `cd` - ディレクトリーを変更する Linux コマンド +* `pwd` - 作業ディレクトリーを印刷するための Linux コマンド。これにより、現在の作業ディレクトリーへのフルパスが表示されます。 + +### ステップ 3 - 実行環境の検証 -root アカウントから再度ログアウトします。 +`ansible-navigator` 引数を指定して `images` コマンドを実行し、コントロールノードに設定された実行環境を確認します。 ```bash -[root@ansible-1 ~]# exit -logout +$ ansible-navigator images ``` -> **注意** > -> -> 後続のすべての演習では、明示的に指示されない限り、コントロールノードで stundet\ ユーザーとして作業してください。 +![ansible-navigator images](images/navigator-images.png) + -### Step 2 - ラボの作業 +> 注意: 表示される出力は、上記の出力とは異なる場合があります -おわかりの通り、このラボは、コマンドラインを中心に使います。 +このコマンドは、現在インストールされているすべての実行環境(略してEE)に関する情報を提供します。対応する番号を押すことで、EE +を調べることができます。例えば、上記の例で **2** を押すと、`ee-supported-rhel8` の実行環境が表示されます。 -* すべてを手動入力する必要はありません。ブラウザーからコピーペーストしてください。ただし、特に手を止めて理解を深めるようにしてください。 +![ee メインメニュー](images/navigator-ee-menu.png) -* すべてのラボは、**Vim** を使用して準備しています。誰もが好むエディターではないことは承知しています。これは自由に変更できます。ラボ環境では - **Midnight Commander** (**mc** を実行。ファンクションキーは Esc-\ で、マウスクリックでも可能) - を利用できます。または、**Nano** (**nano** と実行) も利用可能です。これは簡易紹介 - [エディター紹介](../0.0-support-docs/editor_intro.md) です。 +`2` に `Ansible version and collections` を選択すると、その特定の EE にインストールされたすべての +Ansible Collections と、`ansible-core` のバージョンが表示されます。 -> **ヒント** > -> -> このラボガイドでは、その状況で意味がわかりやすいかどうかに関係なく、予期される出力ありなしで、実行するコマンドが表示されます。 +![ee info](images/navigator-ee-collections.png) -### Step 3 - チャレンジラボ +### ステップ 4 - ansible-navigator 設定の検証 + +Visual Studio Code を使用して `ansible-navigator.yml` ファイルを開くか、`cat` +コマンドを使用してファイルの内容を表示します。このファイルはホームディレクトリーにあります。 + +```bash +$ cat ~/.ansible-navigator.yml +--- +ansible-navigator: + ansible: + inventories: + - /home/student/lab_inventory/hosts + + execution-environment: + image: registry.redhat.io/ansible-automation-platform-20-early-access/ee-supported-rhel8:2.0.0 + enabled: true + container-engine: podman + pull-policy: missing + volume-mounts: + - src: "/etc/ansible/" + dest: "/etc/ansible/" +``` + +`ansible-navigator.yml` ファイル内の次のパラメータに注意してください。 + +* `inventories`: 使用されている Ansible インベントリーの場所を示します +* `execution-environment`: デフォルトの実行環境が設定されている場所 + +設定可能なすべての knob +の詳細な一覧については、[ドキュメント](https://ansible-navigator.readthedocs.io/en/latest/settings/) +を参照してください。 + +### ステップ 5 - チャレンジラボ これらのラボガイドの多数の章には、「チャレンジラボ」セクションが用意されています。これらのラボは、これまで学んだ知識で解決するための小さなタスクを行うことを目的としています。タスクの回答は、警告サインの下に表示されます。 --- -**ラビゲーション** +**ナビゲーション** +
-[次の演習](../1.2-thebasics/README.ja.md) + +{% if page.url contains 'ansible_rhel_90' %} +[Next Exercise](../2-thebasics) +{% else %} +[Next Exercise](../1.2-thebasics) +{% endif %}

-[こちらをクリックして、Ansible for Red Hat Enterprise Linux ワークショップに戻ります](../README.md) +[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_rhel/1.2-thebasics/README.ja.md b/exercises/ansible_rhel/1.2-thebasics/README.ja.md index 00ff372f8..c9f3bb6f9 100644 --- a/exercises/ansible_rhel/1.2-thebasics/README.ja.md +++ b/exercises/ansible_rhel/1.2-thebasics/README.ja.md @@ -1,39 +1,38 @@ -# ワークショップ演習 - アドホックコマンドの実行 +# ワークショップ演習 - Ansible の基本 -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) -* [Step 1 - インベントリの操作](#step-1---work-with-your-inventory) -* [Step 2 - Ansible 設定](#step-2---the-ansible-configuration-files) -* [Step 3 - ホストに ping を実行](#step-3---ping-a-host) -* [Step 4 - モジュールの一覧とヘルプの利用](#step-4---listing-modules-and-getting-help) -* [Step 5 - コマンドモジュールの使用:](#step-5---use-the-command-module) -* [Step 6 - コピーモジュールとパーミッション](#step-6---the-copy-module-and-permissions) -* [チャレンジラボ: モジュール](#challenge-lab-modules) +* [ステップ 1 - インベントリの操作](#step-1---work-with-your-inventory) +* [ステップ 2 - モジュールの一覧表示とヘルプの利用](#step-2---listing-modules-and-getting-help) ## 目的 -最初の演習では、Ansible の動作の感じをつかむために、いくつかアドホックコマンドを実行します。Ansible Ad-Hoc -コマンドでは、playbook を使わずにリモートノードでタスクを実行できます。これらは、1 つまたは 2 -つのことを素早く頻繁に多くのリモートノードに行う必要がある場合に便利です +この演習では、最新の Ansible コマンドラインユーティリティー`ansible-navigator` +を使用して、インベントリーファイルの操作方法や、サポートが必要な場合のモジュールの一覧表示について学びます。その目的は、`ansible-navigator` +がどのように機能するか、また、Ansible の経験を豊かにするためにどのように使用できるかを理解することです。 この演習の内容 -* Ansible 設定ファイルの確認と理解 (`ansible.cfg`) +* インベントリーファイルの使用 * `ini` 形式のインベントリーファイルの場所の確認と理解 -* アドホックコマンドの実行 +* モジュールの一覧表示と、モジュール使用の際のヘルプの利用 ## ガイド -### Step 1 - インベントリーの操作 +### ステップ 1 - インベントリーの操作 -ホストの管理に ansible -コマンドを使用するには、インベントリーファイルを指定する必要があります。このファイルは、コントロールノードから管理されるホストの一覧を定義します。このラボでは、インベントリーはインストラクターから渡されます。このインベントリーは -ini 形式のファイルです。このファイルでは、グループで並び替えられたホストの一覧があります。また、変数いくつか指定しています。 +インベントリーファイルとは、コントロールマシンが管理するノードを特定するためのテキストファイルです。管理対象となるノードには、そのノードのホスト名や +IP +アドレスのリストを含めることができます。インベントリーファイルでは、大かっこ([])の中にホストグループ名を宣言することで、ノードをグループにまとめることができます。 + +ホストの管理に `ansible-navigator` +コマンドを使用するには、インベントリーファイルを指定する必要があります。このファイルは、コントロールノードから管理されるホストの一覧を定義します。このラボでは、インベントリーはインストラクターから渡されます。このインベントリーファイルは +`ini` 形式のファイルです。このファイルでは、グループで並び替えられたホストの一覧があります。また、変数いくつか指定しています。 ```bash [all:vars] @@ -53,281 +52,168 @@ ansible-1 ansible_host=44.55.66.77 Ansible はすでに、お使いの環境に固有のインベントリーを使用するように設定されています。これを行うための次の手順を説明します。この事典では、簡単なコマンドをいくつか実行して、インベントリーの操作を行います。 -インベントリーホストを参照するには、ansible コマンドにホストパターンを指定します。Ansible には `--list-hosts` -オプションがあります。これは、ansible コマンドでホストパターンが参照する管理対象ホストの明確化に役立ちます。 - -最も基本的なホストパターンは、インベントリーファイルに一覧されている単一の管理対象ホストの名前です。これにより、そのホストが、ansible -コマンドで機能する、インベントリーファイルで唯一のものとなるように指定されます。以下を実行します。 - -```bash -[student@ansible-1 ~]$ ansible node1 --list-hosts - hosts (1): - node1 -``` - -インベントリーファイルにはより多くの情報が含まれます。また、このファイルは、グループでホストを整理したり、変数を定義したりできます。この例では、現在のインベントリーにグループ -`web` と `control` がります。Ansible をこれらのホストパターンで実行し、出力を確認します。 - -```bash -[student@ansible-1 ~]$ ansible web --list-hosts -[student@ansible-1 ~]$ ansible web,control --list-hosts -[student@ansible-1 ~]$ ansible 'node*' --list-hosts -[student@ansible-1 ~]$ ansible all --list-hosts -``` - -ご覧の通り、1 つ以上のグループにシステムを追加できます。たとえば、サーバーは Web サーバーとデータベースサーバーの両方が可能です。Ansible -では、グループが必ずしも階層階層にあるわけではないことに注意してください。 - -> **ヒント** -> -> このイベントリーには、その他のデータを含めることができます。たとえば、標準以外の SSH ポートで実行するホストがある場合は、コロン付きのホスト名の後にポート番号を指定できます。あるいは、Ansible 固有の名前を定義して、真の IP またはホスト名に参照するようにできます。 - -### Step 2 - Ansible 設定ファイル - -Ansible の動作は、Ansible の ini スタイル設定ファイルの内容を変更してカスタマイズできます。Ansible -は、コントロールノードの利用可能な複数の場所から設定ファイルを選択します。[ドキュメント](https://docs.ansible.com/ansible/latest/reference_appendices/config.html). - -> **ヒント** -> -> 推奨される方法としては、Ansible コマンドを実行するディレクトリーに `ansible.cfg` ファイルを作成します。このディレクトリーは、イベントリーや Playbook などの Ansible プロジェクトによって使用されるファイルも含まれます。別の方法としては、`.ansible.cfg` をホームディレクトリーに作成します。 - -利用するラボ環境では、`.ansible.cfg` ファイルに、コントロールノード上の `student` ユーザーのホームディレクトリーに、必要の詳細が書かれたファイルがすでに作成されています。 - -```bash -[student@ansible-1 ~]$ ls -la .ansible.cfg --rw-r--r--. 1 student student 231 14. Mai 17:17 .ansible.cfg -``` - -ファイルの内容を出力します。 - -```bash -[student@ansible-1 ~]$ cat .ansible.cfg -[defaults] -stdout_callback = community.general.yaml -connection = smart -timeout = 60 -deprecation_warnings = False -host_key_checking = False -retry_files_enabled = False -inventory = /home/student/lab_inventory/hosts -``` - -設定フラグは複数存在しますが、ここで重要ではありません。ただし、最後の行 (インベントリーの場所など) -には注意してください。これにより、以前のコマンドから、Ansible がどのマシンに接続するかを判断できます。 - -専用のインベントリーの内容を出力します。 - -```bash -[student@ansible-1 ~]$ cat /home/student/lab_inventory/hosts -[all:vars] -ansible_user=student -ansible_ssh_pass=ansible -ansible_port=22 - -[web] -node1 ansible_host=11.22.33.44 -node2 ansible_host=22.33.44.55 -node3 ansible_host=33.44.55.66 - -[control] -ansible-1 ansible_host=44.55.66.77 -``` - -> **ヒント** -> -> 各学習者には個別のラボ環境があります。上記の IP アドレスはサンプル用のものです。個々の環境の実際の IP アドレスは異なります。その他の場合には、**\** を実際の学習者番号に置き換えてください。 - -### Step 3 - ホストへの ping の実行 - -> **警告** -> -> **学習者ユーザーのホームディレクトリー `.ansible.cfg` からコマンドを実行することを忘れないでください。このディレクトリーに `/home/student` があります。これがないと、Ansible は、使用するインベントリーを見つけられません。** - -まずは、ホストに ping を実行するという基本的なことから始めます。これには、Ansible `ping` モジュールを使用します。`ping` -モジュールでは、ターゲットホストが応答するかどうかを確認できます。実際には、管理対象ホストに接続し、小さなスクリプトを実行して、結果を収集します。これにより、管理対象ホストが到達可能で、Ansible -がその環境で適切にコマンドを実行できるかどうかを確認できます。 - -> **ヒント** -> -> モジュールは、特定のタスクを行うためにデザインされたツールと考えてください。 - -Ansible は、`ping` モジュールを使用する必要があることを認識していなければなりません。`-m` オプションは、使用する Ansible -モジュールを定義します。オプションは、`-a` オプションを使用して、指定したモジュールに渡すことができます。 - -```bash -[student@ansible-1 ~]$ ansible web -m ping -node2 | SUCCESS => { - "ansible_facts": { - "discovered_interpreter_python": "/usr/bin/python" +To reference all the inventory hosts, you supply a pattern to the +`ansible-navigator` command. `ansible-navigator inventory` has a `--list` +option which can be useful for displaying all the hosts that are part of an +inventory file including what groups they are associated with. + + +```bash +[student@ansible-1 rhel_workshop]$ cd /home/student +[student@ansible-1 ~]$ ansible-navigator inventory --list -m stdout +{ + "_meta": { + "hostvars": { + "ansible-1": { + "ansible_host": "3.236.186.92", + "ansible_port": 22, + "ansible_ssh_pass": "password", + "ansible_user": "student1" + }, + "node1": { + "ansible_host": "3.239.234.187", + "ansible_port": 22, + "ansible_ssh_pass": "password", + "ansible_user": "student1" + }, + "node2": { + "ansible_host": "75.101.228.151", + "ansible_port": 22, + "ansible_ssh_pass": "password", + "ansible_user": "student1" + }, + "node3": { + "ansible_host": "100.27.38.142", + "ansible_port": 22, + "ansible_ssh_pass": "password", + "ansible_user": "student1" + } + } + }, + "all": { + "children": [ + "control", + "ungrouped", + "web" + ] }, - "changed": false, - "ping": "pong" + "control": { + "hosts": [ + "ansible-1" + ] + }, + "web": { + "hosts": [ + "node1", + "node2", + "node3" + ] + } } -[...] -``` - -各ノードが正常な実行と実際の結果 (ここでは「pong」) を報告します。 - -### Step 4 - モジュールの一覧表示とヘルプの利用 - -Ansible では、デフォルトで多くのモジュールを利用できます。実行するモジュールを一覧表示するには、以下を実行します。 -```bash -[student@ansible-1 ~]$ ansible-doc -l ``` -> **ヒント** -> -> `ansible-doc` で、`q` ボタンを押して終了します。`up`/`down` 矢印を使用してコンテンツをスクロールします。 - -モジュールを確認するには、次のコマンドを実行します。 - -```bash -[student@ansible-1 ~]$ ansible-doc -l | grep -i user -``` +注記: `-m` は `--mode` の略で、テキストベースのユーザーインターフェース (TUI) +を使用する代わりに、モードを標準出力に切り替えることができます。 -使用例を含む特定のモジュールのヘルプを取得します。 +`--list` が冗長すぎる場合は、`--graph` のオプションを使用して、より補正されたバージョンの `--list` +を提供することができます。 ```bash -[student@ansible-1 ~]$ ansible-doc user -``` - -> **ヒント** -> -> 必須のオプションは、`ansible-doc` では "=" でマークされています。 - -### Step 5 - コマンドモジュールの使用 +[student1@ansible-1 ~]$ ansible-navigator inventory --graph -m stdout +@all: + |--@control: + | |--ansible-1 + |--@ungrouped: + |--@web: + | |--node1 + | |--node2 + | |--node3 -次に、`command` モジュールを使用して、お約束の Linux -コマンドの実行方法や出力のフォーマット方法を見ていきます。管理対象ホスト上で指定したコマンドを実行するだけです。 - -```bash -[student@ansible-1 ~]$ ansible node1 -m command -a "id" -node1 | CHANGED | rc=0 >> -uid=1001(student1) gid=1001(student1) Gruppen=1001(student1) Kontext=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 ``` -この場合、このモジュールは `command` と呼ばれ、`-a` で渡されるオプションは、実行する実際のコマンドです。`all` -ホストパターンを使用して、すべての管理対象ホストでこのアドホックコマンドの実行を試行してください。 +ノード `node1`、`node2`、`node3` が `web` グループの一部であることを明確に確認することができます。`ansible-1` +は `control` グループの一部であることが分かります。 -別の例: ホストを実行しているカーネルバージョンを簡単に確認します。 -```bash -[student@ansible-1 ~]$ ansible all -m command -a 'uname -r' -``` +インベントリーファイルにはより多くの情報が含まれます。また、このファイルは、グループでホストを整理したり、変数を定義したりできます。この例では、現在のインベントリーにグループ +`web` と `control` がります。Ansible をこれらのホストパターンで実行し、出力を確認します。 -ホストの出力は、1 行で行うのが望ましい場合もあります。 +`ansible-navigator inventory` コマンドを使用して、1 +つのホストまたはグループに情報を提供するコマンドを実行することもできます。たとえば、以下のコマンドを実行すると出力が表示されます。 ```bash -[student@ansible-1 ~]$ ansible all -m command -a 'uname -r' -o +[student@ansible-1 ~]$ ansible-navigator inventory --graph web -m stdout +[student@ansible-1 ~]$ ansible-navigator inventory --graph control -m stdout +[student@ansible-1 ~]$ ansible-navigator inventory --host node1 -m stdout ``` > **ヒント** > -> 多くの Linux コマンドのように、`ansible` では、長いオプションを短くすることもできます (例: `ansible web --module-name ping` は `ansible web -m ping` と同じ)。ワークショップでは、短い形式を使用します。 - -### Step 6 - コピーモジュールとパーミッション - -`copy` モジュールを使用して、`node1` でアドホックコマンドを実行し、`/etc/motd` -ファイルの内容を変更します。**この場合、コンテンツはオプションを介してモジュールに送信されます**。 +> このイベントリーには、その他のデータを含めることができます。たとえば、標準以外の SSH ポートで実行するホストがある場合は、コロン付きのホスト名の後にポート番号を指定できます。あるいは、Ansible 固有の名前を定義して、真の IP またはホスト名に参照するようにできます。 -以下のコマンドを実行します。ただし、**エラー発生は想定内です**。 -```bash -[student@ansible-1 ~]$ ansible node1 -m copy -a 'content="Managed by Ansible\n" dest=/etc/motd' -``` +### ステップ 2 - モジュールの一覧表示とヘルプの利用 -説明したように、**エラー**が発生します。 +Ansible Automation Platform には、サポートされる複数の実行環境 (EE) が同梱されています。これらの EE +には、モジュールを含む、サポートされているコンテンツが含まれるバンドルされたサポート対象のコレクションが同梱されています。利用可能なモジュールを参照するには、最初にインタラクティブモードに入ります。 ```bash - node1 | FAILED! => { - "changed": false, - "checksum": "a314620457effe3a1db7e02eacd2b3fe8a8badca", - "failed": true, - "msg": "Destination /etc not writable" - } +$ ansible-navigator ``` -アドホックコマンドの出力では、**FAILED**が赤く表示されます。なぜでしょうか。これは、ユーザー**student\** による、motd ファイルへの書き込みが許可されていないためです。 - -この場合、権限昇格が必要となります。また、`sudo` を正しく設定することが重要というリマインダーでもあります。root -としてコマンドを実行するには、`-b` (become) パラメーターを指定して `sudo` を実行するように Ansible -に命令する必要があるのです。 +![picture of ansible-navigator](images/interactive-mode.png) > **ヒント** > -> Ansible は、SSH と同じように、現在のユーザー名 (student\) を使用してマシンへの接続を行います。リモートユーザー名をオーバーライドするには、`-u` パラメーターを使用できます。 +> 終了するには、`ansible-navigator` で `ESC` ボタンを押します。 -我々の環境では、`sudo` が設定されているため、`student` として接続できます。このコマンドを変更して `-b` パラメーターを指定し、再度実行します。 +まず、`:collections` と入力してコレクションを参照します ```bash -[student@ansible-1 ~]$ ansible node1 -m copy -a 'content="Managed by Ansible\n" dest=/etc/motd' -b +$ :collections ``` -今回は失敗しません。 - -```text -node1 | CHANGED => { - "changed": true, - "checksum": "4458b979ede3c332f8f2128385df4ba305e58c27", - "dest": "/etc/motd", - "gid": 0, - "group": "root", - "md5sum": "65a4290ee5559756ad04e558b0e0c4e3", - "mode": "0644", - "owner": "root", - "secontext": "system_u:object_r:etc_t:s0", - "size": 19, - "src": "/home/student1/.ansible/tmp/ansible-tmp-1557857641.21-120920996103312/source", - "state": "file", - "uid": 0 -``` +![picture of ansible-navigator](images/interactive-collections.png) -汎用の `command` モジュールとともに Ansible を使用して、motd ファイルの内容を確認します。 +特定のコレクションのコンテンツを参照するには、対応する番号を入力します。たとえば、上記のスクリーンショットの例では、数字 `0` は +`amazon.aws` コレクションに対応します。コレクションタイプにズームインするには、番号 `0` を入力します。 ```bash -[student@ansible-1 ~]$ ansible node1 -m command -a 'cat /etc/motd' -node1 | CHANGED | rc=0 >> -Managed by Ansible +$ 0 ``` -上記の `ansible node1 -m copy …​` コマンドを再度実行します。注記: +![picture of ansible-navigator](images/interactive-aws.png) -* 異なる出力色 (正しいターミナル設定が指定されています)。 -* `"changed": true,` から `"changed": false,` への変更。 -* 最初の行は、`SUCCESS` ではなく、`CHANGED` を示します。 -> **ヒント** -> -> これにより、変更や、Ansible の実際の動作の確認が容易になります。 +さらにズームすることで、使用など特定のモジュールに関するヘルプを利用します。たとえば、モジュール `ec2_tag` は `24` に対応します。 -### チャレンジラボ: モジュール +```bash +$ :24 +``` -* `ansible-doc` の使用 +矢印キーまたはページアップとページダウンを使用してスクロールダウンすると、ドキュメントと例が表示されます。 - * Yum を使用してソフトウェアパッケージを管理するモジュールを見つけます。 - * モジュールのヘルプ例を参照して、最新バージョンのパッケージのインストール方法を説明します。 +![picture of ansible-navigator](images/interactive-ec2-tag.png) -* Ansible のアドホックコマンドを実行して、`node1` に最新の squid パッケージをインストールします。 +`:doc namespace.collection.module-name` +を入力して、特定のモジュールに直接ジャンプすることもできます。たとえば、`:doc amazon.aws.ec2_tag` +を入力すると、上記の最後のページに直接ジャンプします。 > **ヒント** > -> 上記のアドホックコマンドをテンプレートしてコピーして、モジュールとオプションを変更します。 - -> **警告** -> -> **回答を以下に示します。** - -```bash -[student@ansible-1 ~]$ ansible-doc -l | grep -i yum -[student@ansible-1 ~]$ ansible-doc yum -[student@ansible-1 ~]$ ansible node1 -m yum -a 'name=squid state=latest' -b -``` +> 実行環境によって、アクセスできるコレクションおよびそのコレクションのバージョンが異なります。組み込みのドキュメントを使用して、コレクションのその特定のバージョンに対して正確であることが分かります。 --- -**ナビゲーション** +**Navigation** +{% if page.url contains 'ansible_rhel_90' %} +[Previous Exercise](../1-setup) - [Next Exercise](../3-playbook) +{% else %} +[Previous Exercise](../1.1-setup) - [Next Exercise](../1.3-playbook) +{% endif %} +

+
-[前の演習](../1.1-setup) - [次の演習](../1.3-playbook) -[こちらをクリックして、Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md) diff --git a/exercises/ansible_rhel/1.3-playbook/README.ja.md b/exercises/ansible_rhel/1.3-playbook/README.ja.md index 8f1edaeed..7deb2e479 100644 --- a/exercises/ansible_rhel/1.3-playbook/README.ja.md +++ b/exercises/ansible_rhel/1.3-playbook/README.ja.md @@ -1,21 +1,21 @@ -# ワークショップ演習 - はじめての Playbook を書く +# ワークショップ演習 - はじめての Playbook の作成 -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) - * [Step 1 - Playbook の基本](#step-1---playbook-basics) - * [Step 2 - Playbook - のディレクトリー構造とファイルの作成](#step-2---creating-a-directory-structure-and-file-for-your-playbook) - * [Step 3 - Playbook の実行](#step-3---running-the-playbook) - * [Step 4 - Playbook の拡張: Apache + * [ステップ 1 - Playbook の基本](#step-1---playbook-basics) + * [ステップ 2 - Playbook + 用のディレクトリー構造とファイルの作成](#step-2---creating-a-directory-structure-and-file-for-your-playbook) + * [スッテプ 3 - Playbook の実行](#step-3---running-the-playbook) + * [ステップ 4 - Playbook の拡張: Apache の起動と有効化](#step-4---extend-your-playbook-start--enable-apache) - * [Step 5 - Playbook の拡張: web.html + * [ステップ 5 - Playbook の拡張: web.html の作成](#step-5---extend-your-playbook-create-an-indexhtml) - * [Step 6 - 練習: 複数ホストへの適用](#step-6---practice-apply-to-multiple-host) + * [ステップ 6 - 練習: 複数ホストへの適用](#step-6---practice-apply-to-multiple-host) ## 目的 @@ -26,21 +26,18 @@ * 以下のモジュールの概要および使用 * [yum モジュール](https://docs.ansible.com/ansible/latest/modules/yum_module.html) - * [サービスモジュール](https://docs.ansible.com/ansible/latest/modules/service_module.html) - * [コピーモジュール](https://docs.ansible.com/ansible/latest/modules/copy_module.html) -* [冪等](https://en.wikipedia.org/wiki/Idempotence) と、Ansible モジュールの冪等について + * [サービス + module](https://docs.ansible.com/ansible/latest/modules/service_module.html) + * [copy + モジュール](https://docs.ansible.com/ansible/latest/modules/copy_module.html) +* [べき等性](https://en.wikipedia.org/wiki/Idempotence) の概要および Ansible + モジュールのべき等性について ## ガイド -Ansible -アドホックコマンドは単純な操作に便利ですが、複雑な設定管理やオーケストレーションのシナリオには適していません。このようなユースケースには、*Playbooks* -を使用します。 - Playbook は、管理ホストに実装する必要な設定または手順を記述するファイルです。Playbook は、長く複雑な管理タスクを、予測できる成功する結果で、簡単に繰り返し可能なルーチンに変更できます。 -Playbook は、実行するアドホックコマンドの一部を取り、*plays* および *tasks* の反復可能なセットに配置できます。 - 1 つの Playbook には複数のプレイを含めることができ、単一または複数のタスクを指定できます。1つのタスクでは、前章のモジュールのように *module* が呼び出されます。*play* の目的は、ホストのグループをマッピングすることです。*task* の目的は、それらのホストにモジュールを実装することです。 @@ -49,7 +46,7 @@ Playbook は、実行するアドホックコマンドの一部を取り、*play > >良い例を紹介します。Ansible モジュールがワークショップでのツールであるとすれば、インベントリーは素材で、Playbook は指示書のようなものです。 -### Step 1 - Playbook の基本 +### ステップ 1 - Playbook の基本 Playbook は YAML 形式で記述されたテキストファイルなので、以下が必要になります。 @@ -61,9 +58,9 @@ Playbook は YAML 形式で記述されたテキストファイルなので、 * **hosts**: タスクを実行する管理対象ホスト -* **tasks**: Ansible モジュールを呼び出して必要なオプションを渡すことで実行される操作。 +* **tasks**: Ansible モジュールを呼び出して必要なオプションを渡すことで実行される操作 -* **become**: アドホックコマンドで `-b` を指定するのと同じように、Playbook での権限昇格。 +* **become**: Playbook における特権昇格 > **警告** > @@ -76,7 +73,7 @@ Playbook は **冪等** である必要があります。そのため、Playbook > > 多くの Ansible モジュールは冪等です。そのため、この作業は比較的簡単です。 -### Step 2 - Playbook 用のディレクトリー構造とファイルの作成 +### ステップ 2 - Playbook 用のディレクトリー構造とファイルの作成 実践的な説明に移ります。はじめての Ansible Playbook を作成してみましょう。このラボでは、以下の 3 つの手順で Apache Web サーバーをセットアップする Playbook を作成します。 @@ -141,7 +138,7 @@ Playbook に推奨されるディレクトリー構造についての > **ヒント** > -> Playbook は YAML で記述されているため、行やキーワードを調整することが重要になります。`task` の *t* は、`become` の *b* に垂直にそろえるようにしてください。Ansible に慣れてきたら、[YAML 構文](http://docs.ansible.com/ansible/YAMLSyntax.html) を勉強するとよいでしょう。 +> Playbook は YAML で記述されているため、行やキーワードを調整することが重要になります。`task` の *t* は、`become` の *b* に垂直にそろえるようにしてください。Ansible に慣れてきたら、[YAML 構文](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html) を勉強するとよいでしょう。 追加した行: @@ -157,25 +154,95 @@ Playbook に推奨されるディレクトリー構造についての Playbook を保存し、エディターを終了します。 -### Step 3 - Playbook の実行 +### ステップ 3 - Playbook の実行 + +Ansible Automation Platform 2 +の導入に伴い、開発者の体験全体の一部として、いくつかの新しいキーコンポーネントが導入されています。実行環境は、オートメーションの実行時に使用する予測可能な環境を提供するために導入されました。すべてのコレクションの依存関係は実行環境に含まれ、開発環境で作成されたオートメーションが本番環境と同じように実行されることを確実にしています。 + +実行環境内で何が見つかるものについて + +* RHEL UBI 8 +* Ansible 2.9 または Ansible Core 2.11 +* Python 3.8 +* コンテンツコレクションについて +* Python またはバイナリーの依存関係のコレクション。 + +実行環境について + +オートメーションが実行される環境を定義、構築、配布するための標準的な方法を提供します。一言で言えば、オートメーションの実行環境とは、プラットフォームの管理者が +Ansible の管理を容易にするためのコンテナイメージです。 + +自動化の実行がコンテナー化されていくことを考えると、Ansible Automation Platform 2 +以前に存在していた自動化開発のワークフローやツールは、再構築する必要があります。つまり、`ansible-navigator` +は、`ansible-playbook` やその他の`ansible-*` コマンドラインユーティリティーに取って代わります。 + +この変更により、Ansible Playbook はコントロールノードの `ansible-navigator` コマンドを使用して実行されます。 -Ansible Playbook は、コントロールノードで `ansible-playbook` コマンドを使用して実行されます。新しい -Playbook を実行する前に、構文エラーをチェックすることが推奨されます。 +`ansible-navigator` を使用するための前提条件およびベストプラクティスが、このラボで行われています。 + +これらには以下が含まれます。 +* `ansible-navigator` パッケージのインストール +* 全プロジェクトに対するデフォルト設定 `/home/student/.ansible-navigator.yml` の作成(オプション) +* すべての実行環境(EE)ログは `/home/student/.ansible-navigator/logs/ansible-navigator.log` 内に保存されます +* Playbook アーティファクトは `/tmp/artifact.json` 下に保存されます + +[Ansible +ナビゲーター設定](https://github.com/ansible/ansible-navigator/blob/main/docs/settings.rst) +の詳細 + +> **ヒント** +> +ansible-navigato rのパラメーターは、ユーザーの環境に合わせて変更することができます。現在の設定では、すべてのプロジェクトにデフォルトの`ansible-navigator.yml` を使用していますが、プロジェクトごとに特定の`ansible-navigator.yml` を作成することができ、これは推奨される方法です。 + +Playbook を実行するには、`ansible-navigator run ` コマンドを使用します。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook --syntax-check apache.yml +[student@ansible-1 ansible-files]$ ansible-navigator run apache.yml ``` -これで、Playbook を実行する準備が整いました。 +> **ヒント** (英語) +> +既存の`ansible-navigator.yml` ファイルでは、インベントリファイルの場所が指定されています。これが`ansible-navigator.yml` ファイル内で設定されていない場合、プレイブックを実行するコマンドは次のようになります。 `ansible-navigator run apache.yml -i /home/student/lab_inventory/hosts` + +Playbook の実行時に、現在実行中の Playbook +に関する他の情報間でプレイ名を表示するテキストユーザーインターフェース(TUI)が表示されます。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook apache.yml + PLAY NAME OK CHANGED UNREACHABLE FAILED SKIPPED IGNORED IN PROGRESS TASK COUNT PROGRESS +0│Apache server installed 2 1 0 0 0 0 0 2 COMPLETE ``` -この出力はエラーを報告しませんが、実行されたタスクの概要と、実行内容の概要をまとめたプレイ要約を示します。また、「Gathering -Facts」というタスクもあります。これは、各プレイの開始時に自動的に実行される組み込みタスクです。これは、管理対象ノードの情報を収集します。詳細は、後の演習で扱います。 +お気づきかもしれませんが、play 名 `Apache server installed` の前に`0` が表示されています。キーボードの `0` +キーを押すと、Playbook 完了までに実行されたさまざまなタスクを表示する新しいウィンドウビューが表示されます。この例では、「Gathering +Facts」と「latest Apache version installed」のタスクが表示されています。「Gathering Facts」は、各 +play +の開始時に自動的に実行されるビルトインタスクです。管理対象のノードに関する情報を収集します。この後の演習では、これについて詳しく説明します。「latest +Apache version installed」は、`apache.yml` ファイル内に作成されたタスクで、`httpd` +をインストールするものでした。 -SSH で `node1` に接続し、Apache がインストールされていることを確認します。 +表示は以下のようになります。 + +```bash + RESULT HOST NUMBER CHANGED TASK TASK ACTION DURATION +0│OK node1 0 False Gathering Facts gather_facts 1s +1│OK node1 1 True latest Apache version installed yum 4s +``` + +よく見ると、各タスクには番号がついています。タスク1の「latest Apache version installed」は、変更があり、`yum` +モジュールを使用しています。この場合の変更点は、ホスト`node1` に Apache (`httpd` パッケージ) をインストールしたことです。 + +キーボードで`0` または`1` +を押すと、実行中のタスクの詳細を見ることができます。より伝統的な出力表示が必要な場合は、テキストユーザーインターフェースで `:st` +と入力してください。 + +Ansible Playbook を確認してから、キーボードの Esc キーを使用して TUI から終了できます。 + +> **ヒント** +> +Esc キーは前の画面に戻るだけです。メインの概要画面でEscキーを押すと、ターミナルウィンドウに戻ります。 + + +Playbook が完了したら、SSH で `node1` に接続し、Apache がインストールされていることを確認します。 ```bash [student@ansible-1 ansible-files]$ ssh node1 @@ -186,23 +253,67 @@ Managed by Ansible `rpm -qi httpd` コマンドを使用して、httpd がインストールされていることを確認します。 ```bash -[student@node1 ~]$ rpm -qi httpd +[ec2-user@node1 ~]$ rpm -qi httpd Name : httpd -Version : 2.4.6 +Version : 2.4.37 [...] ``` コントロールホストに戻るように `exit` コマンドで `node1` からログアウトし、インストールしたパッケージを Ansible -アドホックコマンドで確認します。 +playbook ラベル付き `package.yml` で確認します。 + +{% raw %} +```yaml +--- +- name: Check packages + hosts: node1 + become: true + vars: + package: "httpd" + + tasks: + - name: Gather the package facts + ansible.builtin.package_facts: + manager: auto + + - name: Check whether a {{ package }} is installed + ansible.builtin.debug: + msg: "{{ package }} {{ ansible_facts.packages[ package ][0].version }} is installed!" + when: "package in ansible_facts.packages" + +``` +{% endraw %} + ```bash -[student@ansible-1 ansible-files]$ ansible node1 -m command -a 'rpm -qi httpd' +[student@ansible-1 ~]$ ansible-navigator run package.yml -m stdout +``` + +```bash + +PLAY [Check packages] ********************************************************** + +TASK [Gathering Facts] ********************************************************* +ok: [ansible] + +TASK [Gather the package facts] ************************************************ +ok: [ansible] + +TASK [Check whether a httpd is installed] ************************************* +ok: [ansible] => { + "msg": "httpd 2.4.37 is installed!" +} + +PLAY RECAP ********************************************************************* +ansible : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -Playbook を 2 回実行し、出力を比較します。出力は「changed」から「ok」に変更され、色は黄色から緑色に変わります。さらに、「PLAY -RECAP」が変わりました。これにより、Ansible の実際の内容を簡単に識別できるようになります。 +`ansible-navigator run apache.yml` Playbook を 2 +回ずつ実行し、出力を比較します。出力「CHANGED」には `0` ではなく `1` +が表示され、色が黄色から緑色に変更されます。これにより、Ansible Playbook +の実行時に変更が生じると、その変更を簡単に配置できるようになります。 -### Step 4 - Playbook の拡張: Apache の起動と有効化 +### ステップ 4 - Playbook の拡張: Apache の起動と有効化 Ansible Playbook の次の部分では、Apache アプリケーションが `node1` で有効化されて起動するようにします。 @@ -226,35 +337,80 @@ Ansible Playbook の次の部分では、Apache アプリケーションが `nod state: started ``` -これらの行で実行されることは、簡単に理解できます。 +何を行ったのでしょうか? -* 次のタスクが作成され、名前が付けられます。 +* 「Apache enabled and running」という名前の 2 番目のタスクが作成されます。 * モジュールが指定されます (`service`) -* モジュールのパラメーターが指定されます +* モジュール `service` はサービス名 (`httpd`) を取ります。これを永続的に設定する必要がある場合は + (`enabled`)、および現在の状態 (`started`) を使用します。 + つまり、2 番目のタスクにより、Apache サーバーがターゲットマシンで実行されるようにしています。拡張 Playbook を実行します。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook apache.yml +[student@ansible-1 ~]$ ansible-navigator run apache.yml ``` -出力に注意してください。一部のタスクは緑色で「ok」と表示されています。また、黄色で「changed」と表示されているものもあります。 +この出力では、プレイに `1` "CHANGED" が表示されますが、`0` を押してプレイの出力に入ることができます。そのタスク 2「Apache +enabled and running」は、"CHANGED" 値が True に設定され、黄色でで強調表示されているタスクでした。 -* Ansible のアドホックコマンドを使用して、Apache が有効化され、起動していることを確認します (例: `systemctl status - httpd`)。 -* 出力内の変更に慣れるためにも、Playbook を再び実行してみてください。 +* 出力内の変更に慣れるためにも、`ansible-navigator` を使用して Playbook を再び実行してみてください。 -### Step 5 - Playbook: web.html の作成 +* service_state.yml というラベルのついた Ansible Playbook を使って、Apache(httpd)サービスが + `node1`、例えば `systemctl status httpd` で実行されていることを確認します。 -タスクが正しく実行され、Apache が接続を受け入れることを確認します。コントロールノードのアドホックコマンドで Ansible の `uri` モジュールを使用して HTTP リクエストを作成します。**\** は、インベントリーから `ノード1` の IP に置き換えてください。 +{% raw %} +```yaml +--- +- name: Check Status + hosts: node1 + become: true + vars: + package: "httpd" + + tasks: + - name: Check status of {{ package }} service + service_facts: + register: service_state + + - debug: + var: service_state.ansible_facts.services["{{ package }}.service"].state +``` + +```bash +{% endraw %} + +[student@ansible-1 ~]$ ansible-navigator run service_state.yml +``` + +### ステップ 5 - Playbook の拡張: web.html の作成 + +タスクが正しく実行され、Apache が接続を受け入れることを確認します。check_httpd.yml という名前の Playbook の +Ansible の `uri` モジュールを使用して、コントロールノードから `node1` に HTTP リクエストを作成します。 + +{% raw %} +```yaml +--- +- name: Check URL + hosts: control + vars: + node: "node1" + + tasks: + - name: Check that you can connect (GET) to a page and it returns a status 200 + uri: + url: "http://{{ node }}" + +``` +{% endraw %} > **警告** > > **赤い行と 403 ステータスが多く表示されます。** ```bash -[student@ansible-1 ansible-files]$ ansible localhost -m uri -a "url=http://" +[student@ansible-1 ~]$ ansible-navigator run check_httpd.yml -m stdout ``` 赤い行やエラーが多く表示されます。Apache によって提供される `web.html` ファイルがなければ、「HTTP Error 403: @@ -274,8 +430,8 @@ Forbidden」ステータスが表示され、Ansible はエラーを報告しま ``` -Ansible の `copy` モジュールを使用してコマンドラインに出力されたテキストをファイルに書き込みました。次は、Playbook -でモジュールを使用してファイルを実際にコピーします。 +以前の例では、Ansible の `copy` モジュールを使用してコマンドラインに出力されたテキストをファイルに書き込みました。次は、Playbook +でモジュールを使用してファイルをコピーします。 コントロールノードで、ファイル `~/ansible-files/apache.yml` を編集して、`copy` モジュールを使用して新しいタスクを追加します。以下のようになります。 @@ -301,23 +457,24 @@ Ansible の `copy` モジュールを使用してコマンドラインに出力 dest: /var/www/html/index.html ``` -Playbook 構文に慣れてきたのではないでしょうか。この新しいタスクは、`copy` +この新しいコピータスクで何が起きるのでしょうか。この新しいタスクは、`copy` モジュールを使用し、コピー操作のソースオプションおよび宛先オプションをパラメーターとして定義します。 拡張 Playbook を実行します。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook apache.yml +[student@ansible-1 ansible-files]$ ansible-navigator run apache.yml -m stdout ``` -* 出力をよく確認してみてください。 +* 出力を確認し、「CHANGED」と、その変更に関連するタスクが変更されたことに注意してください。 -* 上記の「uri」モジュールを再度使用してアドホックコマンドを実行し、Apache +* 上記の「uri」モジュールを再度使用して playbook (check_httpd.yml) を実行し、Apache をテストします。これで、このコマンドは、その他の情報とともに正常の「status: 200」の行が返されるはずです。 -### Step 6 - 複数のホストに適用 +### ステップ 6 - 練習: 複数ホストへの適用 -単一のホストへの操作もよいのですが、Ansible の真の力は、複数の同じタスクを多数のホストに確実に適用できることです。 +上記では、特定のホストに変更を加えることを簡単に説明しました。では、多くのホストに変更を加えたい場合はどうでしょうか。ここで Ansible +の真価が発揮されます。Ansible は、同じタスクセットを多くのホストに確実に適用します。 * そのため、`node1` **と** `node2` **と** `node3`で実行するように apache.yml Playbook を変更するのはどうでしょうか。 @@ -335,7 +492,7 @@ node3 ansible_host=33.44.55.66 > > こちらに表示される IP アドレスは例です。実際のノードの IP アドレスは異なります。 -Playbook がグループ「web」を参照するように変更します。 +Playbook の `hosts` パラメーターを、`web` ではなく `node1` を参照するように変更します。 ```yaml --- @@ -361,20 +518,20 @@ Playbook がグループ「web」を参照するように変更します。 次に Playbook を実行します。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook apache.yml +[student@ansible-1 ansible-files]$ ansible-navigator run apache.yml -m stdout ``` -最後に、Apache が両方のサーバーで現在実行されているかどうかを確認します。まずは、インベントリー内のノードの IP アドレスを調べ、上記の -`node1` ですで行ったように uri モジュールを使用して、各アドホックコマンドに使用します。 - -> **ヒント** -> ->Apache が両方のサーバーで実行されていることを確認する代替方法は `ansible node2,node3 -m uri -a "url=http://localhost/"` コマンドを使用することです。 +Apache がすべての Web +サーバー(node1、node2、node3)で実行されているかどうかを確認します。すべての出力が緑色である必要があります。 --- **ナビゲーション**
-[前の演習](../1.2-thebasics) - [次の演習](../1.4-variables) -[こちらをクリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-1---ansible-engine-exercises) +{% if page.url contains 'ansible_rhel_90' %} +[Previous Exercise](../2-thebasics) - [Next Exercise](../4-variables) +{% else %} +[Previous Exercise](../1.2-thebasics) - [Next Exercise](../1.4-variables) +{% endif %} +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md#section-1---ansible-engine-exercises) diff --git a/exercises/ansible_rhel/1.4-variables/README.ja.md b/exercises/ansible_rhel/1.4-variables/README.ja.md index 6d8d8687a..ae92597ca 100644 --- a/exercises/ansible_rhel/1.4-variables/README.ja.md +++ b/exercises/ansible_rhel/1.4-variables/README.ja.md @@ -1,20 +1,20 @@ # ワークショップ演習 - 変数の使用 -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) * [変数の概要](#intro-to-variables) -* [Step 1 - 変数ファイルの作成](#step-1---create-variable-files) -* [Step 2 - index.html ファイルの作成](#step-2---create-indexhtml-files) -* [Step 3 - Playbook の作成](#step-3---create-the-playbook) -* [Step 4 - 結果のテスト](#step-4---test-the-result) -* [Step 5 - Ansible ファクト](#step-5---ansible-facts) -* [Step 6 - チャレンジラボ: ファクト](#step-6---challenge-lab-facts) -* [Step 7 - Playbooks でのファクトの使用](#step-7---using-facts-in-playbooks) +* [ステップ 1 - 変数ファイルの作成](#step-1---create-variable-files) +* [ステップ 2 - index.html ファイルの作成](#step-2---create-indexhtml-files) +* [ステップ 3 - Playbook の作成](#step-3---create-the-playbook) +* [ステップ 4 - 結果のテスト](#step-4---test-the-result) +* [ステップ 5 - Ansible ファクト](#step-5---ansible-facts) +* [ステップ 6 - チャレンジラボ: ファクト](#step-6---challenge-lab-facts) +* [ステップ 7 - Playbooks でのファクトの使用](#step-7---using-facts-in-playbooks) ## 目的 @@ -56,7 +56,7 @@ Ansibleは、Playbook > > ホスト変数はグループ変数よりも優先されます (優先順位の詳細については、[docs](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable) を参照してください)。 -### Step 1 - 変数ファイルの作成 +### ステップ 1 - 変数ファイルの作成 理解を深め練習するためにも、ラボをみていきましょう。「Webサーバーを構築しましょう。1 つまたは 2 つ。またはそれ以上…」というテーマに続いて、`index.html` を変更し、サーバーがデプロイされている開発環境 (dev / prod) @@ -90,7 +90,7 @@ stage: prod が定義されています。そのため、デフォルトでは、開発環境のメンバーとしてフラグを立てます。 * サーバー `node2` については、これはオーバーライドされ、ホストは実稼働サーバーとしてフラグが立てられます。 -### Step 2 - web.html ファイルの作成 +### ステップ 2: web.html ファイルの作成 次に、`~/ansible-files/files/` で 2 つのファイルを作成します。 @@ -110,7 +110,7 @@ stage: prod ``` -### Step 3 - Playbook の作成 +### ステップ 3: Playbook の作成 次に、「stage」変数にしたがって、prod または dev `web.html` ファイルをコピーする Playbook が必要です。 @@ -139,10 +139,10 @@ stage: prod * Playbook を実行します。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook deploy_index_html.yml +[student@ansible-1 ansible-files]$ ansible-navigator run deploy_index_html.yml ``` -### Step 4 - 結果のテスト +### ステップ 4 - 結果のテスト Ansible Playbook は、さまざまなファイルを index.html としてホストにコピーし、`curl` を使用してテストします。 @@ -177,48 +177,129 @@ node3: > > おそらくこのような考えがありませんでしょうか。ファイルの内容を変更する、もっと賢い方法があるはず...。その通りです。このラボは、変数の説明を行うためのものでした。次の章では、テンプレートについて学びます。 -### Step 5 - Ansible ファクト +### ステップ 5: Ansible ファクト -Ansible ファクトは、管理対象ホストから Ansible によって自動的に検出される変数です。それぞれの `ansible-playbook` +Ansible ファクトは、管理対象ホストから Ansible によって自動的に検出される変数です。それぞれの `ansible-navigator` 実行の出力にリストされている「ファクトの収集」タスクを覚えていますか?その時点で、管理対象ノードごとにファクトが収集されます。ファクトは、`setup` モジュールでプルできます。これらには、管理者が再利用できる変数に格納された有用な情報が含まれています。 -Ansible がデフォルトで収集するファクトを把握するには、コントロールノードで、student ユーザーとして次を実行します。 +Ansible がデフォルトで収集する情報を把握するために、学習者ユーザーとしてコントロールノード上で以下の Playbook を実行し、`node1` +のセットアップの詳細を確認します。 -```bash -[student@ansible-1 ansible-files]$ ansible node1 -m setup -``` +```yaml +--- +- name: Capture Setup + hosts: node1 + + tasks: -多すぎる場合は、特定のファクトに出力を制限するフィルターを使用できます。使用する表現は、シェルスタイルのワイルドカードです。 + - name: Collect only facts returned by facter + ansible.builtin.setup: + gather_subset: + - 'all' + register: setup + + - debug: + var: setup +``` ```bash -[student@ansible-1 ansible-files]$ ansible node1 -m setup -a 'filter=ansible_eth0' +[student@ansible-1 ansible-files]$ cd ~ +[student@ansible-1 ~]$ ansible-navigator run setup.yml -m stdout ``` -あるいは、メモリ関連のファクトだけを探すのはどうでしょうか。 +これはビットが大きすぎる可能性があり、フィルターを使用して出力を特定のファクトに制限することができます。式は Playbook +内でシェルスタイルのワイルドカードです。この例では、`setup_filter.yml` というラベルが付けられた Playbook +を作成します。この例では、`eth0` ファクトを取得し、`node1` のメモリー詳細を取得するようにフィルターします。 + +```yaml +--- +- name: Capture Setup + hosts: node1 + + tasks: + + - name: Collect only specific facts + ansible.builtin.setup: + filter: + - 'ansible_eth0' + - 'ansible_*_mb' + register: setup + + - debug: + var: setup +``` ```bash -[student@ansible-1 ansible-files]$ ansible node1 -m setup -a 'filter=ansible_*_mb' +[student@ansible-1 ansible-files]$ ansible-navigator run setup_filter.yml -m stdout ``` -### Step 6 - チャレンジラボ: ファクト +### ステップ 6 - チャレンジラボ: ファクト -* 管理対象ホストのディストリビューション (Red Hat) の検索と出力を試行します。これは一行で行います。 +* 管理対象ホストのディストリビューション (Red Hat) の検索と出力を試行します。これは Playbook で行います。 > **ヒント** > -> grep を使用してファクトを検索し、フィルターを適用して、このファクトのみを出力します。 +> フィルター内でワイルドカードを使用してファクトを検索し、フィルターを適用して、このファクトのみを出力します。 > **警告** > > **回答を以下に示します。** +```yaml +--- +- name: Capture Setup + hosts: node1 + + tasks: + + - name: Collect only specific facts + ansible.builtin.setup: + filter: + - '*distribution' + register: setup + + - debug: + var: setup +``` + +ワイルドカードが導入されると、出力は以下のようになります。 + +```bash + +TASK [debug] ******************************************************************* +ok: [ansible] => { + "setup": { + "ansible_facts": { + "ansible_distribution": "RedHat" + }, + "changed": false, + "failed": false + } +} +``` + +これにより、検索する変数に `ansible_distribution` というラベルが付けられます。 + +次に、Playbook を更新して、検索で明示的な指定を行い、以下の行を変更できます。 + +```yaml +filter: +- '*distribution' +``` + +以下のように変更します。 + +```yaml +filter: +- 'ansible_distribution' +``` + ```bash -[student@ansible-1 ansible-files]$ ansible node1 -m setup|grep distribution -[student@ansible-1 ansible-files]$ ansible node1 -m setup -a 'filter=ansible_distribution' -o +[student@ansible-1 ansible-files]$ ansible-navigator run setup_filter.yml -m stdout ``` -### Step 7 - Playbook でのファクトの使用 +### ステップ 7 - Playbook でのファクトの使用 もちろん、ファクトは、正しい名前を使用して、変数のように Playbook で使用できます。このプレイブックを次のように、`~/ansible-files/` ディレクトリーに `facts.yml` として作成します。 @@ -244,8 +325,12 @@ Ansible がデフォルトで収集するファクトを把握するには、コ それを実行して、ファクトがどのように出力されるかを確認します。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook facts.yml +[student@ansible-1 ansible-files]$ ansible-navigator run facts.yml +``` +テキストユーザーインターフェース(TUI)ウィンドウ内で、以下の出力をキャプチャーするために `:st` と入力します。 + +```bash PLAY [Output facts within a playbook] ****************************************** TASK [Gathering Facts] ********************************************************* @@ -276,9 +361,9 @@ node3 : ok=2 changed=0 unreachable=0 failed=0
{% if page.url contains 'ansible_rhel_90' %} -[前の演習](../3-playbook) - [次の演習](../5-surveys) +[Previous Exercise](../3-playbook) - [Next Exercise](../5-surveys) {% else %} -[前の演習](../1.3-playbook) - [次の演習](../1.5-handlers) +[Previous Exercise](../1.3-playbook) - [Next Exercise](../1.5-handlers) {% endif %}

-[こちらをクリックして Ansible for Red Hat Enterprise Linux Workshop に戻ります](../README.md) +[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_rhel/1.5-handlers/README.ja.md b/exercises/ansible_rhel/1.5-handlers/README.ja.md index b3a7717c8..6d970deed 100644 --- a/exercises/ansible_rhel/1.5-handlers/README.ja.md +++ b/exercises/ansible_rhel/1.5-handlers/README.ja.md @@ -1,28 +1,28 @@ # ワークショップ演習 - 条件、ハンドラー、ループ -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) - * [Step 1 - 条件](#step-1---conditionals) - * [Step 2 - ハンドラー](#step-2---handlers) - * [Step 3 - シンプルループ](#step-3---simple-loops) - * [Step 4 - ハッシュのループ](#step-4---loops-over-hashes) + * [ステップ 1 - 条件](#step-1---conditionals) + * [ステップ 2 - ハンドラー](#step-2---handlers) + * [ステップ 3 - 簡単なループ](#step-3---simple-loops) + * [ステップ 4 - ハッシュのループ](#step-4---loops-over-hashes) ## 目的 3 つの基本的な Ansible 機能は次のとおりです。 -* [Conditionals](https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html) -* [Handlers](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change) -* [Loops](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html) +* [条件](https://docs.ansible.com/ansible/latest/user_guide/playbooks_conditionals.html) +* [ハンドラー](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change) +* [ループ](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html) ## ガイド -### Step 1 - 条件 +### ステップ 1 - 条件 Ansible は条件を使用して、特定の条件が満たされたときにタスクまたは再生を実行できます。 @@ -31,14 +31,14 @@ Ansible は条件を使用して、特定の条件が満たされたときにタ | | | | ---- | ---------------------------------------------------------------------- | -| \== | 2 つのオブジェクトが等しいかを比較します。 | -| \!= | 2 つのオブジェクトが等しくないかどうかを比較します。 | -| \> | 左側が右側よりも大きい場合に真になります。 | -| \>= | 左側が右側よりも小さい場合に真になります。 | -| \< | 左側が右側よりも小さい場合に真になります。 | -| \<= | 左側が右側と等しいか、右側よりも小さい場合に真になります。 | +| \== | Compares two objects for equality. | +| \!= | Compares two objects for inequality. | +| \> | true if the left hand side is greater than the right hand side. | +| \>= | true if the left hand side is greater or equal to the right hand side. | +| \< | true if the left hand side is lower than the right hand side. | +| \<= | true if the left hand side is lower or equal to the right hand side. | -詳細は、以下のドキュメントを参照してください。 +詳細は、以下のドキュメントを参照してください。 例として、FTP サーバーをインストールしたいと思っていますが、「ftpserver」インベントリーグループにあるホストにのみにインストールしたいとします。 @@ -94,7 +94,7 @@ skipping: [node3] changed: [node2] ``` -### Step 2 - ハンドラー +### ステップ 2 - ハンドラー タスクがシステムに変更を加える場合は時折、その他の単一のタスクまたは複数タスクを実行しなければならない場合があります。たとえば、サービスの設定ファイルを変更すると、変更した構成の有効化にサービスを再起動しなければならないことがあります。 @@ -113,7 +113,6 @@ changed: [node2] ```bash [student@ansible-1 ansible-files]$ scp node1:/etc/httpd/conf/httpd.conf ~/ansible-files/files/. -student@11.22.33.44's password: httpd.conf ``` @@ -131,7 +130,7 @@ httpd.conf src: httpd.conf dest: /etc/httpd/conf/ notify: - - restart_apache + - restart_apache handlers: - name: restart_apache service: @@ -167,13 +166,13 @@ Apache はポート 8080 でリッスンするはずです。確認は簡単で curl: (7) Failed to connect to node1 port 80: Connection refused [student@ansible-1 ansible-files]$ curl http://node1:8080 -

This is a production webserver, take care!

+

This is a development webserver, have fun!

``` -httpd.conf ファイルを自由に再度変更して、playbook を実行してください。 +8080 番ポートでリッスンする設定のままにします。後でこれを使用します。 -### Step 3 - 簡単なループ +### ステップ 3 - 簡単なループ ループを使用すると、同じタスクを何度も繰り返すことができます。たとえば、複数のユーザーを作成するとします。Ansibleループを使用することで、1 つのタスクでそれを行うことができます。ループは、基本的なリスト以上のものを繰り返すこともできます。たとえば、対応するグループを持つユーザーのリストがある場合、ループはそれらを反復処理することもできます。ループの詳細については、[Ansible @@ -216,17 +215,14 @@ Playbook と出力の概要: -### Step 4 - ハッシュのループ +### ステップ 4: ハッシュのループ 前述のように、ループはハッシュのリストでも実行できます。ユーザーを別の追加グループに割り当てる必要があると想像してください。 ```yaml -- username: dev_user - groups: ftp -- username: qa_user - groups: ftp -- username: prod_user - groups: apache +- username: dev_user groups: ftp +- username: qa_user groups: ftp +- username: prod_user groups: apache ``` `user` モジュールには、その他のユーザーを一覧表示するためのオプションのパラメーター `groups` @@ -262,18 +258,51 @@ Playbook を書き直して、追加のユーザー権限を持つユーザー * ここでも、タスクは 1 回リストされていますが、3 つの変更がリストされています。各ループとその内容が表示されます。 -ユーザー `dev_user` が `node1` で確実に作成されたことを確認します。 +以下の Playbook を使用して、`dev_user` が `node1` で作成されたことを確認します。 -```bash -[student@ansible-1 ansible-files]$ ansible node1 -m command -a "id dev_user" -node1 | CHANGED | rc=0 >> -uid=1002(dev_user) gid=1002(dev_user) Gruppen=1002(dev_user),50(ftp) +{% raw %} +```yaml +--- +- name: Get user ID + hosts: node1 + vars: + myuser: "dev_user" + tasks: + - name: Get {{ myuser }} info + getent: + database: passwd + key: "{{ myuser }}" + - debug: + msg: + - "{{ myuser }} uid: {{ getent_passwd['dev_user'].1 }}" ``` +{% endraw %} + +```bash +$ ansible-navigator run user_id.yml -m stdout + +PLAY [Get user ID] ************************************************************* + +TASK [Gathering Facts] ********************************************************* +ok: [node1] +TASK [Get dev_user info] ******************************************************* +ok: [node1] + +TASK [debug] ******************************************************************* +ok: [node1] => { + "msg": [ + "dev_user uid: 1002" + ] +} + +PLAY RECAP ********************************************************************* +node1 : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` --- **ナビゲーション**
[前の演習](../1.4-variables) - [次の演習](../1.6-templates) -[こちらをクリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-1---ansible-engine-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-1---ansible-engine-exercises) diff --git a/exercises/ansible_rhel/1.6-templates/README.ja.md b/exercises/ansible_rhel/1.6-templates/README.ja.md index 14c30640d..6e199fad5 100644 --- a/exercises/ansible_rhel/1.6-templates/README.ja.md +++ b/exercises/ansible_rhel/1.6-templates/README.ja.md @@ -1,14 +1,14 @@ # ワークショップ演習 - テンプレート -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) -* [Step 1 - Playbooks でのテンプレートの使用](#step-1---using-templates-in-playbooks) -* [Step 2 - チャレンジラボ](#step-2---challenge-lab) +* [ステップ 1 - Playbooks でのテンプレートの使用](#step-1---using-templates-in-playbooks) +* [ステップ 2 - チャレンジラボ](#step-2---challenge-lab) ## 目的 @@ -18,7 +18,7 @@ ## ガイド -### Step 1 - Playbook でのテンプレートの使用 +### ステップ 1 - Playbooks でのテンプレートの使用 ファイルのテンプレートが作成されると、`template` モジュールを使用して管理対象ホストに展開できます。これは、制御ノードから管理対象ホストへのローカルファイルの転送に対応しています。 @@ -71,19 +71,21 @@ deployed on {{ ansible_architecture }} architecture. Ansible がシステムから検出したファクトに変数置き換える方法を確認してください。 -### Step 2 - チャレンジラボ +### ステップ 2 - チャレンジラボ テンプレートに行を追加して、管理対象ノードの現在のカーネルを一覧表示します。 * 「Ansible ファクト」の章で学習したコマンドを使用して、カーネルバージョンを含むファクトを見つけます。 -> **ヒント** +> *ヒント** > -> カーネルについて `grep -i` を実行します +> カーネルのフィルター + +> 新規作成された Playbook を実行してファクト名を検索します。 * テンプレートを変更して、見つけたファクトを使用します。 -* 再び Playbook を実行します。 +* 再び motd Playbook を実行します。 * node1 にログインして motd を確認します @@ -93,11 +95,43 @@ Ansible がシステムから検出したファクトに変数置き換える方 * ファクトを見つけます。 +```yaml +--- +- name: Capture Kernel Version + hosts: node1 + + tasks: + + - name: Collect only kernel facts + ansible.builtin.setup: + filter: + - '*kernel' + register: setup + + - debug: + var: setup +``` + +ワイルドカードが導入されると、出力は以下のようになります。 + ```bash -[student@ansible-1 ansible-files]$ ansible node1 -m setup|grep -i kernel - "ansible_kernel": "3.10.0-693.el7.x86_64", + +TASK [debug] ******************************************************************* +ok: [node1] => { + "setup": { + "ansible_facts": { + "ansible_kernel": "4.18.0-305.12.1.el8_4.x86_64" + }, + "changed": false, + "failed": false + } +} ``` +これにより、検索する変数に `ansible_kernel` というラベルが付けられます。 + +次に、motd-facts.j2 テンプレートを更新して、メッセージの一部として `ansible_kernel` を含めることができます。 + * テンプレート `motd-facts.j2` 変更します。 @@ -114,7 +148,7 @@ running kernel {{ ansible_kernel }}. * Playbook を実行します。 ```bash -[student@ansible-1 ~]$ ansible-playbook motd-facts.yml +[student@ansible-1 ~]$ ansible-navigator run motd-facts.yml -m stdout ``` * `node1` への SSH ログインを介して新しいメッセージを確認します。 @@ -124,7 +158,7 @@ running kernel {{ ansible_kernel }}. Welcome to node1. RedHat 8.1 deployed on x86_64 architecture -running kernel 4.18.0-147.8.1.el8_1.x86_64. +running kernel 4.18.0-305.12.1.el8_4.x86_64. ``` --- @@ -132,5 +166,5 @@ running kernel 4.18.0-147.8.1.el8_1.x86_64.
[前の演習](../1.5-handlers) - [次の演習](../1.7-role) -[こちらをクリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-1---ansible-engine-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-1---ansible-engine-exercises) diff --git a/exercises/ansible_rhel/1.7-role/README.ja.md b/exercises/ansible_rhel/1.7-role/README.ja.md index ef66b7765..bb92a81df 100644 --- a/exercises/ansible_rhel/1.7-role/README.ja.md +++ b/exercises/ansible_rhel/1.7-role/README.ja.md @@ -1,21 +1,21 @@ -# ワークショップ演習: ロール: Playbook を再利用可能にする +# ワークショップ演習 - ロール: Playbook を再利用可能にする -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) - * [Step 1 - Ansible - ロール構造を理解する](#step-1---understanding-the-ansible-role-structure) - * [Step 2 - + * [ステップ 1 - Ansible + ロール構造について](#step-1---understanding-the-ansible-role-structure) + * [ステップ 2 - 基本的なロールディレクトリー構造の作成](#step-2---create-a-basic-role-directory-structure) - * [Step 3 - タスクファイルの作成](#step-3---create-the-tasks-file) - * [Step 4 - ハンドラーの作成](#step-4---create-the-handler) - * [Step 5 - web.html と vhost + * [ステップ 3 - タスクファイルの作成](#step-3---create-the-tasks-file) + * [ステップ 4 - ハンドラーの作成](#step-4---create-the-handler) + * [ステップ 5 - web.html と vhost 設定ファイルテンプレートの作成](#step-5---create-the-webhtml-and-vhost-configuration-file-template) - * [Step 6 - ロールのテスト](#step-6---test-the-role) + * [ステップ 6 - ロールのテスト](#step-6---test-the-role) * [トラブルシューティング問題](#troubleshooting-problems) ## 目的 @@ -24,7 +24,10 @@ を作成することは可能ですが、最終的には複数のファイルを再利用して、整理することをお勧めします。 これを行うには、Ansible Roles を使用します。ロールを作成するときは、Playbook -を複数のパーツに分け、それらのパーツをディレクトリー構造に配置します。これについては、 [Tips and tricks](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html) および [Sample Ansible setup](https://docs.ansible.com/ansible/latest/user_guide/sample_setup.html) で詳しく説明されています。 +を複数のパーツに分け、それらのパーツをディレクトリー構造に配置します。これについては、[ヒントとコツ](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html) +および [Ansible +設定の例](https://docs.ansible.com/ansible/latest/user_guide/sample_setup.html) +で詳しく説明されています。 この演習では、以下について説明します。 @@ -35,7 +38,7 @@ ## ガイド -### Step 1 - Ansible Role 構造の概要 +### ステップ 1 - Ansible ロール構造について ロールは、定義されたディレクトリ構造に従います。ロールは、最上位ディレクトリーによって名前が付けられます。一部のサブディレクトリーには、`main.yml` という YAML ファイルが含まれています。ファイルとテンプレートのサブディレクトリーには、YAML @@ -70,7 +73,7 @@ apache/ > **ヒント** > -> `vars` と `default` には、実際には 2 つのディレクトリーがあります。デフォルトの変数には最も低い優先度が付けられます。また、ロールの作成者によって設定されたデフォルト値が含まれます。これは、これらの値のオーバーライドが意図されているときに使用されます。変数は、`vars/main.yml` や `defaults/main.yml` (いずれか 1 つ) で設定できます。 +> `vars` と `default` には、実際には 2 つのディレクトリーがあります。デフォルトの変数 `defaults/main.yml` には最も低い優先度が付けられます。また、ロールの作成者によって設定されたデフォルト値が含まれます。これは、これらの値のオーバーライドが意図されているときに使用されます。`vars/main.yml` で設定されている変数は、変更しないことを想定した変数です。 Playbook でのロールの使用は簡単です。 @@ -87,7 +90,7 @@ Playbook でのロールの使用は簡単です。 に含まれます。ロール内のコピー、スクリプト、テンプレート、またはインクルードタスクは、*絶対パス名または相対パス名なしで*関連するファイル、テンプレート、またはタスクを参照できます。Ansible は、それらの使用に基づいて、ロールのファイル、テンプレート、またはタスクで検索します。 -### Step 2 - 基本的なロールディレクトリー構造の作成 +### ステップ 2 - 基本的なロールディレクトリー構造の作成 Ansible は、プロジェクト内の `roles` というサブディレクトリーを探します。これは、Ansible 構成でオーバーライドできます。各ロールには独自のディレクトリーがあります。新しいロールの作成を容易にするには、`ansible-galaxy` @@ -132,7 +135,7 @@ roles/ └── main.yml ``` -### Step 3 - タスクファイルの作成 +### ステップ 3 - タスクファイルの作成 ロールのタスクサブディレクトリーの `main.yml` は、以下を行う必要があります。 @@ -244,7 +247,7 @@ vhost ディレクトリーは、`file` モジュールで作成/確認される -### Step 4 - ハンドラーの作成 +### ステップ 4 - ハンドラーの作成 `roles/apache_vhost/handlers/main.yml` ファイルにハンドラーを作成し、テンプレートタスクで通知されたときに httpd を再起動します。 @@ -258,7 +261,7 @@ httpd を再起動します。 state: restarted ``` -### Step 5 - web.html と vhost 構成ファイルテンプレートの作成 +### ステップ 5 - web.html と vhost 設定ファイルテンプレートの作成 Web サーバーによってサービスされる HTML コンテンツを作成します。 @@ -270,9 +273,7 @@ Web サーバーによってサービスされる HTML コンテンツを作成 * ロールの `templates` サブディレクトリーに `vhost.conf.j2` テンプレートを作成します。 -```bash -#> cat roles/apache_vhost/templates/vhost.conf.j2 -``` +`vhost.conf.j2` テンプレートファイルの内容を以下に示します。 @@ -296,7 +297,7 @@ Web サーバーによってサービスされる HTML コンテンツを作成 -### Step 6 - ロールのテスト +### ステップ 6 - ロールのテスト `node2` に対してロールをテストする準備が整いました。ただし、役割をノードに直接割り当てることはできないため、最初に役割とホストを接続する Playbook を作成します。ファイル `test_apache_role.yml` をディレクトリー `~/ansible-files` @@ -328,7 +329,7 @@ Playbook を作成します。ファイル `test_apache_role.yml` をディレ これで、Playbook を実行する準備が整いました。 ```bash -[student@ansible-1 ansible-files]$ ansible-playbook test_apache_role.yml +[student@ansible-1 ansible-files]$ ansible-navigator run test_apache_role.yml ``` `node2` に curl コマンドを実行して、ロールが動作したことを確認します。 @@ -362,5 +363,5 @@ tcp6 0 0 :::8080 :::* LISTEN
[前の演習](../1.6-templates) - [次の演習](../2.1-intro) -[こちらをクリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-1---ansible-engine-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-1---ansible-engine-exercises) diff --git a/exercises/ansible_rhel/2.1-intro/README.ja.md b/exercises/ansible_rhel/2.1-intro/README.ja.md index 352395f0f..aa13f0f93 100644 --- a/exercises/ansible_rhel/2.1-intro/README.ja.md +++ b/exercises/ansible_rhel/2.1-intro/README.ja.md @@ -1,21 +1,52 @@ -# ワークショップ演習 - Ansible Tower の概要 +# ワークショップ演習 - Ansible 自動コントローラーの概要 -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 +* [Ansible 自動コントローラー 4.0 + の新機能](#whats-new-in-ansible-automation-controller-40) +* [Ansible Tower + が自動コントローラーに改名された理由](#why-was-ansible-tower-renamed-to-automation-controller) +* [自動コントローラーのユーザー](#who-is-automation-controller-for) * [目的](#objective) * [ガイド](#guide) -* [Ansible Tower を使う理由](#why-ansible-tower) -* [使用する Ansible Tower ラボ環境](#your-ansible-tower-lab-environment) +* [Ansible 自動コントローラーを使う理由](#why-ansible-automation-controller) +* [Ansible + 自動コントローラーラボ環境](#your-ansible-automation-controller-lab-environment) * [ダッシュボード](#dashboard) -* [コンセプト](#concepts) +* [コンセプト](#concepts) + +## Ansible 自動コントローラー 4.0 の新機能 + +Ansible Automation Platform 2 は、Red Hat +の信頼できるエンタープライズテクノロジーの専門家による次回の進化版です。Ansible Automation Platform 2 +リリースには、自動コントローラー 4.0、改善、および名前が変更された Ansible Tower が含まれます。 + +コントローラーは、企業全体で自動化を定義、操作、および委譲するための標準化された方法を提供します。これにより、自動化チームが迅速にスケーリングおよび配信できる、新たなテクノロジーと強化されたアーキテクチャーが導入されました。 + +### Ansible Tower が自動コントローラーに改名された理由 + +Ansible Automation Platform 2 は進化し続けるため、特定の機能は、以前は Ansible Tower +と知ったものから切り離されたもの(将来のリリースで分離される)から切り離されました。これらの拡張機能および Ansible Automation +Platform スイート内の全体の位置を反映させることは理にかなっています。 + +### 自動コントローラーの対象ユーザー +すべての自動化チームのメンバーが対話したり、直接的または間接的に自動化コントローラーに依存します。 + +* 自動化作成者は Ansible Playbook、ロール、およびモジュールを開発します。 +* 自動化アーキテクトはチーム全体で自動化を促進し、IT プロセスと合理化に合わせます。 +* 自動化オペレーターは、自動化プラットフォームおよびフレームワークが機能することを確認します。 + +これらのロールは、必ずしも人やチーム専用のものであるわけではありません。多くの組織は、複数のロールをユーザーに割り当てるか、または必要に応じて特定の自動化タスクを実行します。 + +Automation Operator は通常、責任に基づいて自動化コントローラーと直接対話する主要な個人です。 ## 目的 -この演習では、Red Hat Ansible Automation Platform によって提供される機能の実行を含む、AnsibleTower -の概要を説明します。次のような AnsibleTower の基本を対象とします。 +以下の演習では、Red Hat Ansible +自動コントローラーによって提供される機能の実行を含む、自動コントローラーの概要を説明します。次のような自動コントローラーの基本を対象とします。 * ジョブテンプレート * プロジェクト @@ -25,37 +56,38 @@ ## ガイド -### Ansible Tower を使う理由 +### 自動コントローラーに移動します。 -Ansible Tower は、IT 自動化のためのエンタープライズソリューションを提供する Web ベースの UI です。 +自動コントローラーは、IT 自動化のためのエンタープライズソリューションを提供する Web ベースの UI です。 * これには、ユーザーフレンドリーなダッシュボードがあります * 自動化、視覚的管理、監視機能を追加して Ansible を補佐 * 管理者にユーザーアクセス制御を提供 +* 自動化コントローラーオブジェクトおよびコンポーネントの個別の _view_ および _edit_ パースペクティブを提供します。 * インベントリーをグラフィカルに監視し、さまざまなリソースと同期 * RESTfulAPI が利用可 * その他いろいろ... -### Ansible Tower ラボ環境 +### Ansible 自動コントローラーラボ環境 このラボでは、事前設定されたラボ環境で作業します。ここでは、以下のホストにアクセスできます。 -| Role | Inventory name | -| -----------------------------| ---------------| -| Ansible Control Host & Tower | ansible-1 | -| Managed Host 1 | node1 | -| Managed Host 2 | node2 | -| Managed Host 2 | node3 | +| Role | Inventory name | +| --------------------------------------------- | ---------------| +| Ansible control host & automation controller | ansible-1 | +| Managed Host 1 | node1 | +| Managed Host 2 | node2 | +| Managed Host 2 | node3 | -このラボの Ansible Tower -は、個別にセットアップされています。作業を行うマシンへの適切なアクセス権があることを確認してください。Ansible Tower -は、すでにインストールされてライセンス付与が行われています。Web UI は、HTTP/HTTPS でアクセスできます。 +このラボの Ansible +自動コントローラーは、個別にセットアップされています。作業を行うマシンへの適切なアクセス権があることを確認してください。Ansible +自動コントローラーは、すでにインストールされてライセンス付与が行われています。Web UI は、HTTP/HTTPS でアクセスできます。 ### ダッシュボード -タワーを最初に見てみましょう。指定の URL にブラウザでアクセスします。この URL は `https://student.workshopname.rhdemo.io` のようなもので、`` は、学習者番号に置き換え、`workshopname` は、現在のワークショップ名に置き換えます。次に `admin` としてログインします。このパスワードは、インストラクターから渡されます。 +自動コントローラーを最初に見てみましょう。指定の URL にブラウザでアクセスします。この URL は `https://student..demoredhat.com` のようなもので、`` は、学習者番号に置き換え、`workshopname` は、現在のワークショップ名に置き換えます。次に `admin` としてログインします。このパスワードは、インストラクターから渡されます。 -Ansible TowerのWeb UI では、次を示すグラフのあるダッシュボードが表示されます。 +自動コントローラーのWeb UI では、次を示すグラフのあるダッシュボードが表示されます。 * 最近のジョブのアクティビティー * 管理対象ホストの数 @@ -63,46 +95,45 @@ Ansible TowerのWeb UI では、次を示すグラフのあるダッシュボー このダッシュボードには、Playbook で完了したタスクの実行に関するリアルタイムデータも表示されます。 -![Ansible Tower ダッシュボード](images/dashboard.png) +![Ansible 自動コントロ−ラーダッシュボード](images/controller_dashboard.jpg) ### コンセプト -自動化に Ansible Tower を使用する方法を詳しく説明する前に、いくつかの概念と命名規則について理解しておく必要があります。 +Ansible 自動コントローラーを使用する方法を詳しく説明する前に、いくつかの概念と命名規則について理解しておく必要があります。 #### プロジェクト -プロジェクトは、Ansible Tower にある Ansible Playbook の論理的なコレクションです。これらの Playbook -は、Ansible インスタンス、または Tower でサポートされているソースコードバージョン管理システムにあります。 +プロジェクトは、Ansible 自動コントローラーにある Ansible Playbook の論理的なコレクションです。これらの Playbook +は、Ansible インスタンス、または自動コントローラーでサポートされているソースコードバージョン管理システムにあります。 #### インベントリー インベントリーは、ジョブを起動できるホストのコレクションです (Ansible -インベントリーファイルと同様)。インベントリーはグループに分類され、それらのグループには実際のホストが含まれます。グループは、ホスト名を Tower -に入力して手動で取得することも、Ansible Tower -のサポートされるクラウドプロバイダーや動的インベントリースクリプトから取得することもできます。 +インベントリーファイルと同様)。インベントリーはグループに分類され、それらのグループには実際のホストが含まれます。グループは、ホスト名を +自動コントローラーに入力して手動で取得することも、Ansible +自動コントローラーのサポートされるクラウドプロバイダーや動的インベントリースクリプトから取得することもできます。 #### 認証情報 -認証情報は、ジョブをマシンに対して起動したり、インベントリーソースと同期したり、プロジェクトのコンテンツをバージョン管理システムからインポートしたりする際の認証に使用されます。認証情報は、設定で見つかります。 +認証情報は、ジョブをマシンに対して起動したり、インベントリーソースと同期したり、プロジェクトのコンテンツをバージョン管理システムからインポートしたりする際の認証に自動コントローラーに使用されます。認証情報は、設定で見つかります。 -Tower の認証情報は、Tower -にインポートおよび暗号化されて保存されます。コマンドラインにおいてプレーンテキストで取得することはできません。実際に認証情報をユーザーに公開することなく、これらの認証情報を使用する機能をユーザーとチームに付与できます。 +自動コントローラーの認証情報は、自動コントローラーにインポートおよび暗号化されて保存されます。コマンドラインにおいてプレーンテキストで取得することはできません。実際に認証情報をユーザーに公開することなく、これらの認証情報を使用する機能をユーザーとチームに付与できます。 #### テンプレート ジョブテンプレートは、Ansible ジョブを実行するための定義であり、パラメーターセットでもあります。ジョブテンプレートは同じジョブを何度も実行する場合に便利です。また、ジョブテンプレートは -Ansible playbook コンテンツの再利用およびチーム間のコラボレーションを促進します。ジョブを実行するには、Tower -ではジョブテンプレートを先に作成する必要があります。 +Ansible playbook +コンテンツの再利用およびチーム間のコラボレーションを促進します。ジョブを実行するには、自動コントローラーではジョブテンプレートを先に作成する必要があります。 #### ジョブ -ジョブは、Ansible Playbook をホストのインベントリーに対して起動する Tower のインスタンスです。 +ジョブは、Ansible Playbook をホストのインベントリーに対して起動する自動コントローラーのインスタンスです。 --- **ナビゲーション**
[前の演習](../1.7-role) - [次の演習](../2.2-cred) -[クリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-2---ansible-tower-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-2---ansible-tower-exercises) diff --git a/exercises/ansible_rhel/2.2-cred/README.ja.md b/exercises/ansible_rhel/2.2-cred/README.ja.md index 566dcc0de..7be50b70c 100644 --- a/exercises/ansible_rhel/2.2-cred/README.ja.md +++ b/exercises/ansible_rhel/2.2-cred/README.ja.md @@ -1,14 +1,14 @@ # ワークショップ演習 - インベントリー、認証情報、およびアドホックコマンド -**その他の言語はこちらをお読みください。**: -
![uk](../../../images/uk.png) [English](README.md),![japan](../../../images/japan.png)[日本語](README.ja.md),![france](../../../images/fr.png) [Française](README.fr.md),![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) -* [インベントリーを調べる](#examine-an-inventory) -* [マシンの認証情報を調べる](#examine-machine-credentials) +* [インベントリーの検証](#examine-an-inventory) +* [マシンの認証情報の検証](#examine-machine-credentials) * [アドホックコマンドの実行](#run-ad-hoc-commands) * [チャレンジラボ: アドホックコマンド](#challenge-lab-ad-hoc-commands) @@ -18,30 +18,30 @@ * 以下を見つけて理解: - * Ansible Tower - [**インベントリー**](https://docs.ansible.com/ansible-tower/latest/html/userguide/inventories.html) - * Ansible Tower - [**認証情報**](https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html) + * Ansible 自動コントローラー + [**インベントリー**](https://docs.ansible.com/automation-controller/latest/html/userguide/inventories.html) + * Ansible 自動コントローラー + [**認証情報**](https://docs.ansible.com/automation-controller/latest/html/userguide/credentials.html) -* Ansible Tower WebUI を介したアドホックコマンドの実行 +* Ansible 自動コントローラー WebUI を介したアドホックコマンドの実行 ## ガイド -### インベントリーを調べる +### インベントリーの検証 最初に必要なのは、管理対象ホストのインベントリーです。これは、Ansible Engine のインベントリファイルーに相当します。それ以外にもたくさんありますが、まずは基本から始めましょう。 * すでに Web UI を開いているはずですが、開いていない場合は、指定された URL - をブラウザーで開きます。これは、**https://student\.workshopname.rhdemo.io** のような URL + をブラウザーで開きます。これは、`https://student.workshopname.demoredhat.com` のような URL です。 は学習者番号に、"workshopname" は現在のワークショップの名前に変更します。`admin` としてログインします。このパスワードは、インストラクターから渡されます。 **Workshop Inventory** というインベントリーが現れます。**Workshop Inventory** をクリックして、**Hosts** ボタンをクリックします。 -`~/lab_inventory/hosts` のインベントリー情報は、プロビジョニング目的の一環として Ansible Tower -インベントリーに事前にロードされていました。 +`~/lab_inventory/hosts` のインベントリー情報は、プロビジョニング目的の一環として Ansible +自動コントローラーインベントリーに事前にロードされていました。 ```bash $ cat ~/lab_inventory/hosts @@ -56,69 +56,64 @@ node2 ansible_host=33.44.55.66 node3 ansible_host=44.55.66.77 [control] -ansible-1 ansible_host=11.22.33.44 +ansible ansible_host=11.22.33.44 ``` > **警告** > > 実際の環境のインベントリーでは、IP アドレスが異なることがあります。 -### マシンの認証情報を調べる +### マシンの認証情報の検証 -次に、Tower から管理対象ホストにアクセスするための認証情報を調べます。この Ansible +次に、自動コントローラーから管理対象ホストにアクセスするための認証情報を調べます。この Ansible ワークショップのプロビジョニングプロセスの一環として、**ワークショップ資格情報**はすでに設定されています。 -**RESOURCES** メニューで **Credentials** を選択します。次に、*Workshop Credential** +**Resource** メニューで **Credentials** を選択します。次に、*Workshop Credential** をクリックします。 次の情報に注意してください。 - - + + - - + + - - + +
ParameterValueパラメーター
Credential Type Machine- Machine credentials define ssh and user-level privilege escalation access for playbooks. They are used when submitting jobs to run playbooks on a remote host.
usernameec2-user which matches our command-line Ansible inventory username for the other linux nodesUsernameec2-user which matches our command-line Ansible inventory username for the other Linux nodes
SSH PRIVATE KEYENCRYPTED - take note that you can't actually examine the SSH private key once someone hands it over to Ansible TowerSSH Private KeyEncrypted - take note that you can't actually examine the SSH private key once someone hands it over to Ansible Automation controller
### アドホックコマンドの実行 -AnsibleTower からアドホックコマンドを実行することもできます。 +Ansible 自動コントローラーからアドホックコマンドを実行することもできます。 -* Web UIで、**RESOURCES → Inventories → Workshop Inventory** に移動します。 +* Web UIで、**Resource → Inventories → Workshop Inventory** に移動します。 -* **HOSTS** ボタンをクリックしてホストビューに変更し、ホストエントリーの左側にあるボックスにチェックマークを付けて 3 - つのホストを選択します。 +* **Host** タブをクリックしてホストビューに変更し、ホストエントリーの左側にあるボックスにチェックマークを付けて 3 つのホストを選択します。 -* **RUN COMMANDS**をクリックします。次の画面で、アドホックコマンドを指定する必要があります。 +* **Run Command** ボタンをクリックします。次の画面で、アドホックコマンドを指定する必要があります。 - - - - - - - - - - - - - -
ParameterValue
MODULEping
MACHINE CREDENTIALWorkshop Credentials
+**Details** ウィンドウで、**Module** `ping` を選択し、**Next** をクリックします。 - * ** LAUNCH **をクリックして、出力を確認します。 +**Execution Environment** ウィンドウで **Default execution environment** +を選択し、**Next** をクリックします。 + +**Machine Credential**ウィンドウで、**Workshop Credentials** を選択し、**Launch** +をクリックします。 + +> **ヒント** +> +> 結果の出力は、コマンドが完了すると表示されます。 +>
@@ -126,43 +121,44 @@ AnsibleTower からアドホックコマンドを実行することもできま モジュールにはオプションは必要ありません。他のモジュールの場合、引数として実行するコマンドを指定する必要があります。**command ** モジュールを試して、アドホックコマンドを使用して実行中のユーザーのユーザー ID を見つけてください。 - - - - - - - - - - - - - -
ParameterValue
MODULEcommand
ARGUMENTSid
+* Web UIで、**Resource → Inventories → Workshop Inventory** に移動します。 + +* **Host** タブをクリックしてホストビューに変更し、ホストエントリーの左側にあるボックスにチェックマークを付けて 3 つのホストを選択します。 + +* **Run Command** ボタンをクリックします。次の画面で、アドホックコマンドを指定する必要があります。 + +**Details** ウィンドウで、**Arguments** タイプ `id` で **Module** `command` +を選択し、**Next** をクリックします。 + +**Execution Environment** ウィンドウで **Default execution environment** +を選択し、**Next** をクリックします。 + +**Machine Credential**ウィンドウで、**Workshop Credentials** を選択し、**Launch** +をクリックします。 + > **ヒント** > -> 実行するモジュールを選択します。"Arguments" の隣の疑問符をクリックすると、モジュールの docs ページへのリンクが表示されます。これは便利なのでお試しください。 +> 実行するモジュールを選択します。"Arguments" の隣の疑問符をクリックすると、Ansible 自動コントローラーにより、モジュールの docs ページへのリンクが表示されます。これは便利なのでお試しください。
システムから秘密情報を取得してみるのはどうでしょうか?*/etc/shadow* を出力してみましょう。 - - - - - - - - - - - - - -
ParameterValue
MODULEcommand
ARGUMENTScat /etc/shadow
+* Web UIで、**Resource → Inventories → Workshop Inventory** に移動します。 + +* **Host** タブをクリックしてホストビューに変更し、ホストエントリーの左側にあるボックスにチェックマークを付けて 3 つのホストを選択します。 + +* **Run Command** ボタンをクリックします。次の画面で、アドホックコマンドを指定する必要があります。 + +**Details** ウィンドウで、**Arguments** `cat /etc/shadow` で **Module** `command` +を選択し、**次へ** をクリックします。 + +**Execution Environment** ウィンドウで **Default execution environment** +を選択し、**Next** をクリックします。 + +**Machine Credential**ウィンドウで、**Workshop Credentials** を選択し、**Launch** +をクリックします。 > **警告** > @@ -170,48 +166,47 @@ AnsibleTower からアドホックコマンドを実行することもできま 最後のはうまく動作しません。すべて赤く表示されています。 -最後のアドホックコマンドを再実行しますが、今回は **ENABLE PRIVILEGE ESCALATION** ボックスにチェックマークを付けます。 +最後のアドホックコマンドを再実行しますが、今回は **Enable privilege escalation** にチェックマークを付けます。 -ご覧のとおり、今度は成功しました。root として実行する必要があるタスクの場合は、特権を昇格する必要があります。これは、AnsiblePlaybook -で使用されている * become: yes** と同じです。 +ご覧のとおり、今度は成功しました。`root` +として実行する必要があるタスクの場合は、特権を昇格する必要があります。これは、AnsiblePlaybook で使用されている * become: +yes** と同じです。 ### チャレンジラボ: アドホックコマンド さて、小チャレンジです。アドホックを実行して、パッケージ「tmux」がすべてのホストにインストールされていることを確認します。不明な場合は、上記の -Web UI を介して、または Tower 制御ホストで `[ansible@tower ~]$ ansible-doc yum` +Web UI を介して、または自動コントローラー制御ホストで `[ansible@controller ~]$ ansible-doc yum` を実行してドキュメントを参照してください。 > **警告** > > **回答を以下に示します。** - - - - - - - - - - - - - - - - - -
ParameterValue
yumcommand
ARGUMENTSname=tmux
ENABLE PRIVILEGE ESCALATION
+* Web UIで、**Resource → Inventories → Workshop Inventory** に移動します。 + +* **Host** タブをクリックしてホストビューに変更し、ホストエントリーの左側にあるボックスにチェックマークを付けて 3 つのホストを選択します。 + +* **Run Command** ボタンをクリックします。次の画面で、アドホックコマンドを指定する必要があります。 + +**Details** ウィンドウで、**Module** `yum` を選択し、**Arguments** タイプ `name=tmux` で +**Enable privilege escalation** をチェックし、**Next** をクリックします。 + +**Execution Environment** ウィンドウで **Default execution environment** +を選択し、**Next** をクリックします。 + +**Machine Credential**ウィンドウで、**Workshop Credentials** を選択し、**Launch** +をクリックします。 + + > **ヒント** > -> コマンドの黄色い出力では、Ansible が実際に行ったことを示しています (ここでは、パッケージをインストールする必要がありました)。2 回目にアドホックコマンドを実行すると、出力が緑色になり、パッケージが既にインストールされていることが通知されます。そのため、Ansible での黄色の出力は、「注意」と示しているわけではありません。 +「CHANGED」という出力でパッケージがインストールされたことに注目してください。この ad hoc コマンドを2回目に実行すると、出力には「SUCCESS」と表示され、messageパラメータで「何もすることはありません」と通知されます。 --- **ナビゲーション**
[前の演習](../2.1-intro) - [次の演習](../2.3-projects) -[クリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-2---ansible-tower-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-2---ansible-tower-exercises) diff --git a/exercises/ansible_rhel/2.3-projects/README.ja.md b/exercises/ansible_rhel/2.3-projects/README.ja.md index 61dd0e228..ea2fda233 100644 --- a/exercises/ansible_rhel/2.3-projects/README.ja.md +++ b/exercises/ansible_rhel/2.3-projects/README.ja.md @@ -1,7 +1,7 @@ # ワークショップ演習 - プロジェクトとジョブテンプレート -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md), ![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 @@ -15,13 +15,12 @@ ## 目的 -Ansible Tower **Project** は、AnsiblePlaybook -の論理的なコレクションです。プレイブックは、Git、Subversion、Mercurial などのTower がサポートするソースコード管理 -(SCM) システムに配置することで管理できます。 +Ansible 自動コントローラー **Project** は、AnsiblePlaybook の論理的なコレクションです。Playbook +は、Git、Subversion などの自動コントローラーがサポートするソースコード管理 (SCM) システムに配置することで管理できます。 この演習では、以下について説明します。 -* AnsibleTower プロジェクトの概要と利用 +* Ansible 自動コントローラープロジェクトの概要と利用 * Git リポジトリーに保存されている AnsiblePlaybook の使用 * Ansible ジョブテンプレートの作成と使用 @@ -39,7 +38,7 @@ Apache Web サーバーをインストールする Playbook が既に **rhel/apa ```yaml --- - name: Apache server installed - hosts: all + hosts: web tasks: - name: latest Apache version installed @@ -76,61 +75,58 @@ Apache Web サーバーをインストールする Playbook が既に **rhel/apa > > 作成した Playbook の違いをメモしてください。最も重要なのは、`become` がなく、`hosts` が `all` に設定されていることです。 -Tower で **Source Control Management (SCM)** +自動コントローラーで **Source Control Management (SCM)** として、このレポジトリーを設定して使用するには、このレポジトリーを使用する **Project** を作成する必要があります。 ### プロジェクトの作成 -* サイドメニュービューで **RESOURCES → Projects** に移動し、緑色の **+** - ボタンをクリックします。フォームを記入します。 - - - - - - - - - - - - - - - - - - -
ParameterValue
NAMEWorkshop Project
ORGANIZATIONDefault
SCM TYPEGit
- -次に、リポジトリーにアクセスするための URL が必要になります。上記の Github リポジトリーに移動し、右側にある緑色の **Clone or -download** ボタンを選択し、**Use https** をクリックして、HTTPS URL をコピーします。 - -> **注意** -> -> クリックする **Use https** がなく、**Use SSH** がある場合でも問題ありません。URL をコピーしてください。**https** で始まる URL をコピーすることが重要です。 +* **Resources → Projects** に移動します。フォームで **Add** ボタンをクリックします。フォームを記入します。 + + + + + + + + + + + + + + + + + + + + + + +
パラメーター
NameWorkshop Project
OrganizationDefault
Default Execution EnvironmentDefault execution environment
Source Control Credential TypeGit
-Project 構成に URL を入力します。 + Project 構成に URL を入力します。 - - + + - + - - + +
ParameterValueパラメーター
SCM URLSource Control URL https://github.com/ansible/workshop-examples.git
SCM UPDATE OPTIONSTick the first three boxes to always get a fresh copy of the repository and to update the repository when launching a jobOptionsSelect Clean, Delete, Update Revision on Launch to request a fresh copy of the repository and to update the repository when launching a job.
* **SAVE** をクリックします。 + 新しい Project は、作成後に自動的に同期されます。ただし、これを手動で行うこともできます。**Projects** -ビューに移動し、プロジェクトの右側にある円形の矢印 *Get latest SCM revision** アイコンをクリックして、プロジェクトを Git +ビューに移動し、プロジェクトの右側にある円形の矢印 *Sync Project** アイコンをクリックして、プロジェクトを Git リポジトリーと再度同期します。 同期ジョブを開始した後、**Jobs** ビューに移動します。Git リポジトリーを更新するための新しいジョブがあります。 @@ -138,7 +134,7 @@ Project 構成に URL を入力します。 ### ジョブテンプレートの作成とジョブの実行 ジョブテンプレートは、Ansible -ジョブを実行するための定義とパラメーターのセットです。ジョブテンプレートは、同じジョブを何度も実行するのに役立ちます。したがって、Tower から +ジョブを実行するための定義とパラメーターのセットです。ジョブテンプレートは、同じジョブを何度も実行するのに役立ちます。したがって、自動コントローラーから Ansible **Job**を実行する前に、まとめる **Job Template** を作成する必要があります。 * **Inventory**: ジョブが実行するホスト @@ -149,59 +145,64 @@ Ansible **Job**を実行する前に、まとめる **Job Template** を作成 * **What** 使用する Playbook -実際にやってみましょう。**Templates** ビューに移動して、![plus](images/green_plus.png) -ボタンをクリックし、**Job Template** を選択します。 +実際にやってみましょう。**Resources -> Templates** ビューに移動して、*Add** button and choose ** ボタンをクリックし、**Add job template** を選択します。 > **ヒント** > > フィールドへの記入を選ぶにあたり、オプションの概要を得るには拡大鏡をクリックすることができます。 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ParameterValue
NAMEInstall Apache
JOB TYPERun
INVENTORYWorkshop Inventory
PROJECTWorkshop Project
PLAYBOOKrhel/apache/apache_install.yml
CREDENTIALWorkshop Credentials
LIMITweb
OPTIONStasks need to run as root so check **Enable privilege escalation**
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
パラメーター
NameInstall Apache
Job TypeRun
InventoryWorkshop Inventory
ProjectWorkshop Project
Execution EnvironmentDefault execution environment
Playbookrhel/apache/apache_install.yml
CredentialsWorkshop Credential
Limitweb
Optionstasks need to run as root so check **Privilege Escalation**
-* **SAVE** をクリックします。 +* **Save** をクリックします。 -青い **LAUNCH** ボタンを直接クリックするか、Job Templates +青い **Launch** ボタンを直接クリックするか、Job Templates の概要でロケットをクリックすると、ジョブを開始できます。ジョブテンプレートを起動すると、自動的にジョブの概要が表示され、Playbook の実行をリアルタイムで追跡できます。 -![ジョブの実行](images/job_overview.png) +ジョブの詳細 ![job details](images/job_details.png) + +ジョブの実行 ![job_run](images/job_run.png) これには時間がかかる場合があるため、提供されているすべての詳細を詳しく調べてください。 @@ -211,13 +212,14 @@ Ansible **Job**を実行する前に、まとめる **Job Template** を作成 * また、開始時間と終了時間の実行時間が記録されるため、ジョブの実行が実際にどのくらいの時間であったかがわかります。 -* 右側には、Playbook +* **Output** を選択すると、Playbook の実行の出力が表示されます。タスクの下のノードをクリックして、各ノードの各タスクの詳細情報が表示されていることを確認します。 -ジョブが終了したら、メインの **Jobs** ビューに移動します。すべてのジョブがここに一覧表示されます。Playbook が実行される前に、SCM -更新が開始されていたことがわかります。これは、起動時に **Project** 用に構成した Git アップデートです。 +ジョブが終了したら、メインの **Jobs** ビューに移動します。すべてのジョブがここに一覧表示されます。Playbook +が実行される前に、Source Control Update が開始されていたことがわかります。これは、起動時に **Project** 用に構成した +Git アップデートです。 -### チャレンジラボ: 結果を確認する +### チャレンジラボ: 結果のチェック 小チャレンジ: @@ -229,41 +231,32 @@ Ansible **Job**を実行する前に、まとめる **Job Template** を作成 > > `systemctl status httpd` はどうでしょうか。 + > **警告** > > **回答を以下に示します** -* **Inventories** → **Workshop Inventory** に移動します - -* **HOSTS** ビューでは、すべてのホストを表示して、**RUN COMMANDS** をクリックします。 - -* 以下に記入してください。 - - - - - - - - - - - - - - - - - - -
ParameterValue
MODULEcommand
ARGUMENTSsystemctl status httpd
MACHINE CREDENTIALSWorkshop Credentials
- -* **LAUNCH** をクリックします +* **Resources → Inventories** → **Workshop Inventory** に移動します。 + +* **Host** ビューでは、`node1`、`node2`、`node3` を選択して、**Run Command** をクリックします。 + +**Details** ウィンドウで、**Arguments** `systemctl status httpd` で **Module** +`command` を選択し、**次へ** をクリックします。 + +**Execution Environment** ウィンドウで **Default execution environment** +を選択し、**Next** をクリックします。 + +**Machine Credential**ウィンドウで、**Workshop Credential** を選択し、**Launch** +をクリックします。 + +> **ヒント** +> +> 結果の出力は、コマンドが完了すると表示されます。 --- **ナビゲーション**
[前の演習](../2.2-cred) - [次の演習](../2.4-surveys) -[クリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-2---ansible-tower-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-2---ansible-tower-exercises) diff --git a/exercises/ansible_rhel/2.4-surveys/README.ja.md b/exercises/ansible_rhel/2.4-surveys/README.ja.md index a5c1cbbb8..e25e2c425 100644 --- a/exercises/ansible_rhel/2.4-surveys/README.ja.md +++ b/exercises/ansible_rhel/2.4-surveys/README.ja.md @@ -1,7 +1,7 @@ -# 演習 - アンケート +# 演習 - Survey -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md), ![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 @@ -10,14 +10,14 @@ * [Apache-configuration ロール](#the-apache-configuration-role) * [Survey によるテンプレートの作成](#create-a-template-with-a-survey) * [テンプレートの作成](#create-template) - * [Aurvey の追加](#add-the-survey) + * [Survey の追加](#add-the-survey) * [テンプレートの起動](#launch-the-template) * [練習してみましょう](#what-about-some-practice) ## 目的 -Ansible Tower Survey [survey -機能](https://docs.ansible.com/ansible-tower/latest/html/userguide/job_templates.html#surveys) +Ansible 自動コントローラー [survey +機能](https://docs.ansible.com/automation-controller/latest/html/userguide/job_templates.html#surveys) の使用のデモンストレーションを行います。Survey は、「Prompt for Extra Variables (追加変数のプロンプト)」と同様に Playbook の追加変数を設定しますが、ユーザーが使いやすい質問と回答を使ってこれを実行します。また、Survey ではユーザー入力を検証することもできます。 @@ -32,7 +32,7 @@ Playbook の追加変数を設定しますが、ユーザーが使いやすい * ジョブ **Template** を起動します。 -さらに、このロールは、他の演習中に混ざった場合を考慮して、Apache 構成が適切に設定されていることも確認します。 +さらに、この演習のために Apache の設定が適切に設定されていることを確認する役割もあります。 > **ヒント** > @@ -40,10 +40,11 @@ Playbook の追加変数を設定しますが、ユーザーが使いやすい ### Apache-configuration ロール -Jinja テンプレートの Playbook とロールが、ディレクトリー `rhel/apache` の Github -レポジトリーに既に存在します。[https://github.com/ansible/workshop-examples](https://github.com/ansible/workshop-exampleshttps://github.com/ansible/workshop-examples) +Jinja2 テンプレートの Playbook とロールが、ディレクトリー `rhel/apache` の Github リポジトリー +[https://github.com/ansible/workshop-examples](https://github.com/ansible/workshop-examples) +に既に存在します。 -Github UI にアクセスして、コンテンツを確認します。Playbook `apache_role_install.yml` は単にロールを参照します。ロールは、`roles/role_apache` サブディレクトリーにあります。 + Github UI にアクセスして、コンテンツを確認します。Playbook `apache_role_install.yml` は単にロールを参照します。ロールは、`roles/role_apache` サブディレクトリーにあります。 * ロール内で、`{{…​}}` でマークされている `templates/index.html.j2` テンプレートファイルの 2 つの変数をメモします。 @@ -63,26 +64,26 @@ Playbook とロールは、`apache_install.yml` Playbook と同じ Github #### テンプレートの作成 -* **Templates** に移動し、![plus](images/green_plus.png) ボタンをクリックして、**Job - Template** を選択します。 +* **Resources → Templates** に移動し、**Add** ボタンをクリックして、**Add job template** + を選択します。 * 次の情報を入力します。 - - + + - + - + - + @@ -90,24 +91,28 @@ Playbook とロールは、`apache_install.yml` Playbook と同じ Github - + + + + + - - + + - + - - + +
ParameterValueパラメーター
NAMEName Create index.html
JOB TYPEJob Type Run
INVENTORYInventory Workshop Inventory
Workshop Project
PLAYBOOKEecution EnvironmentDefault execution environment
Playbook rhel/apache/apache_role_install.yml
CREDENTIALWorkshop CredentialsCredentialsWorkshop Credential
LIMITLimit web
OPTIONSEnable Privilege EscalationOptionsPrivilege Escalation
-* **SAVE** をクリックします。 +* **Save** をクリックします。 > **警告** > @@ -115,75 +120,72 @@ Playbook とロールは、`apache_install.yml` Playbook と同じ Github #### Survey の追加 -* Template で、**ADD SURVEY** ボタンをクリックします。 +* テンプレートで **Survey** タブをクリックして、**Add** ボタンをクリックします。 -* **ADD SURVEY PROMPT**の下に、次のように入力します。 +* 次の情報を入力します。 - - + + - + - - + + - +
ParameterValueパラメーター
PROMPTQuestion First Line
ANSWER VARIABLE NAMEfirst_lineAnswer Variable Namefirst_line
ANSWER TYPEAnswer Type Text
-* **+ADD** をクリックしてください。 +* **Save** をクリックします。 +* **追加** ボタンをクリックします。 -* 同様に、2 番目の **Survey Prompt** を追加します。 +同じ方法で、2 番目の **Survey Question** を追加します。 - - + + - + - - + + - +
ParameterValueパラメーター
PROMPTQuestion Second Line
ANSWER VARIABLE NAMEsecond_lineAnswer Variable Namesecond_line
ANSWER TYPEAnswer Type Text
-* **+ADD** をクリックしてください。 - -* Survey の **SAVE** をクリックします。 +* **Save** をクリックします。 +* トグルをクリックして Survey の質問を **On** に切り替えます。 -* Template の **SAVE** をクリックします。 +* Survey の **Preview** をクリックします。 ### テンプレートの起動 -次に、**Create index.html** ジョブテンプレートを起動します。 +**Details** タブを選択し、**Launch** ボタンをクリックしてジョブテンプレートの作成 **Create index.html** +を起動します。 実際に起動する前に、Survey により、**First Line** と **Second Line** -が求められます。テキストを入力して、**Next** をクリックします。次のウィンドウに値が表示されます。問題がなければ、**Launch** +が求められます。テキストを入力して、**Preview** をクリックします。次のウィンドウに値が表示されます。問題がなければ、**Launch** をクリックしてジョブを実行します。 -> **ヒント** -> -> 2 つの survey 行が **Extra Variables** としてジョブの左にどのように表示されているかに注意してください。 - -ジョブが完了したら、Apache ホームページを確認します。コントロールホストの SSH コンソールで、`node1` の IP アドレスに対して -`curl` を実行します。 +ジョブが完了したら、Apache ホームページを確認します。コントロールホストの SSH コンソールで、`node1` の以下に対して `curl` +を実行します。 ```bash -$ curl http://22.33.44.55 +$ curl http://node1

Apache is running fine

This is survey field "First Line": line one

@@ -198,9 +200,9 @@ Playbook によって使用されている 2 つの変数が `index.html` ファ
{% if page.url contains 'ansible_rhel_90' %} -[前の演習](../4-variables) - [次の演習](../../ansible_rhel_90/6-system-roles/) +[Previous Exercise](../4-variables) - [Next Exercise](../../ansible_rhel_90/6-system-roles/) {% else %} -[前の演習](../2.3-projects) - [次の演習](../2.5-rbac) +[Previous Exercise](../2.3-projects) - [Next Exercise](../2.5-rbac) {% endif %}

-[こちらをクリックして、Ansible for Red Hat Enterprise Linux Workshop に戻ります](../README.md) +[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_rhel/2.5-rbac/README.ja.md b/exercises/ansible_rhel/2.5-rbac/README.ja.md index 7f1739fc5..1d6194362 100644 --- a/exercises/ansible_rhel/2.5-rbac/README.ja.md +++ b/exercises/ansible_rhel/2.5-rbac/README.ja.md @@ -1,150 +1,154 @@ # ワークショップ演習 - ロールベースのアクセス制御 -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md), ![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 * [目的](#objective) * [ガイド](#guide) -* [Ansible Tower ユーザー](#ansible-tower-users) -* [Ansible Tower チーム](#ansible-tower-teams) +* [Ansible 自動コントローラーユーザー](#ansible-automation-controller-users) +* [Ansible 自動コントローラーチーム](#ansible-automation-controller-teams) * [パーミッションの付与](#granting-permissions) -* [パーミッションのテスト](#test-permissions) +* [パーミッションのテスト](#test-permissions) ## 目的 -AnsibleTower が認証情報をユーザーから分離する方法をすでに学習しました。Ansible Tower のもう 1 +Ansible 自動コントローラーが認証情報をユーザーから分離する方法をすでに学習しました。Ansible 自動コントローラーのもう 1 つの利点は、ユーザーとグループの権利管理です。この演習では、役割ベースのアクセス制御 (RBAC) について説明します。 ## ガイド -### Ansible Tower ユーザー +### Ansible 自動コントローラーユーザー -Tower ユーザーには 3 つのタイプがあります。 +自動コントローラーユーザーには、以下の 3 つのタイプがあります。 * **Normal User (通常ユーザー)**: このユーザーには、適切なロールや権限が付与されているユーザーのインベントリーやプロジェクトに限定される読み取りおよび書き込みアクセスがあります。 -* **System Auditor (システム監査者)**: この監査者は、Tower - 環境内のすべてのオブジェクトの読み取り専用機能を暗黙的に継承します。 +* **System Auditor (システム監査者)**: + この監査者は、自動コントローラー環境内のすべてのオブジェクトの読み取り専用機能を暗黙的に継承します。 -* **System Administrator (システム管理者)**: このユーザーには、Tower - インストール全体にわたる管理者、読み込み、書き込み特権があります。 +* **System Administrator (システム管理者)**: + このユーザーには、自動コントローラーインストール全体にわたる管理者、読み込み、書き込み特権があります。 ユーザーを作成しましょう。 -* **ACCESS** の Tower メニューで、**Users** をクリックします。 +* **Access** 下の自動化コントローラーメニューで、**Users** をクリックします。 -* 緑のプラスボタンをクリックします。 +* **追加** ボタンをクリックします。 * 新しいユーザーの値を入力します。 - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - +
ParameterValueパラメーター
FIRST NAME WernerUsernamewweb
LAST NAMEWebEmailwweb@example.com
OrganizationDefaultPasswordansible
EMAILwweb@example.comConfirm Passwordansible
USERNAMEwwebFirst NameWerner
PASSWORDansibleLast NameWeb
CONFIRM PASSWORDansibleOrganizationDefault
USER TYPEUser Type Normal User
-* パスワードの確認 - -* **SAVE** をクリックします。 +* **Save** をクリックします。 -### Ansible Tower Team +### 自動コントローラーチーム Team (チーム) は、関連付けられたユーザー、プロジェクト、認証情報、およびパーミッションを持つ組織の下位区分のことです。チームは、ロールベースのアクセス制御スキームを実装し、組織全体で責任を委任する手段となります。たとえば、パーミッションは、チームの各ユーザーではなく、チーム全体に付与することができます。 チームの作成: -* メニューで **ACCESS → Teams** に移動します。 +* メニューで **Access → Teams** に移動します。 -* 緑のプラスボタンをクリックして、`Web Content` というチームを作成します。 +* **Add** ボタンをクリックして、`Default` 組織内に `Web Content` という名前のチームを作成します。 -* **SAVE** をクリックします。 +* **Save** をクリックします。 ユーザーを Team に追加できるようになりました。 -* **USERS** ボタンをクリックして、`Web Content` Team の User ビューに切り替えます。 +* チーム `Web Content` をクリックし、**Access** タブをクリックして **Add** をクリックします。 + +* **Select a Resource Type** ウィンドウで、**Users** リソースタイプをクリックし、**Next** + をクリックします。 -* 緑プラスボタンをクリックして、`wweb` ユーザーの隣のボックスにチェックを入れ、**SAVE** をクリックします。 +* **Select Items from List** で、`wweb` ユーザーの横にあるチェックボックスを選択し、**Next** + をクリックします。 -**TEAMS** ビューの **PERMISSIONS** ボタンをクリックすると、「パーミッションが付与されていません」(No -Permissions Have Been Granted) というメッセージが表示されます。 +* **Select Roles to Apply** で、`wweb` ユーザーに適用するロールとして **Member** を選択します。 -パーミッションにより、プロジェクト、インベントリ、およびその他の Tower -要素の読み取り、変更、および管理が可能になります。さまざまなリソースにパーミッションを設定できます。 +**保存** をクリックします。 + +パーミッションにより、プロジェクト、インベントリ、およびその他の自動コントローラー要素の読み取り、変更、および管理が可能になります。さまざまなリソースにパーミッションを設定できます。 ### パーミッションの付与 -ユーザーまたはチームが実際に何かを実行できるようにするには、パーミッションを設定する必要があります。ユーザー **wweb** は、割り当てられた +ユーザーまたはチームが実際に何かを実行できるようにするには、パーミッションを設定する必要があります。ユーザー** wweb **は、割り当てられた Web サーバーのコンテンツのみを変更できるようにする必要があります。 -テンプレートを使用するためのパーミッションを追加します。 - -* Team `Web Content` の Permission ビューで、緑色のプラスボタンをクリックして、権限を追加します。 +`Create index.html` テンプレートを使用するためのパーミッションを追加します。 -* 新しいウィンドウが開きます。多数のリソースの権限を設定することを選択できます。 +* **Resources** -> **Templates** 内で、`Create index.html` を選択します。 - * リソースタイプ **JOB TEMPLATES** を選択します。 +* メニューから **Access** タブを選択し、**Add** をクリックします。 - * 隣のボックスをチェックして `Create index.html` Template を選択します。 +* **Select a Resource Type** ウィンドウで、**Users** リソースタイプをクリックし、**Next** + をクリックします。 -* ウィンドウの次の部分が開きます。ここでは、選択したリソースにロールを割り当てます。 +* **Select Items from List** で、`wweb` ユーザーの横にあるチェックボックスを選択し、**Next** + をクリックします。 - * **EXECUTE** を選択します。 +* **Select Roles to Apply** で、`wweb` ユーザーに適用するロールとして**Read** と **Execute** + を選択します。 -* **SAVE** をクリックします。 +* **Save** をクリックします。 ### パーミッションのテスト -次に、Tower の Web UI からログアウトし、**wweb** ユーザーとして再度ログインします。 +次に、自動コントローラーの Web UI からログアウトし、**wweb** ユーザーとして再度ログインします。 * **Templates** ビューに移動します。wweb については、`Create index.html` - テンプレートが一覧表示されます。これはテンプレートを表示および起動することはできますが、編集することはできません。テンプレートを開いて変更してみてください。 + テンプレートが一覧表示されます。これはテンプレートを表示および起動することはできますが、編集することはできません。(Edit + ボタンは利用できません) * ロケットアイコンをクリックして、Job Template を実行します。好みに合わせて survey 内容を入力し、ジョブを開始します。 * 次の **Jobs** ビューでは、いろいろ見てください。ホストが変更される場所に注意してください。 -結果の確認: コントロールホストで `curl` を再び実行し、`node1` の IP アドレス上の Web サーバーのコンテンツを取得します -(`node2` や `node3` も同様)。 +結果の確認: コントロールホストで `curl` を再び実行し、`node1` の Web サーバーのコンテンツを取得します (`node2` や +`node3` も同様)。 ```bash -#> curl http://22.33.44.55 +#> curl http://node1 ``` 今行ったことを思い出してください。これで、制限されたユーザーが AnsiblePlaybook を実行できるようにしました @@ -158,12 +162,12 @@ Web サーバーのコンテンツのみを変更できるようにする必要 事実上、認証情報を配布したり、ユーザーに自動化コードを変更する機能を与えたりすることなく、別のユーザーに自動化を実行する機能を提供しました。また、同時に、ユーザーは作成した survey に基づいて変更を加えることができます。 -この機能は、Ansible Tower の主な強みの1つです。 +この機能は、Ansible 自動コントローラーの主な強みの1つです。 --- **ナビゲーション**
[前の演習](../2.4-surveys) - [次の演習](../2.6-workflows) -[クリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-2---ansible-tower-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-2---ansible-tower-exercises) diff --git a/exercises/ansible_rhel/2.6-workflows/README.ja.md b/exercises/ansible_rhel/2.6-workflows/README.ja.md index 0b0cbadef..6f96dd44a 100644 --- a/exercises/ansible_rhel/2.6-workflows/README.ja.md +++ b/exercises/ansible_rhel/2.6-workflows/README.ja.md @@ -1,7 +1,7 @@ # ワークショップ演習 - ワークフロー -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md), ![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 @@ -22,8 +22,8 @@ また、ワークフローは Job Templates に限定されるものではなく、プロジェクトやインベントリーの更新を含めることもできます。 -これにより、AnsibleTower -の新しいアプリケーションが可能になります。さまざまなジョブテンプレートを相互に構築できます。たとえば、ネットワーキングチームは、独自のコンテンツを使用して、独自のGitリポジトリに、さらには独自のインベントリを対象に +これにより、Ansible +自動コントローラーの新しいアプリケーションが可能になります。さまざまなジョブテンプレートを相互に構築できます。たとえば、ネットワーキングチームは、独自のコンテンツを使用して、独自のGitリポジトリに、さらには独自のインベントリを対象に Playbook を作成します。一方、運用チームには、独自のリポジトリー、Playbook、およびインベントリーがあります。 このラボでは、ワークフローを設定する方法を説明します。 @@ -41,11 +41,15 @@ Playbook を作成します。一方、運用チームには、独自のリポ #### Web 運用チーム -* node.js をインストールし、ファイアウォールを開いて、node.js を開始する必要があります。 +* `httpd`、`firewalld`、および `node.js` インストールし、`SELinux` + 設定を定義し、ファイアウォールを開き、`httpd` および `node.js` を起動する必要があります。 #### Web 開発者チーム -* Web アプリケーションの最新バージョンをデプロイする必要があります。 +* Web アプリケーションの最新バージョンをデプロイし、`node.js` を再起動する必要があります。 + +言い換えると、Web 運用チームは、アプリケーションのデプロイメント用にサーバーを準備し、Web +開発者チームがそのサーバー上にアプリケーションをデプロイします。 --- @@ -54,270 +58,282 @@ Playbook を作成します。一方、運用チームには、独自のリポ > **注意** > -> この例では、別々のチームのコンテンツに同じレポジトリーの異なる 2 つのブランチを使用します。実際には、SCM レポジトリーの構造は、ファクターによってことなります。 +> この例では、別々のチームのコンテンツに同じレポジトリーの異なる 2 つのブランチを使用します。実際には、Source Contorol レポジトリーの構造は、ファクターによってことなります。 -### プロジェクトの設定 +### プロジェクトのセットアップ まず、通常どおりに Git リポジトリーをプロジェクトとして設定する必要があります。 > **警告** > -> ユーザー **wweb** としてログインしている場合は、*admin** として再びログインします。 +> ユーザー **wweb** としてログインしている場合は、*admin** としてログインします。 -Web 運用チームのプロジェクトを作成します。**Project** ビューで、緑色のプラスボタンをクリックし、次のように入力します。 +**Resources** -> **Projects** 内で、**Add** ボタンをクリックして、Web オペレーションチームのプロジェクトを作成します。以下のようにフォームに移動します。 - - + + - + - + - + + + + + - + - + - - + +
ParameterValueパラメーター
NAMEName Webops Git Repo
ORGANIZATIONOrganization Default
SCM TYPEDefault Execution EnvironmentDefault execution environment
Source Control Credential Type Git
SCM URLSource Control URL https://github.com/ansible/workshop-examples.git
SCM BRANCH/TAG/COMMITSource Control Branch/Tag/Commit webops
SCM UPDATE OPTIONS
  • ✓ CLEAN
  • ✓ DELETE ON UPDATE
  • ✓ UPDATE REVISION ON LAUNCH
Options
  • ✓ Clean
  • ✓ Delete
  • ✓ Update Revision on Launch
-**SAVE** をクリックします。 +**Save** をクリックします。 --- -Web 開発者チームのプロジェクトを作成します。**Project** ビューで、緑色のプラスボタンをクリックし、次のように入力します。 +**Resources** -> **Projects** 内で、**Add** ボタンをクリックして、Web 開発者チームのプロジェクトを作成します。以下のようにフォームに移動します。 - - + + - + - + - + + + + + - + - + - - + +
ParameterValueパラメーター
NAMEName Webdev Git Repo
ORGANIZATIONOrganization Default
SCM TYPEDefault Execution EnvironmentDefault execution environment
Source Control Credential Type Git
SCM URLSource Control URL https://github.com/ansible/workshop-examples.git
SCM BRANCH/TAG/COMMITSource Control Branch/Tag/Commit webdev
SCM UPDATE OPTIONS
  • ✓ CLEAN
  • ✓ DELETE ON UPDATE
  • ✓ UPDATE REVISION ON LAUNCH
Options
  • ✓ Clean
  • ✓ Delete
  • ✓ Update Revision on Launch
-**SAVE** をクリックします。 +**Save** をクリックします。 ### ジョブテンプレートのセットアップ 次に、「通常」ジョブの場合と同じように、2 つのジョブテンプレートを作成する必要があります。 -**Template** ビューに移動し、緑色のプラスボタンをクリックして、**Job Template** を選択します。 +**Resources** -> **Templates** に移動し、**Add** ボタンをクリックして、**Add job template** を選択します。 - - + + - + - + - + - + - + + + + + - - + + - + - - + +
ParameterValueパラメーター
NAMEName Web App Deploy
JOB TYPEJob Type Run
INVENTORYInventory Workshop Inventory
PROJECTProject Webops Git Repo
PLAYBOOKExecution EnvironmentDefault execution environment
Playbook rhel/webops/web_infrastructure.yml
CREDENTIALWorkshop CredentialsCredentialsWorkshop Credential
LIMITLimit web
OPTIONS✓ ENABLE PRIVILEGE ESCALATIONOptions✓ Privilege Escalation
-**SAVE** をクリックします。 +**Save** をクリックします。 --- -**Template** ビューに移動し、緑色のプラスボタンをクリックして、**Job Template** を選択します。 +**Resources** -> **Templates** に移動し、**Add** ボタンをクリックして、**Add job template** を選択します。 - - + + - + - + - + - + - + + + + + - - + + - + - - + +
ParameterValueパラメーター
NAMEName Node.js Deploy
JOB TYPEJob Type Run
INVENTORYInventory Workshop Inventory
PROJECTProject Webdev Git Repo
PLAYBOOKExecution EnvironmentDefault execution environment
Playbook rhel/webdev/install_node_app.yml
CREDENTIALWorkshop CredentialsCredentialsWorkshop Credential
LIMITLimit web
OPTIONS✓ ENABLE PRIVILEGE ESCALATIONOptions✓ Privilege Escalation
-**SAVE** をクリックします。 +**Save** をクリックします。 > **ヒント** > > Ansible Playbook がどのようなものかを見たい場合は、Github URL を確認して適切なブランチに切り替えてください。 -### ワークフローの設定 +### ワークフローのセットアップ -ワークフローを設定します。ワークフローは **Template** ビューで構成されます。テンプレートを追加するときに、**Job Template** -と **Workflow Template** のどちらかを選択できることに気付いたかもしれません。 +ワークフローは **Template** ビューで設定されます。テンプレートを追加するときに、**Add job template** と **Add +workflow template** のどちらかを選択できることに気付いたかもしれません。 - ![workflow add](images/workflow_add.png) - -**Templates** ビューに移動して、今回は、**Workflow Template** を選択します。 +**Resources** -> **Templates** に移動し、**Add** ボタンをクリックして、**Add job template** を選択します。 - + - +
NAMEName Deploy Webapp Server
ORGANIZATIONOrganization Default
-**SAVE** をクリックします。 +**Save** をクリックします。 テンプレートを保存すると、**Workflow Visualizer** -が開き、ワークフローを作成できます。テンプレートの詳細ページのボタンを使用して、後で **Workflow Visualizer** -を再度開くことができます。 +が開き、ワークフローを作成できます。テンプレートの詳細ページのボタンを使用して、メニューから **Visualizer** を選択して、後で +**Workflow Visualizer** を再度開くことができます。 + + ![start](images/start.png) + +**Start** ボタンをクリックすると、**Add Node** ウィンドウが開きます。**Job Template** を選択して、ノードタイプで、ノードにアクションを割り当てます。 -* **START** - ボタンをクリックすると、新しいノードが開きます。右側では、ノードにアクションを割り当てることができ、**JOBS**、**PROJECT - SYNC**、**INVENTORY SYNC**、および **APPROVAL** から選択できます。 +**Web App Deploy** ジョブテンプレートを選択し、**Save** をクリックします。 -* このラボでは、2つのジョブをリンクするため、**Web App Deploy** ジョブを選択し、**SELECT** をクリックします。 + ![Add Node](images/add_node.png) -* ノードには、ジョブの名前が注釈として付けられます。マウスポインターをノードに合わせると、赤い **x**、緑の ** + **、青い - **chain** 記号が表示されます。 +新しいノードが表示され、ジョブテンプレートの名前で **START** ボタンに接続されます。ノードの上にマウスポインターに移動し、ノードの詳細 +(+)、ノードの詳細 (i)の表示(i)、ノードの編集(pencil)、利用可能なノード(chain)へのリンク、ノード(trash +bin)を削除します。 ![workflow node](images/workflow_node.png) +ノードにマウスをかざし、(+) 記号をクリックして新規ノードを追加します。* **Run Type** には **On +Success**(デフォルト)を選択し、**Next** をクリックします。 + > **ヒント** > -> 赤い "x" を使用すると、ノードを削除できます。緑色のプラスでは、次のノードを追加できます。チェーン記号は、別のノードに接続します。 +> 実行のタイプにより、より複雑なワークフローが可能になります。Playbook 実行に成功した実行パスや失敗した実行パスなど、各種パスのレイアウトを行うことができます。 -* 緑の **+** 記号をクリックします -* 次のジョブとして **Node.js Deploy** を選択します (次のページに切り替える必要がある場合があります) -* **Type** は **On Success** のままにします +**Node Type** については、**Job Template** (デフォルト) を選択し、**Node.js Deploy** ジョブテンプレートを選択します。 +**Save** をクリックします。 -> **ヒント** -> -> このタイプにより、より複雑なワークフローが可能になります。Playbook 実行に成功した実行パスや失敗した実行パスなど、各種パスのレイアウトを行うことができます。 + ![Add Nodejs](images/add_node_nodejs.png) -* **SELECT** をクリックします -* **WORKFLOW VISUALIZER** ビューの **SAVE** をクリックします。 -* **Workflow Template** ビューの **SAVE** をクリックします。 +**Visualizier** ビューの右上にある **Save** をクリックします。 > **ヒント** > -> **Workflow Visualizer** には、より高度なワークフローを設定するためのオプションがあります。ドキュメントを参照してください。 +**Visualizer** には、より高度なワークフローを設定するためのオプションがありますので、ドキュメントをご参照ください。 ### ワークフローの起動 -ワークフローの準備ができました。起動します。 - -青い **LAUNCH** ボタンを直接クリックするか、**Templates** ビューに移動し、ロケットアイコンをクリックして **Deploy -Webapp Server** ワークフローを起動します。 +**Deploy Webapp Server** Details ページから、ワークフローを **Launch** します。 ![起動](images/launch.png) -ワークフローの実行がジョブビューにどのように表示されるかに注目してください。通常のジョブテンプレートのジョブの実行と比べ、今回のものには、右側には -Playbook の出力はありませんが、さまざまなワークフローステップの視覚的表現があります。その背後にある実際の Playbook -を見たい場合は、各ステップで **詳細** をクリックしてください。詳細ビューから対応するワークフローに戻る場合は、ジョブ概要の左側の -**DETAIS** 部分の **JOB TEMPLATE** の ![w-button](images/w_button.png) をクリックします。 +Jobs > Deploy Webapp Server Output にワークフローの実行が表示されていることに注意してください。通常のジョブテンプレートのジョブ実行とは異なり、ジョブが完了しても Playbook の出力はありませんが、ジョブが完了するまでの時間が表示されています。実際の Playbook の実行内容を見たい場合は、詳細を確認したいノードにカーソルを合わせてクリックします。ジョブの詳細表示の中で、**Output** メニューを選択すると、Playbook の出力が表示されます。Deploy WebappServer** ワークフローの **Output** ビューに戻りたい場合は、Views -> Jobs -> **XX - Deploy Webapp Server** で Output の概要に戻ることができます。 + +注記: `XX` はジョブ実行の数に置き換えます。 ![jobs view of workflow](images/job_workflow.png) -ジョブが終了した後、すべてが正常に動作したことを確認します。コントロールホストから `node1`、`node2`、`node3` -にログインし、以下を実行します。 +ジョブが完了したら、すべてが正常に動作したかどうかを確認します。コントロールホストから、`node1`、`node2`、および `node3` +に対して以下の curl コマンドを実行します。各 curl コマンドの出力は `Hello World` のはずです。 ```bash -#> curl http://localhost/nodejs +[student@ansible-1 ansible-files]$ curl http://nodeX/nodejs +Hello World ``` -コントロールホストで curl を実行して、ノードに向けて `nodejs` パスを参照することもできます。また、単純な nodejs -アプリケーションも表示されます。 +注記: `X` は、チェックするノードの適切な番号に置き換える必要があります。 + --- **ナビゲーション**
[前の演習](../2.5-rbac) - [次の演習](../2.7-wrap) -[クリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-2---ansible-tower-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-2---ansible-tower-exercises) diff --git a/exercises/ansible_rhel/2.7-wrap/README.ja.md b/exercises/ansible_rhel/2.7-wrap/README.ja.md index 8b5f8be84..69d202578 100644 --- a/exercises/ansible_rhel/2.7-wrap/README.ja.md +++ b/exercises/ansible_rhel/2.7-wrap/README.ja.md @@ -1,7 +1,7 @@ # ワークショップ演習 - まとめ -**その他の言語はこちらをお読みください。** -
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../../images/fr.png) [Française](README.fr.md), ![Español](../../../images/col.png) [Español](README.es.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md)、![japan](../../../images/japan.png)[日本語](README.ja.md)、![brazil](../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md)、![france](../../../images/fr.png) [Française](README.fr.md)、![Español](../../../images/col.png) [Español](README.es.md) ## 目次 @@ -22,9 +22,10 @@ ## ガイド -### ステージを設定しましょう +### ステージの設定 -運営チームとアプリケーション開発チームは、AnsibleTower の機能を気に入っています。実際の環境で使用するために、要件を次にまとめました。 +運営チームとアプリケーション開発チームは、Ansible +自動コントローラーの機能を気に入っています。実際の環境で使用するために、要件を次にまとめました。 * すべてのウェブサーバー (`node1`、`node2`、`node3`) を 1 つのグループに入れる必要があります @@ -40,12 +41,11 @@ * コンテンツライター `wweb` には、dev サーバーと prod サーバーのコンテンツを変更するための調査にアクセスできる必要があります。 -### Git レポジトリー +### Git リポジトリー -すべてのコードはすでに配置されています。これは Tower -ラボですから。[https://github.com/ansible/workshop-examples](https://github.com/ansible/workshop-examples) -にある** Workshop Project ** git リポジトリを確認してください。そこに Playbook `role_webcontent` -があります。これは、ロール `webcontent.yml` を呼び出します。 +すべてのコードはすでに配置されています。これは自動コントローラーラボですから。[https://github.com/ansible/workshop-examples](https://github.com/ansible/workshop-examples) +にある **Workshop Project** git リポジトリを確認してください。そこに Playbook `webcontent.yml` +があります。これは、ロール `role_webcontent` を呼び出します。 以前の Apache インストールのロールと比較すると、大きな違いがあります。現在、2つのバージョンの `index.html` テンプレート、およびソースファイル名の一部として変数を持つテンプレートファイルをデプロイするタスクがあります。 @@ -93,110 +93,214 @@ ### インベントリーの準備 -もちろん、これを達成する方法は複数ありますが、次のことを行う必要があります。 +これを実行する方法は 1 つありますが、このラボでは Ansible 自動化コントローラーを使用します。 -* すべてのホストがインベントリグループ `Webserver` に含まれていることを確認してください。 -* `Webserver` インベントリーに値 `stage` で変数 `dev` を定義します。 +**Resources** -> **Inventories** 内で、「Workshop Inventory」を選択します。 - * 開始用の 3 つのダッシュ (---) の下の **VARIABLES** で、インベントリー `Webserver` に `stage: - dev` を追加します。 +**Groups** タブで、**Add** ボタンをクリックして、`Webserver` +というラベルが付けられた新規インベントリーグループを作成し、**Save** をクリックします。 -* 同じように、変数 `stage: prod` を追加しますが、今回は、`node2` に対してのみ行います - (ホスト名をクリック)。インベントリー変数が上書きされます。 +`Webserver` グループの **Details** タブで、**Edit** をクリックします。**Variables** +テキストボックスでは、`stage` という値を持つ変数 `dev` を定義し、**Save** をクリックします。 -> **ヒント** -> -> YAML の開始をマークする 3 つのダッシュと `ansible_host` の行を所定の位置に配置するようにしてください。 +`Webserver` インベントリーの **Details** タブで、**ホスト** タブをクリックし、**Add** および **Add +existing host** ボタンをクリックします。`Webserver` +インベントリーに含まれるホストとして、`node1`、`node2`、および `node3` を選択します。 -### テンプレートの作成。 +```yaml +--- +stage: dev +``` -* 以下ような新しい `Create Web Content` という **Job Template** を作成します。 +**Resources** -> **Inventories** 内で、`Workshop` インベントリーを選択します。また、`Hosts` タブをクリックして、`node2` をクリックします。`Edit` をクリックし、**Variables** ウィンドウで `stage: prod` 変数を追加します。これは、Playbook の実行時に変数にアクセスする方法により、インベントリー変数を上書きします。 - * `Webserver` インベントリーを対象 - * **Workshop Project** プロジェクトから Playbook `rhel/apache/webcontent.yml` を使用 - * 2 つの変数 `dev_content: default dev content` と `prod_content: default prod - content` を **EXTRA VARIABLES FIELD** に定義します。 - * `Workshop Credentials` を使用して、特権昇格で実行します。 -* テンプレートを保存して実行します。 +**Variables** テキストボックスで、`stage` という値を持つ `prod` というラベルが付いた変数を定義し、**Save** +をクリックします。 -### 結果を確認します。 +```yaml +--- +ansible_host: +stage: prod +``` +> **ヒント** +> +> YAML の開始をマークする 3 つのダッシュと `ansible_host` の行を所定の位置に配置するようにしてください。 -今回は、Ansible の機能で、結果の確認を行います。curl を実行して、各ノードから Web コンテンツを取得しすると、Tower -コントロールホストのコマンドラインで、アドホックコマンドで調整されます。 +### テンプレートの作成 + +**Resources** -> **Templates** 内で、**Add** ボタンと **Add job template* を以下のように選択します。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
パラメーター
NameCreate Web Content
Job TypeRun
InventoryWorkshop Inventory
ProjectWorkshop Project
Execution EnvironmentDefault execution environment
Playbookrhel/apache/webcontent.yml
CredentialsWorkshop Credential
Variablesdev_content: "default dev content", prod_content: "default prod content"
OptionsPrivilege Escalation
+ +**保存** をクリックします。 + +**Launch** ボタンをクリックしてテンプレートを実行します。 + + +### 結果の確認 + +今回は、Ansible パワーを使って結果を確認します。各ノードから Web コンテンツを取得するために uri を実行し、Ansible +Playbook (`check_url.yml`) によってオーケストレーションされます。 > **ヒント** > -> インベントリーグループの各ノードにアクセスするために、URL に `ansible_host` 変数を使用しています。 +> インベントリーグループの各ノードにアクセスするために、URL に `ansible_host` 変数を使用しています。 -```bash -[student@ansible-1 ~]$ ansible web -m command -a "curl -s http://{{ ansible_host }}" - [WARNING]: Consider using the get_url or uri module rather than running 'curl'. If you need to use command because get_url or uri is insufficient you can add 'warn: false' to this command task or set 'command_warnings=False' in ansible.cfg to get rid of this message. +```yaml +--- +- name: Check URL results + hosts: web + + tasks: + - name: Check that you can connect (GET) to a page and it returns a status 200 + uri: + url: "http://{{ ansible_host }}" + return_content: yes + register: content + + - debug: + var: content.content +``` -node2 | CHANGED | rc=0 >> - -

This is a production webserver, take care!

-prod wweb - +```bash +[student@ansible-1 ~]$ ansible-navigator run check_url.yml -m stdout +``` -node1 | CHANGED | rc=0 >> - -

This is a development webserver, have fun!

-dev wweb - +出力のスニペット: -node3 | CHANGED | rc=0 >> - -

This is a development webserver, have fun!

-dev wweb - +```bash +TASK [debug] ******************************************************************* +ok: [node1] => { + "content.content": "\n

This is a development webserver, have fun!

\ndev wweb\n" +} +ok: [node2] => { + "content.content": "\n

This is a production webserver, take care!

\nprod wweb\n" +} +ok: [node3] => { + "content.content": "\n

This is a development webserver, have fun!

\ndev wweb\n" +} ``` -`command` モジュールから `curl` を使用しないことについての最初の行の警告に注目してください。Ansible -には、より優れたモジュールがあるため、これについては次のパートで説明します。 - ### Survey の追加 -* Template に survey を追加して、変数 `dev_content` と `prod_content` を変更できるようにします。 +* Survey をテンプレートに追加して、変数 `dev_content` および `prod_content` の変更を可能にします。 +** テンプレートでは、**Survey** タブをクリックして、**Add** ボタンをクリックします。 +** 以下の情報を確認してください。 + + + + + + + + + + + + + + + + + + +
パラメーター
QuestionWhat should the value of dev_content be?
Answer Variable Namedev_content
Answer TypeText
+ +* **Save** をクリックします。 +* **追加** ボタンをクリックします。 + +同じ方法で、2 番目の **Survey Question** を追加します。 + + + + + + + + + + + + + + + + + + +
パラメーター
QuestionWhat should the value of prod_content be?
Answer Variable Nameprod_content
Answer TypeText
+ +* **Save** をクリックします。 +* トグルをクリックして Survey の質問を **On** に切り替えます。 + +* Survey の **Preview** をクリックします。 + * Team `Web Content` にパーミッションを追加すると、Template **Create Web Content** が `wweb` で実行できます。 +* **Resources** -> **Templates** 内で、*Create Web Content** をクリックし、ユーザー `wweb` + に **Access** を追加し、テンプレートを実行します。 + * **Select a Resource Type** -> **Users**をクリックし、**Next** をクリックします。 + * **Select Items from List** -> `wweb` チェックボックスを選択して、**Next** をクリックします。 + * **Select Roles to Apply** -> **Excute** チェックボックスを選択して、**Save** をクリックします。 * ユーザー `wweb` として survey を実行します。 + * Ansible 自動コントローラーのユーザー `admin` からログアウトします。 + * `wweb` としてログインし、**Resources** -> **Templates** に移動して、**Create Web + Content** テンプレートを実行します。 -Tower コントロールホストから再び結果を確認します。前回は、`command` モジュールから `curl` -を使用して警告を受けたため、今回は専用の `uri` モジュールを使用します。これは引数として実際の URL -とフラグを使用し、今回は結果の本文を出力します。 +オートメーションコントローラーのホストから再度結果を確認します。ここでは、専用の`uri` モジュールを Ansible Playbook +内で使用します。引数として、実際の URL と、結果に本文を出力するためのフラグが必要です。 + ```bash -[student@ansible-1 ~]$ ansible web -m uri -a "url=http://{{ ansible_host }}/ return_content=yes" -node3 | SUCCESS => { - "accept_ranges": "bytes", - "ansible_facts": { - "discovered_interpreter_python": "/usr/bin/python" - }, - "changed": false, - "connection": "close", - "content": "\n

This is a development webserver, have fun!

\nwerners dev content\n\n", - "content_length": "87", - "content_type": "text/html; charset=UTF-8", - "cookies": {}, - "cookies_string": "", - "date": "Tue, 29 Oct 2019 11:14:24 GMT", - "elapsed": 0, - "etag": "\"57-5960ab74fc401\"", - "last_modified": "Tue, 29 Oct 2019 11:14:12 GMT", - "msg": "OK (87 bytes)", - "redirected": false, - "server": "Apache/2.4.6 (Red Hat Enterprise Linux)", - "status": 200, - "url": "http://18.205.236.208" -} -[...] +[student@ansible-1 ~]$ ansible-navigator run check_url.yml -m stdout ``` @@ -211,12 +315,12 @@ node3 | SUCCESS => { ## 終わり -おめでとうございます。ラボを完了しました。我々がラボの構築を楽しめたように、Ansible Tower を楽しんでいただければ光栄です。 +おめでとうございます。ラボを完了しました。我々がラボの構築を楽しめたように、Ansible 自動コントローラーを楽しんでいただければ光栄です。 ---- **ナビゲーション**
[前の演習](../2.6-workflows) -[クリックして Ansible for Red Hat Enterprise Linux Workshop -に戻ります](../README.md#section-2---ansible-tower-exercises) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../README.md#section-2---ansible-automation-controller-exercises) diff --git a/exercises/ansible_rhel/README.ja.md b/exercises/ansible_rhel/README.ja.md index fdafad7b3..0933b9d7b 100644 --- a/exercises/ansible_rhel/README.ja.md +++ b/exercises/ansible_rhel/README.ja.md @@ -4,55 +4,86 @@
![uk](../../images/uk.png) [English](README.md), ![japan](../../images/japan.png)[日本語](README.ja.md), ![brazil](../../images/brazil.png) [Portugues do Brasil](README.pt-br.md), ![france](../../images/fr.png) [Français](README.fr.md), ![Español](../../images/col.png) [Español](README.es.md).
-Ansibleはアプリケーションの展開、構成管理、オーケストレーションなどで利用できるシンプルでパワフルな自動化エンジンであり、すぐに習得することができます。 +**This is documentation for Ansible Automation Platform 2** -このラボの最初のセクションでは、Ansible Engineによる自動化の基礎からいくつかの先進的なコンセプトまでを学習します。 -二つ目のラボでは、Ansible Towerについて、Towerとは何か、仕組み、利点など、概要を説明します。 +If you’re new to Ansible Automation, this workshop consists of two parts: 1) +starting with the basics of understanding foundational command line +activities and 2) applying what you’ve learned to implement Ansible +automation controller to your enterprise use cases. You’ll start off by +writing your first Ansible playbook, work on Jinja templates, and implement +higher-level Ansible roles. Next you’ll get started on automation +controller, understand inventory and credential management, projects, job +templates, surveys, workflows and more. -これらのラボを完了させた時、あなたはAnsibleを用いた自動化の準備をできる状態になっているはずです。 +After finishing this lab you are ready to start using Ansible for your +automation requirements. -## プレゼンテーション資料 +## Table of Contents -本演習は自習形式でラボ全体を通してガイドされます。演習の導入時にそれぞれの概念には解説があります。 +* [Presentations](#presentations) +* [Time planning](#time-planning) +* [Lab Diagram](#lab-diagram) +* [Section 1 - Command-line Ansible + Exercises](#section-1---command-line-ansible-exercises) +* [Section 2 - Ansible Automation Platform + Exercises](#section-2---ansible-automation-platform-exercises) +* [Supplemental Exercises](#supplemental-exercises) -演習をサポートし、自動化やAnsibleの基礎的な概念を補足するためのプレゼンテーション資料はこちらです: -[Ansible RHEL Automation](../../decks/ansible_rhel.pdf) +## Presentations -Ansibleのベストプラクティスもあわせてご覧ください: -[Ansible Best Practices](../../decks/ansible_best_practices.pdf) +The exercises are self explanatory and guide the participants through the +entire lab. All concepts are explained when they are introduced. -## 時間配分 +There is an optional presentation available to support the workshops and +explain Automation, the basics of Ansible and the topics of the exercises in +more detail: [Ansible RHEL Automation](../../decks/ansible_rhel.pdf) -ワークショップに必要な時間は複数の要素に依存します。参加者の人数、Linux全般に渡る習熟度、及び演習中の議論の程度です。 +Also have a look at our Ansible Best Practices Deck: [Ansible Best +Practices](../../decks/ansible_best_practices.pdf) -とはいえ、ワークショップ自身に4〜5時間はかかります。最初のセクションは、以降のセクションよりもやや長くなっています。付随するプレゼンテーションを用いると更に1時間が追加されます。 +## Time planning -もし実際の感覚とこのワークショップのスケジュールが異なる場合、Issue で知らせてください。 +The time required to do the workshops strongly depends on multiple factors: +the number of participants, how familiar those are with Linux in general and +how much discussions are done in between. -## Section 1 - Ansible Engineの演習 +Having said that, the exercises themselves should take roughly 4-5 +hours. The first section is slightly longer than the second one. The +accompanying presentation itself adds another hour. - - [演習 1.1 - 要件を確認してみよう](1.1-setup/README.ja.md) - - [演習 1.2 - Ad-hoc コマンドを実行しよう](1.2-adhoc/README.ja.md) - - [演習 1.3 - 初めての Playbook 作成](1.3-playbook/README.ja.md) - - [演習 1.4 - 変数を使ってみよう](1.4-variables/README.ja.md) - - [演習 1.5 - 条件式、ハンドラ、ループを使う](1.5-handlers/README.ja.md) - - [演習 1.6 - テンプレートを使う](1.6-templates/README.ja.md) - - [演習 1.7 - Roles](1.7-role/README.ja.md) +## Lab Diagram -## Section 2 - Ansible Towerの演習 +![ansible rhel lab diagram](../../images/rhel_lab_diagram.png) - - [演習 2.1 - Tower の紹介](2.1-intro/README.ja.md) - - [演習 2.2 - インベントリ、認証情報、Ad Hoc コマンド](2.2-cred/README.ja.md) - - [演習 2.3 - プロジェクトとジョブテンプレート](2.3-projects/README.ja.md) - - [演習 2.4 - Survey 機能](2.4-surveys/README.ja.md) - - [演習 2.5 - ロールベースのアクセス制御](2.5-rbac/README.ja.md) - - [演習 2.6 - ワークフロー](2.6-workflows/README.ja.md) - - [演習 2.7 - まとめ](2.7-wrap/README.ja.md) +## Section 1 - Command-line Ansible Exercises +* [Exercise 1.1 - Check the Prerequisites](1.1-setup) +* [Exercise 1.2 - The Ansible Basics](1.2-thebasics) +* [Exercise 1.3 - Writing Your First Playbook](1.3-playbook) +* [Exercise 1.4 - Using Variables](1.4-variables) +* [Exercise 1.5 - Conditionals, Handlers and Loops](1.5-handlers) +* [Exercise 1.6 - Templates](1.6-templates) +* [Exercise 1.7 - Roles](1.7-role) -## 追加情報 - - [Ansible - はじめに](http://docs.ansible.com/ansible/latest/intro_getting_started.html) +## Section 2 - Ansible Automation Platform Exercises + +* [Exercise 2.1 - Introduction to automation controller](2.1-intro) +* [Exercise 2.2 - Inventories, credentials and ad hoc commands](2.2-cred) +* [Exercise 2.3 - Projects & job templates](2.3-projects) +* [Exercise 2.4 - Surveys](2.4-surveys) +* [Exercise 2.5 - Role based access control](2.5-rbac) +* [Exercise 2.6 - Workflows](2.6-workflows) +* [Exercise 2.7 - Wrap up](2.7-wrap) + +## Supplemental Exercises + +There is also a series of exercises that go above and beyond our normal +workshop content. Please check out our supplemental exercises if you want +more content to learn from. + +* [Supplemental Exercises](supplemental) --- -![Red Hat Ansible Automation](../../images/rh-ansible-automation-platform.png) +![Red Hat Ansible +Automation](../../images/rh-ansible-automation-platform.png) diff --git a/exercises/ansible_rhel/supplemental/README.ja.md b/exercises/ansible_rhel/supplemental/README.ja.md new file mode 100644 index 000000000..fd885bfb4 --- /dev/null +++ b/exercises/ansible_rhel/supplemental/README.ja.md @@ -0,0 +1,13 @@ +## Supplemental Exercises + +There is also a series of exercises that go above and beyond our normal workshop content. Please check out our supplemental exercises if you want more content to learn from. + +- [Ad Hoc Commands, Templates and Variables](ad_hoc_and_templates) - +[Ansible Tower - Inventories, credentials and ad hoc +commands](ansible_tower_credentials) + + +## Navigation + +- [Return to Ansible for Red Hat Enterprise Linux Workshop](../README.md) - +[Return to Ansible Automation Workshops Index](../../../README.md) diff --git a/exercises/ansible_rhel/supplemental/ad_hoc_and_templates/README.ja.md b/exercises/ansible_rhel/supplemental/ad_hoc_and_templates/README.ja.md index 12832f5d9..5fcd1ef64 100644 --- a/exercises/ansible_rhel/supplemental/ad_hoc_and_templates/README.ja.md +++ b/exercises/ansible_rhel/supplemental/ad_hoc_and_templates/README.ja.md @@ -1,35 +1,45 @@ -# 演習 1.8 - ボーナスラボ +# Ad Hoc Commands, Templates and Variables **Read this in other languages**: ![uk](../../../../images/uk.png) [English](README.md), ![japan](../../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md). -* [ステップ 1.8.1 - ボーナスラボ: アドホックコマンド](#ステップ-181---ボーナスラボ-アドホックコマンド) -* [ステップ 1.8.2 - ボーナスラボ: テンプレートと変数](#ステップ-182---ボーナスラボ-テンプレートと変数) - * [変数を定義します:](#変数を定義します) - * [テンプレートを準備します](#テンプレートを準備します) - * [Playbook を作成します。](#playbook-を作成します) - * [実行し確認します](#実行し確認します) +* [Step 1 - Bonus Lab: Ad Hoc Commands](#step-1---bonus-lab-ad-hoc-commands) +* [Step 2 - Bonus Lab: Templates and + Variables](#step-2---bonus-lab-templates-and-variables) + * [Define the variables:](#define-the-variables) + * [Prepare the template:](#prepare-the-template) + * [Create the Playbook](#create-the-playbook) + * [Run and test](#run-and-test) -あなたは既にラボを完了しています・・・、が、さらに先に進みたい方は是非このボーナスラボにチャレンジしてみてください。 +You have finished the lab already. But it doesn’t have to end here. We +prepared some slightly more advanced bonus labs for you to follow through if +you like. So if you are done with the labs and still have some time, here +are some more labs for you: -## ステップ 1.8.1 - ボーナスラボ: アドホックコマンド +## Step 1 - Bonus Lab: Ad Hoc Commands -アドホックコマンドを使って、適当なコメント付きで新しいユーザー "testuser" を `node1` と `node3` に作成します。`node2` に作成してはいけません。実行後、想定通り作成できていることも確認します。 +Create a new user "testuser" on `node1` and `node3` with a comment using an +ad hoc command, make sure that it is not created on `node2`! - - `ansible-doc user` を使ってモジュールのパラメータを確認します。 + - Find the parameters for the appropriate module using `ansible-doc user` + (leave with `q`) - - アドホックコマンドを使ってコメント "Test D User" 付きのユーザーを作成します。 + - Use an Ansible ad hoc command to create the user with the comment "Test + D User" - - "command" モジュールを使ってユーザー ID を見つけます。 + - Use the "command" module with the proper invocation to find the userid - - ユーザーとユーザーのティレクトリを削除し、ユーザーが削除されたことを確認します。 + - Delete the user and its directories, then check that the user has been + deleted -> **ヒント** +> **Tip** > -> 権限昇格の記述を忘れないこと! +> Remember privilege escalation…​ -> **答えは以下の通り** +> **Warning** +> +> **Solution below\!** -コマンドは次のようになります。 +Your commands could look like these: ```bash [student@ansible-1 ansible-files]$ ansible-doc -l | grep -i user @@ -41,59 +51,67 @@ [student@ansible-1 ansible-files]$ ansible web -m command -a " id testuser" -b ``` -## ステップ 1.8.2 - ボーナスラボ: テンプレートと変数 - -皆さんは今までのラボで、Ansibleのテンプレート、変数、そしてハンドラについての基本を既に学んでいます。これらすべてを組み合わせてみましょう。 +## Step 2 - Bonus Lab: Templates and Variables -`httpd.conf` のリッスンポートを都度 vi 等で編集してコピーするのではなく、変数としてテンプレートの中で定義し、その変数の値を変数ファイルを使って与える方法について考えてみます。 +You have learned the basics about Ansible templates, variables and +handlers. Let’s combine all of these. +Instead of editing and copying `httpd.conf` why don’t you just define a +variable for the listen port and use it in a template? Here is your job: - - `listen_port` に変数を埋め込んだ `httpd.conf` ファイルを作成し、 `httpd.conf.j2` テンプレートを使って各 node に送付します。 + - Define a variable `listen_port` for the `web` group with the value + `8080` and another for `node2` with the value `80` using the proper + files. - - `web` グループのリッスンポートとして `8080` 、 `node2` のリッスンポートとして `80` を取るように変数ファイルを作成します。 + - Copy the `httpd.conf` file into the template `httpd.conf.j2` that uses + the `listen_port` variable instead of the hard-coded port number. - - ハンドラーを使っ、`httpd.conf` に変更があった場合のみ Apache サービスを再起動する Playbook を作成します。 + - Write a Playbook that deploys the template and restarts Apache on + changes using a handler. - - Playbook を実行し、結果を `curl` コマンドで確認します。 + - Run the Playbook and test the result using `curl`. -> **ヒント** +> **Tip** > -> `group_vars`と`host_vars` ディレクトリを覚えていますか? そうでない場合は、「演習1.4 変数を使ってみる」の章を参照してください。 +> Remember the `group_vars` and `host_vars` directories? If not, refer to the chapter "Ansible Variables". -> **回答は以下の通り** +> **Warning** +> +> **Solution below\!** -### 変数を定義します: +### Define the variables: -グループ変数を定義する `group_vars/web` に以下を記述します +Add this line to `group_vars/web`: ```ini listen_port: 8080 ``` -node2 は設定が異なるので、ホスト変数を定義する `host_vars/node2` に以下を記述します +Add this line to `host_vars/node2`: ```ini listen_port: 80 ``` -### テンプレートを準備します +### Prepare the template: - - node1 から `httpd.conf` を `httpd.conf.j2` としてコピーします。以前の演習でダウンロードしたファイルを "mv" で再利用してもOKです。 + - Copy `httpd.conf` to `httpd.conf.j2` - - コピーした `httpd.conf.j2` の "Listen" の項目を以下の通り変数 `listen_port` として定義しなおします。 + - Edit the "Listen" directive in `httpd.conf.j2` to make it look like + this: ```ini [...] Listen {{ listen_port }} -[]...] +[...] ``` -### Playbook を作成します。 +### Create the Playbook -Playbook `apache_config_tpl.yml` を以下の内容で作成します。 +Create a playbook called `apache_config_tpl.yml`: ```yaml --- @@ -114,9 +132,10 @@ Playbook `apache_config_tpl.yml` を以下の内容で作成します。 state: restarted ``` -### 実行し確認します +### Run and test -まずは playbook を実行し、curl コマンドで、 `node1` と `node3` にポート `8080` そして `node2` にポート `80` で接続してみます。 +First run the playbook itself, then run curl against `node1` with port +`8080` and `node2` with port `80`. ```bash [student@ansible-1 ansible-files]$ ansible-playbook apache_config_tpl.yml @@ -132,4 +151,6 @@ Playbook `apache_config_tpl.yml` を以下の内容で作成します。 ``` ---- -[Ansible Engine ワークショップ表紙に戻る](../../README.ja.md#section-1---ansible-engineの演習) + +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../../README.md#section-1---ansible-engine-exercises) diff --git a/exercises/ansible_rhel/supplemental/ansible_tower_credentials/README.ja.md b/exercises/ansible_rhel/supplemental/ansible_tower_credentials/README.ja.md index 95de4c2a0..17c6838e6 100644 --- a/exercises/ansible_rhel/supplemental/ansible_tower_credentials/README.ja.md +++ b/exercises/ansible_rhel/supplemental/ansible_tower_credentials/README.ja.md @@ -1,46 +1,71 @@ -# 演習 2.2 - インベントリー、認証情報、アドホックコマンド +# Exercise 2.2 - Inventories, credentials and ad hoc commands **Read this in other languages**: ![uk](../../../../images/uk.png) [English](README.md), ![japan](../../../../images/japan.png)[日本語](README.ja.md), ![brazil](../../../../images/brazil.png) [Portugues do Brasil](README.pt-br.md). -* [インベントリーの作成](#インベントリーの作成) -* [マシンの認証情報](#マシンの認証情報) -* [マシン認証情報の作成](#マシン認証情報の作成) -* [アドホックコマンドの実行](#アドホックコマンドの実行) -* [チャレンジラボ: アドホックコマンド](#チャレンジラボ-アドホックコマンド) - -## インベントリーの作成 - -まず必要なのは、管理対象ホストの一覧です。これは Ansible Engine のインベントリーファイルに相当します。インベントリーにはダイナミックインベントリーなど、高度なものもありますが、まずは基本的なところから始めてみましょう。 - - - ブラウザで **https://student..rhdemo.io** に接続しログインします。 - に関しては環境ごとにユニークな値です。講師の指示に基づき入力してください。 - ユーザーは `admin` パスワードは講師より指示があります。 - -インベントリの作成は以下のように行います。 - - - 左側のWeb UIメニューで、**インベントリー** をクリックし、右端の ![plus](images/green_plus.png) ボタンをクリック。表示されるプルダウンの中から、インベントリーを選択します。 - - - **名前:** Workshop Inventory - - - **組織:** Default - - - **保存** をクリック - -ブラウザ下部に、利用可能なインベントリーが表示されていますので確認してみましょう。 Ansible Tower にあらかじめ作成されている **Demo Inventory** と、今作成した **Workshop Inventory** の2つが存在していることが分かります。ブラウザ上部に戻って、 **Workshop Inventory** の中にある **ホスト** ボタンをクリックすると、まだホストを 1 台も登録していないのでリストが空であることが分かります。 - -早速ホストを追加してみましょう。まず、登録するためのホスト一覧を取得する必要があります。このラボ環境では、Tower がインストールされている ansible Control Host & Tower 上のインベントリーファイルに利用可能なホスト一覧が記述されていますのでそちらを確認してみます。 - -Tower サーバーに SSH でログインします。 - -> **注意** +* [Create an Inventory](#create-an-inventory) +* [Machine Credentials](#machine-credentials) +* [Configure Machine Credentials](#configure-machine-credentials) +* [Run Ad Hoc Commands](#run-ad-hoc-commands) +* [Challenge Lab: Ad Hoc Commands](#challenge-lab-ad-hoc-commands) + +## Create an Inventory + +Let’s get started with: The first thing we need is an inventory of your +managed hosts. This is the equivalent of an inventory file in Ansible +Engine. There is a lot more to it (like dynamic inventories) but let’s start +with the basics. + + - You should already have the web UI open, if not: Point your browser to + the URL you were given, similar to + **https://student\.workshopname.rhdemo.io** (replace "\" with + your student number and "workshopname" with the name of your current + workshop) and log in as `admin`. The password will be provided by the + instructor. + +Create the inventory: + + - In the web UI menu on the left side, go to **RESOURCES** → + **Inventories**, click the ![plus](images/green_plus.png) button on the + right side and choose **Inventory**. + + + + + + + + + + + + + + +
ParameterValue
NAMEWorkshop Inventory
ORGANIZATIONDefault
+ + - Click **SAVE** + +Now there will be two inventories, the **Demo Inventory** and the **Workshop +Inventory**. In the **Workshop Inventory** click the **Hosts** button, it +will be empty since we have not added any hosts there. + +So let's add some hosts. First we need to have the list of all hosts which +are accessible to you within this lab. These can be found in an inventory on +the ansible control node on which Tower is installed. You'll find the +password for the SSH connection there as well. + +Login to your Tower control host via SSH: + +> **Warning** > -> student\ の \ の部分は、各自与えられた Student 番号を入力ください。また、11.22.33.44の部分は、各自与えられた、ansible Control Hot & Tower の IP アドレスを入力ください。 +> Replace **workshopname** by the workshop name provided to you, and the **X** in student**X** by the student number provided to you. ```bash -ssh student@11.22.33.44 +ssh student@student.workshopname.rhdemo.io ``` -インベントリーファイルの場所は、Tower ホスト上の、 `~/lab_inventory/hosts` です。 cat で確認してみましょう。 +You can find the inventory information at `~/lab_inventory/hosts`. Output +them with `cat`, they should look like: ```bash $ cat ~/lab_inventory/hosts @@ -57,44 +82,58 @@ node3 ansible_host=44.55.66.77 [control] ansible-1 ansible_host=11.22.33.44 ``` -> **注意** +> **Warning** > -> 表示される IP アドレスは各自固有のものになっていますので、上記とは異なります。 +> In your inventory the IP addresses will be different. -node1、node2 などのホストの名前と IP addresses を控えておいてください。これらの情報を以下の手順で Tower のインベントリーに登録していきます。 +Note the names for the nodes and the IP addresses, we will use them to fill +the inventory in Tower now: - - Tower のインベントリービューで **Workshop Inventory** をクリックします + - In the inventory view of Tower click on your **Workshop Inventory** - - **ホスト** をクリックします + - Click on the **HOSTS** button - - ![plus](images/green_plus.png) ボタンをクリックします + - To the right click the ![plus](images/green_plus.png) button. - - **ホスト名** `node1` + - **HOST NAME:** `node1` - - **変数** 3つのハイフン `---` の下(2行目)に、 `ansible_host: 22.33.44.55` を入力します。 IP アドレス、`22.33.44.55` については、先ほど `node1` について確認した IP アドレスに置き換えてください。記述方法についても注意してください。コロン **:** と IP アドレスの間にはスペースが必要です。また、インベントリーファイルで利用するような **=** で記述してはいけません。 + - **Variables:** Under the three dashes `---`, enter `ansible_host: + 22.33.44.55` in a new line. Make sure to enter your specific IP address + for your `node1` from the inventory looked up above, and note that the + variable definition has a colon **:** and a space between the values, + not an equal sign **=** like in the inventory file. - - **保存** をクリックします + - Click **SAVE** - - **ホスト** に戻って `node2` と `node3` を上記と同様の手順で追加します。 + - Go back to **HOSTS** and repeat to add `node2` as a second host and + `node3` as a third node. Make sure that for each node you enter the + right IP addresses. -これで Tower で管理する 3 台のホストに対するインベントリーファイルの作成が完了です? +You have now created an inventory with three managed hosts. -## マシンの認証情報 +## Machine Credentials -Ansible Tower は、ホストやクラウド等の認証情報をユーザーに開示せずに利用可能にするという優れた機能を持っています。 Tower がインベントリー登録したリモートホスト上でジョブを実行できるようにするには、リモートホストの認証情報を設定する必要があります。 +One of the great features of Ansible Tower is to make credentials usable to +users without making them visible. To allow Tower to execute jobs on remote +hosts, you must configure connection credentials. -> **メモ** +> **Note** > -> これは Tower が持っている重要な機能の一つ **認証情報の分離の機能です**\! 認証情報はホストやインベントリーの設定とは別で強固に管理することが可能です。 +> This is one of the most important features of Tower: **Credential Separation**\! Credentials are defined separately and not with the hosts or inventory settings. -Tower の重要な機能なので、まずはコマンドラインでラボ環境について確認してみましょう。 +As this is an important part of your Tower setup, why not make sure that +connecting to the managed nodes from Tower is working? -SSH 経由で Tower ホストにログインします。 + To access the Tower host via SSH do the following: - - Tower コントローラーへ SSH でログインします: `ssh student@student.workshopname.rhdemo.io` - - \ の部分と、workshopname は各自のものに置き換えてください。 - - - `node1` に SSH 接続し、 `sudo -i` を実行してみます。 SSH 接続の際はパスワード入力が要求されますが、 `sudo -i` に関してはパスワードは要求されません。 +- Login to your Tower control host via SSH: `ssh + student@student.workshopname.rhdemo.io` +- Replace **workshopname** by the workshop name provided to you, and the + `` in `student` by the student number provided to you. +- From Tower SSH into `node1` or one of the other nodes (look up the IP + addresses from the inventory) and execute `sudo -i`. +- For the SSH connection use the node password from the inventory file, + `sudo -i` works without password. ```bash [student@ansible-1 ~]$ ssh student@22.33.44.55 @@ -104,102 +143,120 @@ Last login: Thu Jul 4 14:47:04 2019 from 11.22.33.44 [root@node1 ~]# ``` -これはどういう意味でしょう? +What does this mean? - - **student** は、インベントリーで指定した管理対象ホストにパスワードベースの SSH で接続可能 + - Tower user **student\** can connect to the managed hosts with + password based SSH - - **student** は、 `sudo` による権限昇格で、**root** としてコマンド実行が可能 + - User **student\** can execute commands on the managed hosts as + **root** with `sudo` -## マシン認証情報の作成 +## Configure Machine Credentials -では早速 Tower で認証情報を作成してみましょう。 Tower 左側のメニューから **認証情報** をクリックします。 +Now we will configure the credentials to access our managed hosts from +Tower. In the **RESOURCES** menu choose **Credentials**. Now: - ![plus](images/green_plus.png) ボタンをクリックします。 +Click the ![plus](images/green_plus.png) button to add new credentials - - **名前:** Workshop Credentials + - **NAME:** Workshop Credentials - - **組織:** Default + - **ORGANIZATION:** Default - - **認証情報タイプ:** 虫眼鏡をクリックして **マシン** を選択し、**選択** をクリックします + - **CREDENTIAL TYPE:** Click on the magnifying glass, pick **Machine** and + click ![plus](images/select.png) - - **ユーザー名:** student\ - いつもの通り、 **\** は各自に割り当てられた番号を入力ください + - **USERNAME:** student\ - make sure to replace the **\** with + your actual student number! - - **パスワード:** 講師から指示があります。 + - **PASSWORD:** Enter the password from the inventory file. - - **保存** をクリックします + - **PRIVILEGE ESCALATION METHOD:** sudo - - パスワード部分が暗号化され表示されないことを確認します + - Click **SAVE** -> **ヒント** -> -> Tower では、入力フィールドの横に虫眼鏡アイコンが表示されているときにはクリックすると選択リストが開きます。 + - Go back to the **RESOURCES** → **Credentials** → **Workshop + Credentials** and note that the password is not visible. -これで、後でインベントリーホストに使用する資格情報を設定できました。 +> **Tip** +> +> Whenever you see a magnifiying glass icon next to an input field, clicking it will open a list to choose from. -## アドホックコマンドの実行 +You have now setup credentials to use later for your inventory hosts. -Ansible Engine で実行したアドホックコマンドを Tower でも実行してみましょう。 +## Run Ad Hoc Commands - - 左の選択メニューから、**インベントリー** → **Workshop Inventory** +As you’ve probably done with Ansible before you can run ad hoc commands from +Tower as well. - - **ホスト** ボタンをクリックし、登録したホスト一覧を表示し、`オン` の左にあるチェックボックスを全てのホストでチェックします + - In the web UI go to **RESOURCES → Inventories → Workshop Inventory** - - **コマンドの実行** をクリックします。さらに次の画面でアドホックコマンドを下記の通り指定していきます。 + - Click the **HOSTS** button to change into the hosts view and select the + three hosts by ticking the boxes to the left of the host entries. - - **モジュール** 欄で **ping** を選択 + - Click **RUN COMMANDS**. In the next screen you have to specify the ad + hoc command: - - **マシンの認証情報** 欄で **Workshop Credentials** を選択 + - As **MODULE** choose **ping** - - **起動** をクリックし、出力を確認します + - For **MACHINE CREDENTIAL** click the magnifying glass icon and + select **Workshop Credentials**. -シンプルな **ping** モジュールにはオプションは必要ありません。しかしながら、他のモジュールの場合、実行には引数が必要な場合があります。次にこのケースを確認してみましょう。先ほどと同様の手順で、今度は **command** モジュールを使って実行中のユーザーのユーザー ID を確認してみます。 + - Click **LAUNCH**, and watch the output. -- **モジュール:** command +The simple **ping** module doesn’t need options. For other modules you need +to supply the command to run as an argument. Try the **command** module to +find the userid of the executing user using an ad hoc command. -- **引数:** id +- **MODULE:** command -マシンの認証情報も入力して実行の上表示内容を確認します。 +- **ARGUMENTS:** id -> **ヒント** +> **Tip** > -> 「引数」の横にある疑問符をクリックすると、モジュールのドキュメントページへのリンクが表示されます。とっても便利ですね。♪ +> After choosing the module to run, Tower will provide a link to the docs page for the module when clicking the question mark next to "Arguments". This is handy, give it a try. -次に、/etc/shadow のファイルの中身を確認するコマンドを発行してみましょう +How about trying to get some secret information from the system? Try to +print out */etc/shadow*. -- **モジュール:** command +- **MODULE:** command -- **引数:** cat /etc/shadow +- **ARGUMENTS:** cat /etc/shadow -> **注意** +> **Warning** > -> **エラーが発生ます** +> **Expect an error\!** -失敗します、何故でしょう? +Oops, the last one didn’t went well, all red. -理由は、そう、権限昇格が必要なのです。もう一度戻って、 **権限昇格の有効化** にチェックを入れて実行してみてください。 +Re-run the last ad hoc command but this time tick the **ENABLE PRIVILEGE +ESCALATION** box. -今回はうまくいきました。 root 権限で実行する必要があるタスクの場合、権限昇格を有効化する必要があります。これは、 Playbook の記述でもよく見かける **become: yes** と同じです。 +As you see, this time it worked. For tasks that have to run as root you need +to escalate the privileges. This is the same as the **become: yes** you’ve +probably used often in your Ansible Playbooks. -## チャレンジラボ: アドホックコマンド +## Challenge Lab: Ad Hoc Commands -アドホックコマンドを使って、node1, node2 node3 にパッケージ「tmux」をインストールしてください。 +Okay, a small challenge: Run an ad hoc to make sure the package "tmux" is +installed on all hosts. If unsure, consult the documentation either via the +web UI as shown above or by running `[ansible@tower ~]$ ansible-doc yum` on +your Tower control host. -> **ヒント** +> **Warning** > -> **yum** モジュールを利用します。使い方は `[ansible@tower ~]$ ansible-doc yum` などで確認してみてください。 - -> **回答** +> **Solution below\!** - - **モジュール:** yum + - **MODULE:** yum - - **引数:** name=tmux + - **ARGUMENTS:** name=tmux - - **権限昇格の有効化:** チェックします + - Tick **ENABLE PRIVILEGE ESCALATION** -> **ヒント** +> **Tip** > -> コマンドの黄色の出力は、Ansibleが実際に何かを実行したことを示しています(ここでは、パッケージがインストールされてなかったのでインストールを実行しました)。アドホックコマンドを再度実行すると、出力が緑色になり、パッケージが既にインストールされていることが通知されます。Ansible の黄色は「注意」を意味するわけではありません…;-)。ご注意を…? ;-). +> The yellow output of the command indicates Ansible has actually done something (here it needed to install the package). If you run the ad hoc command a second time, the output will be green and inform you that the package was already installed. So yellow in Ansible doesn’t mean "be careful"…​ ;-). ---- -[Ansible Tower ワークショップ表紙に戻る](../../README.ja.md#section-2---ansible-towerの演習) +[Click here to return to the Ansible for Red Hat Enterprise Linux +Workshop](../../README.md#section-2---ansible-tower-exercises) diff --git a/exercises/ansible_rhel_90/6-system-roles/README.ja.md b/exercises/ansible_rhel_90/6-system-roles/README.ja.md new file mode 100644 index 000000000..dfd2d9163 --- /dev/null +++ b/exercises/ansible_rhel_90/6-system-roles/README.ja.md @@ -0,0 +1,210 @@ +# 演習 - Linux システムロール + +**他の言語でもお読みいただけます**: ![uk](../../../images/uk.png) [English](README.md) + +## 目次 + +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1 - Ansible プロジェクトの検証](#step-1---examine-ansible-project) + * [ステップ 2 - Ansible Playbook の検証](#step-2---examine-the-ansible-playbook) + * [ステップ 3 - Linux システムロールの検証](#step-3---examine-the-linux-system-roles) + * [ステップ 4 - Ansible ジョブの起動](#step-4---launch-the-ansible-job) + * [ステップ 5 - 設定の確認](step-5---verify-the-configuration) +* [完了](#complete) + +# 目的 + +この演習の目的は、Automation Hub および Ansible Galaxy +のロールとコレクションの形で既存のコンテンツを理解し、使用することです。 + +- [Linux システムロール](https://linux-system-roles.github.io/) および [RHEL + システムロールコレクション](https://console.redhat.com/ansible/automation-hub/repo/published/redhat/rhel_system_roles) + を理解して使用します + - [ファイヤーウォールロール](https://galaxy.ansible.com/linux-system-roles/firewall) + を使用してファイアウォールを設定します + - [timesync + ロール](https://console.redhat.com/ansible/automation-hub/repo/published/redhat/rhel_system_roles/content/role/timesync) + を使用して、RHEL システムロールコレクションから NTP を設定します。 +- 事前に入力された Ansible Survey を使用して RHEL Web ホストを設定します + +# ガイド + +Linux +システムロールは、特定の実装から抽象化された特定のサブシステムに設定を提供するために一貫性のあるユーザーインターフェースを作成します。たとえば、IP +アドレスをネットワークインターフェースに割り当てることは、init +ネットワークスクリプト、NetworkManager、systemd-networkd などの特定の実装とは別の一般的な概念である必要があります。 + +この演習では、2 つの Linux システムロール(`timesync` ロールおよび `firewall` ロール)を使用します。 + +## ステップ 1 - Ansible プロジェクトの検証 + +Ansible 自動コントローラー UI で Projects に移動し、続いて **Ansible official demo project** +をクリックします。 + +![demo project](images/demo-project.png) + +Ansible 自動コントローラー環境に事前に読み込まれていた Github リポジトリーを書き留めておきます。 + +[https://github.com/ansible/product-demos](https://github.com/ansible/product-demos) + +## ステップ 2 - Ansible Playbook の検証 + +Web ブラウザーで上記のリンクされたリポジトリーを開きます。**playbooks/security/hardening.yml** に移動します。 + +次の 2 つのタスクに注意してください。 + +``` +- name: Configure Firewall + when: harden_firewall | bool + include_role: + name: linux-system-roles.firewall + +- name: Configure Timesync + when: harden_time | bool + include_role: + name: redhat.rhel_system_roles.timesync +``` + +それぞれロールおよびコレクションからのロールが含まれる 2 つのタスクがあります。Ansible Galaxy +から直接提供されるロールと、Ansible コレクションにあるロールを区別できない場合は、この命名法が役立ちます。 + + + + + + + + + + +
Ansible コレクションnamespace.collection.role
Ansible ロールnamespace.role +
+ +## ステップ 3 - Linux システムロールの検証 + +Ansible Playbook はシンプルです。Ansible Galaxy および Automation Hub が提供する事前にビルドされた +Ansible Playbook を使用するだけです。これらは、この Ansible ワークショップ用に事前にインストールされています。 + +- [firewall +システムロール](https://galaxy.ansible.com/linux-system-roles/firewall): +デフォルトでは、firewalld、python3-firewall がインストールされます。開くサービスなど、オプションのパラメーターを送信できます。 + +``` +vars: + firewall: + service: 'tftp' + state: 'disabled' +``` + +- RHEL システムロールコレクションからの [timesync +システムロール](https://console.redhat.com/ansible/automation-hub/repo/published/redhat/rhel_system_roles/content/role/timesync): +OS バージョンに応じて NTP または chrony をインストールおよび設定し、Linux +ホストのシステムクロックが同期されるようにします。オプションのパラメーターを設定して特定のパラメーターを指定できます。 + +``` +vars: + timesync_ntp_servers: + - hostname: foo.example.com + iburst: yes + - hostname: bar.example.com + iburst: yes + - hostname: baz.example.com + iburst: yes +``` + +## ステップ 4 - Ansible ジョブの起動 + +Ansible 自動コントローラー UI で、**Templates** に移動します。 + +**ロケット** をクリックして、**SERVER / Hardening** ジョブテンプレートを起動します。 + +![job template](images/job.png) + +これにより、ジョブを開始する前にサーベイが起動します。サーベイに記入します。 + +![survey](images/survey.png) + +- **CONFIGURE FIREWALL?** の質問は、`firewall` システムロールを有効にします。 - **CONFIGURE +TIME?** は `timesync` システムロールを有効にします。 - この演習では、残りを **No** に設定します。 + +**NEXT** ボタンをクリックします。 + +![next button](images/next.png) + +**EXTRA VARIABLES** を確認して、サーベイの内容を理解します。**LAUNCH** ボタンをクリックします。 + +![next button](images/launch.png) + +ジョブが開始されたのを確認します! + +## ステップ 5 - 設定の確認 + +Ansible コントロールノードから、設定したノードに ssh 接続します。 + +``` +$ ssh node1 +``` + +Red Hat Enterprise Linux 8 では、**timesync** システムロールは chronyd +を使用しました。`systemctl status` コマンドを使用して、これがインストール、有効化、および実行されていることを確認します。 + +``` +$ sudo systemctl status chronyd.service +``` + +完全な出力は以下のとおりです。 +``` +[student1@ansible ~]$ sudo systemctl status chronyd.service +● chronyd.service - NTP client/server + Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled) + Active: active (running) since Tue 2020-04-21 14:37:14 UTC; 13h ago + Docs: man:chronyd(8) + man:chrony.conf(5) + Main PID: 934 (chronyd) + Tasks: 1 (limit: 23902) + Memory: 1.8M + CGroup: /system.slice/chronyd.service + └─934 /usr/sbin/chronyd + +Apr 21 14:37:14 localhost.localdomain systemd[1]: Starting NTP client/server... +Apr 21 14:37:14 localhost.localdomain chronyd[934]: chronyd version 3.5 starting (+CMDMON +NTP +REFCLOCK +RTC +PRIVDROP +SCFILTER +SIGND +ASYNCDNS +SECHASH +IPV6 +DEBUG) +Apr 21 14:37:14 localhost.localdomain chronyd[934]: Using right/UTC timezone to obtain leap second data +Apr 21 14:37:14 localhost.localdomain systemd[1]: Started NTP client/server. +Apr 21 14:38:12 ip-172-16-47-87.us-east-2.compute.internal chronyd[934]: Selected source 129.250.35.250 +Apr 21 14:38:12 ip-172-16-47-87.us-east-2.compute.internal chronyd[934]: System clock TAI offset set to 37 seconds +``` + +以下は、時刻が正常に動作していることを確認するのに使用できるその他のコマンドです。 + +``` +# chronyc tracking +# chronyc sources +# chronyc sourcestats +# systemctl status chronyd +# chronyc activity +# timedatectl +``` + +例: + +``` +$ timedatectl + Local time: Wed 2020-04-22 03:52:15 UTC + Universal time: Wed 2020-04-22 03:52:15 UTC + RTC time: Wed 2020-04-22 03:52:15 + Time zone: UTC (UTC, +0000) +System clock synchronized: yes + NTP service: active +``` + +# 完了 + +ラボ演習を完了しました + +---- +**Navigation** +
+[Previous Exercise](../5-surveys) - [Next Exercise](../7-insights) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_rhel_90/7-insights/README.ja.md b/exercises/ansible_rhel_90/7-insights/README.ja.md new file mode 100644 index 000000000..fa969d9d9 --- /dev/null +++ b/exercises/ansible_rhel_90/7-insights/README.ja.md @@ -0,0 +1,127 @@ +# 演習 - Red Hat Insights + +**他の言語でもお読みいただけます**: ![uk](../../../images/uk.png) [English](README.md) + +## 目次 + +* [演習 - Red Hat Insights](#exercise---red-hat-insights) + * [目次](#table-contents) +* [目的](#objective) +* [ガイド](#guide) + * [ステップ 1 - Red Hat Insights について](#step-1---understand-red-hat-insights) + * [ステップ 2 - cloud.redhat.com + アカウントの作成](#step-2---create-a-cloudredhatcom-account) + * [ステップ 3 - ライセンスの検証](#step-3---examine-your-license) + * [ステップ 4 - Ansible ジョブの起動](#step-4---launch-the-ansible-job) + * [ステップ 5 - cloud.redhat.com へのログイン](#step-5---login-to-cloudredhatcom) +* [完了](#complete) + +# 目的 + +この演習の目的は、Red Hat Insights を理解し、Ansible を使用してすべての Web ノードにインストールおよび設定することです。 + +# ガイド + +![red hat insights logo](images/insights_logo.png) + + + +## ステップ 1 - Red Hat Insights について + +[Red Hat +Insights](https://www.redhat.com/en/technologies/management/insights) +を使用すると、Red Hat® Enterprise Linux® +環境におけるセキュリティー、コンプライアンス、設定のリスクを事前に特定し、修正することができます。Red Hat Insights は Red Hat +Enterprise Linux サブスクリプションに含まれています。 + + - 1 つのツールで Red Hat 環境全体の可視性を強化 + - 手動分析の要らない総合的なリスクの特定 + - すぐに利用できるガイダンス + - Red Hat Ansible Automation Platform による大規模システムに対応した解決策 + +Effectively Red Hat Insights will identify security, compliance and +configuration risks, and use Ansible Automation Platform to automate and +implment the fixes. There is no need to create your own Ansible Playbooks, +Red Hat Insights will provide those to Automation controller. + +## ステップ 2 - cloud.redhat.com アカウントの作成 + +ワークショップインベントリーで Red Hat Insights を利用するには、以下の 2 つが必要です。 + - cloud.redhat.com アカウント + - そのアカウントに割り当てられた有効な Red Hat Enterprise Linux ライセンス + +この 2 つの点は、共に 1 つのスポットで実行できます。 + +- +[https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux](https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux) +に移動します - **Try it free** ボタンをクリックします + + ![try it now](images/tryit.png) + +- **DOWNLOAD** ボタンをクリックします + + ![download](images/download.png) + +- アカウントがない場合は、今すぐ作成できます。 + + ![login](images/create_account.png) + +- **Create one now** +をクリックするか、別のログイン方法のいずれか(例:Github)をクリックしてアカウントを作成します。情報を入力してください + +- メールアドレスを必ず確認してください。 + + ![verify](images/verify.png) + +- 確認後は、Web サイトにログインして x86_64 +ファイルをダウンロードできます。ただし、このワークショップ演習の目的では、このファイルは必要ありません。Red Hat Enterprise Linux +のライセンスへのアクセスも追加されています。 + +## ステップ 3 - ライセンスの検証 + +- Red Hat カスタマーポータル [https://access.redhat.com](https://access.redhat.com) +に移動します - **My Subscriptions** までスクロールダウンして以下のリンクをクリックします + + ![subscription](images/subs.png) + +- **Subscriptions** のリンクをクリックします。 + + ![tab](images/subs_tab.png) + +- アクティブなサブスクリプションが表示されます。 + + ![my subscription](images/my_sub.png) + +## ステップ 4 - Ansible ジョブの起動 + +You now have a Red Hat account, and an active subscription to use Red Hat +Insights! Open up the Automation controller UI again. + +- テンプレートに移動します - ロケットをクリックして **SERVER / Red Hat Insights** ジョブを起動します - Red +Hat アカウントでサーベイに記入します + + ![tower survey](images/tower_survey.png) + +- 3 つすべての Web ノードでジョブが正常に完了するのを確認します。 + +## ステップ 5 - cloud.redhat.com へのログイン + +- Web ブラウザーで [https://cloud.redhat.com](https://cloud.redhat.com) に移動します - +ログインして Red Hat Insights Dashboard を選択します - 左側のメニューで **Inventory** +をクリックし、すべてのワークショップノードをすべて表示します + + ![workshop inventory](images/nodes.png) + +- いずれかのノードをクリックして、それらの Red Hat Enterprise Linux ノードに関する追加情報を表示します。 + + +# 完了 + +ラボ演習を完了しました + +---- +**Navigation** +
+[Previous Exercise](../6-system-roles) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_rhel_90/README.ja.md b/exercises/ansible_rhel_90/README.ja.md new file mode 100644 index 000000000..53732771c --- /dev/null +++ b/exercises/ansible_rhel_90/README.ja.md @@ -0,0 +1,53 @@ +# Ansible Workshop - Ansible for Red Hat Enterprise Linux (90 mins) + +If you’re new to Ansible Automation, but want a quicker version of the +original RHEL workshop, this 90-minute workshop provides you with fewer +exercises, focused on cloud provisioning, converting bash/shell commands to +Ansible, all the way to utilizing RHEL System Roles. + +**This is documentation for Ansible Automation Platform 2** + +## Table of Contents + +* [Table of Contents](#table-of-contents) +* [Presentations](#presentations) +* [Time planning](#time-planning) +* [Lab Diagram](#lab-diagram) +* [Ansible Automation Platform + Exercises](#ansible-automation-platform-exercises) + +## Presentations + +The exercises are self explanatory and guide the participants through the +entire lab. All concepts are explained when they are introduced. + +There is an optional presentation available to support the workshops and +explain Automation, the basics of Ansible and the topics of the exercises in +more detail: [Ansible RHEL Automation](../../decks/ansible_rhel_90.pdf) +[Google source - Red Hat +only](https://docs.google.com/presentation/d/143JtFwmz469ucKNbB4L5T-PtKfurjpcOmCICzSbwm3Y/edit?usp=sharing) + +Also have a look at our Ansible Best Practices Deck: [Ansible Best +Practices](../../decks/ansible_best_practices.pdf) + +## Time planning + +This workshop was created to last about 90 minutes and focuses more on +targeting every day use cases to apply automation. + +## Lab Diagram + +![ansible rhel lab diagram](../../images/rhel_lab_diagram.png) + +## Ansible Automation Platform Exercises + + - [Exercise 1 - Overview of public cloud provisioning](1-setup) + - [Exercise 2 - The Ansible Basics](2-thebasics) + - [Exercise 3 - Deploying applications to linux hosts](3-playbook) + - [Exercise 4 - Retrieving information from automation hosts](4-variables) + - [Exercise 5 - Self-service IT via surveys](5-surveys) + - [Exercise 6 - Overview of system roles for RHEL](6-system-roles) + +--- +![Red Hat Ansible +Automation](../../images/rh-ansible-automation-platform.png) diff --git a/exercises/ansible_security/1.1-explore/README.ja.md b/exercises/ansible_security/1.1-explore/README.ja.md index da2647cb7..182b0b092 100644 --- a/exercises/ansible_security/1.1-explore/README.ja.md +++ b/exercises/ansible_security/1.1-explore/README.ja.md @@ -1,95 +1,219 @@ -# 演習 1.1 - ラボ環境を確認してみよう +# 演習 1.1 - ラボ環境の調査 -**Read this in other languages**:
+**他の言語でもお読みいただけます**:
[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
-## Step 1.1 - 目的 +## ステップ 1.1 - 目的 -このラボの目的は、セキュリティオペレーターが使用するセキュリティツールを自動化する方法をより深く理解し、実際に体験してもらうことです。そのために、セキュリティ担当者の日々の課題に典型的な3つのセキュリティユースケースに取り組みます。これらのユースケースはすべてほぼ同じツールセットを使用しますが、それぞれのユースケースは異なる視点(セキュリティアナリスト、ファイアウォールオペレーター、IDS スペシャリスト)を示しており、利用可能なツールについての異なる視点を示しています。 +このラボの目的は、セキュリティーオペレーターが使用するセキュリティーツールを自動化する方法をより深く理解し、実際に体験していただくことです。そのために、セキュリティーオペレーターの日常的な課題として典型的な +3 つのセキュリティーユースケースに取り組みます。これらのケースでは、ほぼ同じツールセットを使用しますが、それぞれのユースケースでは、異なる視点 +(セキュリティーアナリスト、ファイアウォールオペレーター、IDS スペシャリスト) を紹介するため、利用可能なツールに対する視点も異なってきます。 + +自動化コントローラーと、セキュリティー関連ツールの共通セットをセットアップしています。 -セキュリティ関連の一般的なツールをセットアップします: +| Role | Inventory name | Hostname | Username | Password | +|--- |--- |--- |--- |--- | | Ansible Control Host | ansible | ansible-1 | +- | - | | IBM QRadar | qradar | qradar | admin | Ansible1! | | +Attacker | attacker | attacker | - | - | | Snort | snort | snort | - + | - | | Check Point Management Server | checkpoint | checkpoint_mgmt | +admin | admin123 | | Check Point Gateway | - | checkpoint_gw | - | - + | | Windows Workstation | windows-ws | windows_ws | administrator | +*Provided by Instructor* | | Automation controller | ansible | ansible-1 + | admin | *Provided by Instructor* | -- ファイアウォール、今回は [Check Point Next Generation Firewall](https://www.checkpoint.com/products/next-generation-firewall/)を使用します。 -- セキュリティ情報とイベント管理(SIEM)、今回は [QRadar](https://www.ibm.com/security/security-intelligence/qradar)を使用します。 -- 侵入検知・防止システム、今回は [Snort](https://www.snort.org)を使用します。 -このラボの最初のセクションの演習では、上記の個々のソリューションについて説明します。これらのソリューションにアクセスする方法、それらが何のために使用されているのか、そして Ansibleを使用してそれらとどのように対話するのかを学びます。 +### ファイアウォール +- +ファイアウォールとは、送受信されるネットワークトラフィックを監視し、定義されたセキュリティールールに基づいて特定のトラフィックを許可するかブロックするかを決定するネットワークセキュリティーデバイスです。 +- このワークショップでは、[Check Point Next Generation +Firewall](https://www.checkpoint.com/products/next-generation-firewall/) +を使用します。 -このラボの 2 番目のセクションの演習では、実際のセキュリティ運用のユースケースに焦点を当てています。課題を設定し、状況を解決するためにどのようなタスクを手動で行う必要があるかを説明した後、ラボでは Ansible を使用してタスクを自動化するための手順を説明します。 +### Security Incident and Events Management (SIEM) +- SIEM は、セキュリティー情報管理 (SIM) とセキュリティーイベント管理 (SEM) +を組み合わせたものです。イベントのリアルタイム監視および分析だけでなく、コンプライアンスまたは監査目的でセキュリティーデータの追跡およびロギングを提供します。本ワークショップでは、[QRadar](https://www.ibm.com/security/security-intelligence/qradar) +SIEM インスタンスを用意しています。 -## Step 1.2 - ラボのアーキテクチャ、NodesとServices +### Intrusion Prevention and Detection System (IDPS) +- 侵入検知防止システム (IDPS) +は、起こりうるインシデントを特定し、それに関する情報をログに記録し、その阻止を試み、セキュリティー管理者にこれらを報告することに重点を置いています。 +- 本ワークショップでは、演習用の [Snort](https://www.snort.org) インスタンスを用意しています。 -このラボでは、事前に設定されたラボ環境で作業を行います。以下のホストとサービスにアクセスすることができます: +このラボの最初のセクションの演習では、上述の個々のソリューションについて説明します。これらのソリューションへのアクセス方法、使用目的、および +Ansible を使用した対話方法を学びます。 -| Role | Inventory name | -| ------------------------------| ---------------| -| Ansible Control Host | ansible | -| IBM QRadar | qradar | -| Attacker | attacker | -| Snort | snort | -| Check Point Management Server | checkpoint | -| Check Point Gateway | - | -| Windows Workstation | windows-ws | +最初の演習では、Ansible Automation Platform +の機能やコマンドラインユーティリティーについても紹介します。これらをより詳しく見てみましょう。 -ラボはあなたのために個別に設定されます。あなたは自分用の環境、自分用のサービス、自分用の仮想マシンを持ちます。 +### Ansible Automation Platform コマンドラインユーティリティー -![Red Hat Ansible Security Workshop Pod](images/diagram.png) +- [ansible-navigator](https://github.com/ansible/ansible-navigator) - +Ansible 自動化コンテンツを実行および開発するためのコマンドラインユーティリティーとテキストベースのユーザーインターフェース (TUI)。 - +[ansible-core](https://docs.ansible.com/core.html) - Ansible Automation +Platform +を支えるフレームワーク、言語、機能を提供する基本的な実行ファイルです。また、`ansible`、`ansible-playbook`、`ansible-doc` +などのさまざまな cli ツールも含まれています。Ansible Core は、無料でオープンソースの Ansible +を提供する上流のコミュニティーと、Red Hat が提供する下流のエンタープライズ自動化製品である Ansible Automation +Platform との橋渡しの役割を果たします。 - +[実行環境](https://docs.ansible.com/automation-controller/latest/html/userguide/execution_environments.html) +- このワークショップでは特に取り上げません。なぜなら、実行環境はすでにこのワークショップに組み込まれているからです。実行環境とは、Ansible +の実行環境として利用できるコンテナーイメージのことです。 - +[ansible-builder](https://github.com/ansible/ansible-builder) - +このワークショップでは特に取り上げませんが、`ansible-builder` +は実行環境の構築プロセスを自動化するためのコマンドラインユーティリティです。 -セクション2の演習では、セキュリティインシデントを発生させる必要があります。これらのインシデントは、**ターゲット**のマシン(Snortサーバ)で発生しなければなりません。基本的には、SnortがインストールされたRHELのインストール作業で、攻撃を実行するための簡易ウェブサーバを実行しています。 +Ansible Automation Platformの新しいコンポーネントに関する情報が必要な場合は、このランディングページをブックマークしてください +[https://red.ht/AAP-20](https://red.ht/AAP-20) -## Step 1.3 - Ansible環境へのアクセス -すべての自動化は、Red Hat Enterprise Linux マシンである Ansible コントロールノードから行われます。コントロールホストへのアクセスやファイルの管理を容易にするために、コントロールノードに直接インストールされた VSCodeエディタのオンライン版があります。この方法では、通常のWebブラウザからアクセスすることができます。コマンドは、VSCodeエディタ内のターミナルから直接実行することができます。 +このラボの第 2 +セクションの演習は、実際のセキュリティー運用のユースケースに焦点を当てています。つまり、特定の課題を解決しなければならない状況で、通常は、上記のソリューションの +1 +つだけでなく、いくつかを組み合わせて使用することになります。課題を設定し、その状況を解決するために手動で行わなければならない作業を説明した後、Ansible +を使ってその作業を自動化する手順をラボで説明します。 -Visual Studio Codeにアクセスしてみましょう。ワークショップページからVS Codeにアクセスするためのリンクをクリックします: +## ステップ 1.2 - ラボ、ノード、およびサービスのアーキテクチャー -![VS Code Access](images/1-vscode-access.png) +このラボでは、事前設定されたラボ環境で作業します。ここでは、以下のホストとサービスにアクセスできます。 -この時点で、**Welcome** ページが表示されます: -![VS Code - Welcome](images/1-vscode-welcome-page.png) +>**注記** +> +> ワークショップには、Red Hat Enterprise Linux ホストにログインするための事前設定された SSH キーが含まれ、ログインにユーザー名とパスワードは必要ありません。 -この環境の中から、ファイルの作成や変更、ターミナルを開いてコマンドを実行することができます。 +ラボは個別にセットアップされています。独自の環境、独自のサービス、独自の仮想マシンがあります。 -## Step 1.4 - VSCodeでターミナルを開いて使用する +![Red Hat Ansible Security Workshop Pod](images/diagram.png#centreme) -VS Codeで新しいターミナルを開いてみましょう。メニューバーの「**Terminal** > **New Terminal**」をクリックします。 +セクション 2 の演習では、セキュリティーインシデントが必要です。これらは、**target** マシン、つまり Snort +サーバー上で発生する必要があります。基本的には、RHEL に Snort をインストールし、攻撃を行うための簡易 Web サーバーを実行させます。 -![VS Code - New Terminal](images/1-vscode-new-terminal.png) +## ステップ 1.3 - Ansible 環境へのアクセス -エディタの下部に新しいターミナルが開き、コマンドプロンプトが表示されます。ほとんどの前提条件のタスクはすでに完了していることに注意してください。 +すべての自動化は、Ansible コントロールホスト(Red Hat Enterprise Linux +マシン)から行われます。コントロールホストへのアクセスやファイルの管理を容易にするために、オンライン版の VS Code +エディターがコントロールホストに直接インストールされています。これにより、通常の Web ブラウザーでアクセスできるようになっています。コマンドは、VS +Code エディター内のターミナルから直接実行できます。 - - Ansibleはインストールされています + + + + + + +
ワークショップの演習には、Visual Studio Codeの使用が強く推奨されます。Visual Studio Codeは以下を提供します。 +
    +
  • ファイルブラウザ
  • +
  • 構文強調表示の機能付きテキストエディタ
  • +
  • ブラウザ内ターミナル
  • +
+ バックアップとして、あるいはVisual Studio Codeでは不十分な場合には、SSHによる直接アクセスが可能です。さらなる説明が必要な場合は、短い YouTube ビデオが用意されています。 Ansible Workshops - ワークベンチ環境へのアクセス +
- - SSH接続と鍵の設定 - - root権限を必要とするコマンドを実行するために `sudo` が管理ホスト上で設定されています。 +Visual Studio Code にアクセスしてみましょう。ワークショップページから VS Code アクセスのリンクをクリックします。 -各生徒には生徒番号、つまりXが割り当てられていることに注意してください。明示的に異なることを指示されていない場合は、コントロールノード上で「student」ユーザとして動作する必要があります。 +![VS Code Access](images/1-vscode-access.png#centreme) -次に、Ansibleがただしくインストールされているか確認します。 +この時点で、**Welcome** ページが表示されます。 + +![VS Code - Welcome](images/1-vscode-welcome-page.png#centreme) + +この環境内では、ファイルの作成や変更のほか、ターミナルを開いてコマンドを実行することができます。 + +## ステップ 1.4: VS Code でターミナルを開いて使用する + +では、VS Code で新しいターミナルを開いてみましょう。メニューバーで、**Terminal** > **New Terminal** をクリックします。 + +![VS Code - New Terminal](images/1-vscode-new-terminal.png#centreme) + +エディターの下位部分に新しいターミナルが開き、コマンドプロンプトが表示されます。前提条件とされる多くのタスクがすでに完了している点に留意してください。 + + - Ansible ソフトウェアのインストール + + - SSH 接続および鍵の設定 + + - root 権限が必要なコマンドを実行できるように、`sudo` が管理対象ホストで設定されています。 + +各受講者には受講者番号 (X など) が割り当てられており、明示的に指示されない限り、コントロールノードで受講者 ユーザーとして作業する必要があることに注意してください。 + +## ステップ 1.5: 自動化実行環境の検証 + +次に進み、Ansible Automation Platform が正しく設定されていることを確認します。 ```bash - [student@ansible ~]$ ansible --version + [student@ansible-1 ~]$ ansible-navigator images ``` -結果は以下のようになるはずです: +結果は以下のようになります。 + +![VS Code - Check Ansible +Version](images/1-vscode-navigator_list_ee.png#centreme) + +実行環境 (EE) は、開発から実稼働まで、一貫して自動化を実行するための移植可能および保守可能な環境を開発者およびオペレーターに提供します。 + +このワークショップは、`security_ee` と呼ばれるカスタム自動化実行環境を使用します。では、詳しく見るために、対応する番号 (**0**) +を押します。出力は以下のようになります。 -![VS Code - Check Ansible Version](images/1-vscode-check-ansible-version.png) +![ee main menu](images/1-vscode-navigator-ee-menu.png#centreme) -> **Note** +`Ansible version and collections` に `2` を選択すると、その特定の EE +にインストールされたすべてのコンテンツコレクションと、`ansible-core` のバージョンが表示されます。 + +![ee info](images/1-vscode-navigator-ee-collections.png#centreme) + +`ansible-navigator` の以前の画面に戻るには、`Esc` ボタンを押します。今回の例では、`Esc` を 3 +回押すとプロンプトに戻ります。 + + +> **注記** +> +> 詳細は、[execution environment documentation](https://docs.ansible.com/automation-controller/latest/html/userguide/execution_environments.html) を参照してください。 + +## ステップ 1.6 - ansible-navigator 設定の検証 + +Visual Studio Code を使用して `ansible-navigator.yml` ファイルを開くか、`cat` +コマンドを使用してファイルの内容を表示します。このファイルはホームディレクトリーにあります。 + +```bash +$ cat ~/.ansible-navigator.yml +--- +ansible-navigator: + ansible: + inventories: + - /home/student1/lab_inventory/hosts + + execution-environment: + image: quay.io/acme_corp/security_ee:latest + enabled: true + container-engine: podman + pull-policy: missing + volume-mounts: + - src: "/etc/ansible/" + dest: "/etc/ansible/" +``` + +`ansible-navigator.yml` ファイル内の次のパラメータに注意してください。 + +* `inventories`: 使用されている Ansible インベントリーの場所を示します +* `execution-environment`: デフォルトの実行環境が設定されている場所 + +> **注記** > -> Ansibleは構成管理をシンプルにしています。Ansibleはデータベースや実行デーモンを必要とせず、ラップトップ上で簡単に実行できます。管理されているホストでは、実行エージェントは必要ありません。 +> 設定の完全な一覧については、`ansible-navigator` [documentation](https://ansible-navigator.readthedocs.io/en/latest/settings/). を参照してください。 -## Step 1.5 - あなたのインベントリ +## ステップ 1.7: インベントリー -VSCodeでファイルを開いてみましょう。メニューバーで「**File** > **Open File**」をクリックします。 画面中央のドロップダウンメニューが開き、ユーザーのホームディレクトリの利用可能なファイルの内容が表示されます: +VS Codeでファイルを開いてみましょう。メニューバーで、**File**、**Open File** +をクリックします。画面の中央でドロップダウンメニューが開き、ユーザーのホームディレクトリーにある利用可能なファイルの内容が表示されます。 -![VS Code - VS Code file picker](images/1-vscode-filepicker.png) +![VS Code - VS Code file picker](images/1-vscode-filepicker.png#centreme) -「**lab_inventory**」を選ぶと、すぐにファイルリストが更新されます。新しいファイルリストで「**hosts**」をピックしてください。これであなたの環境のインベントリが開きます。 +**lab_inventory** を選択すると、ファイル一覧がすぐに更新されます。新規のファイル一覧で **hosts** +を選択します。これにより、お使いの環境のインベントリーが開きます。 -ご覧のように、あなたの環境のインベントリは以下のリストのような静的なini型ファイルで提供されています。ここで提供されているIPアドレスは単なる例であり、あなたのラボ環境では異なることに注意してください: +ご覧のように、環境のインベントリーは静的な ini-type ファイルで提供されます。ここでは、以下の一覧のようになっています。ここで提供される IP +アドレスは単なる一例であり、ラボ環境では異なる点に注意してください。 ```ini [all:vars] @@ -116,18 +240,23 @@ checkpoint ansible_host=44.55.66.77 ansible_user=admin private_ip=192.168.4.5 an windows-ws ansible_host=55.66.77.88 ansible_user=Administrator ansible_pass=RedHat19! ansible_port=5986 ansible_connection=winrm ansible_winrm_server_cert_validation=ignore private_ip=192.168.5.6 ``` -すべてのIPアドレスはあなたの環境に固有のものです。演習で特定のマシンへのアクセスを要求されたときはいつでも、コントロールノードのインベントリでIPを調べることができます。 +すべての IP アドレスは、お使いの環境に固有のものです。演習で特定のマシンへのアクセスを求められた場合、コントロールホストのインベントリーでいつでも +IP を調べることができます。 -Ansible は、あなたの環境に固有のインベントリを使用するようにすでに設定されています。上の例のように、インベントリにはホスト名と IP アドレスだけではありません。特にWindowsワークステーションの場合は、さらにいくつかのパラメータが設定されています。 +Ansible は、お客様の環境に特化したインベントリーを使用するようにすでに設定されています。上の例で示したように、インベントリーにはホスト名や IP +アドレス以外の情報も含まれています。特に、Windows ワークステーションの場合は、さらにいくつかのパラメーターが設定されています。 -> **Note** +> **注記** > -> ラボ内のすべてのホストに SSH や WinRM 経由でアクセスできるわけではありません。いくつかのホストはREST API、RDPまたはWebブラウザを介してアクセスします。演習では、各ノードの種類について詳細に説明し、リソースにアクセスする方法をステップバイステップで示します。 +> ラボ内のすべてのホストが SSH または WinRM 経由でアクセスできるわけではありません。一部のホストは、REST API、RDP、または Web ブラウザー経由でアクセスします。演習では、各ノードタイプが詳細に説明され、リソースにアクセスする方法がステップごとに表示されます。 -## Step 1.6 - ラボを利用する +## ステップ 1.8 - ラボでの作業 -このラボはコマンドライン中心のラボなので、すべてを手入力せず、ブラウザからコピー&ペーストすることをお勧めします。しかし、実行前によく考えて理解することをおすすめします。 +もうお分かりかもしれませんが、このラボではコマンドラインを頻繁に使用します。...したがって、すべてを手動で入力するのではなく、必要に応じてブラウザーからのコピー&ペーストを使用することをお勧めします。ただし、一度手を止めて考え、理解を深めるようにしてください。 ---- - -[ここをクリックしてAnsible Security Automation Workshopに戻る](../README.ja.md) +**Navigation** +

+[Next Exercise](../1.2-checkpoint/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/1.2-checkpoint/README.ja.md b/exercises/ansible_security/1.2-checkpoint/README.ja.md index c43436472..02118ec45 100644 --- a/exercises/ansible_security/1.2-checkpoint/README.ja.md +++ b/exercises/ansible_security/1.2-checkpoint/README.ja.md @@ -1,67 +1,161 @@ -# 演習 1.2 - 最初のCheck Point用のPlaybookを実行してみよう +# 演習 1.2 - 最初の Check Point 用 Playbook の実行 -**Read this in other languages**:
+**他の言語でもお読みいただけます**:
[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
-## Step 2.1 - Check Point Next Generation Firewall - -このラボでは、セキュリティ環境でファイアウォールを自動化する方法を紹介するために、Check Point Next Generaion Firewall (NGFW) を使用します。 - -NGFW は通常、直接管理するのではなく、中央セキュリティ管理サーバ(MGMT) を介して管理します。MGMT は、複数の NGFW や他のセキュリティ・ツールを一箇所で管理するためのツールです。 - -MGMTとのやりとりには複数の方法があります。私たちのラボでは、以下の2つの方法が重要になります。 - -- API: Ansible はほとんどの場合、API を使用して動作します。 -- Windows クライアント: ユーザーのインタラクションは Windows クライアントで行われます - -このラボでは、私たちが書くPlaybookはバックグラウンドでAPIと対話します。すべてのアクションは、WindowsクライアントのUIで検証されます。 - -## Step 2.2 - WindowsワークステーションからCheck Point MGMTサーバーにアクセスする - -MGMT サーバへのアクセスには Windows クライアントが必要であり、ラボの参加者全員が Windows 環境にアクセスできるとは限らないため、本ラボでは Windows ワークステーションを用意しています。 - -このWindowsワークステーションは、リモートデスクトッププロトコル(RDP)を介してアクセスすることができます。利用可能な場合は、ネイティブのRDPクライアントを使用することをお勧めします。使用できない場合でも、ラボの参加者がブラウザを介してワークステーションにアクセスできるように、ワークステーションには HTML RDPクライアントが用意されています。 - -RDP クライアントでインベントリにある `windows-ws` の IPアドレスを指定して、MGMT サーバへのアクセスを試してみてください。 + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoleInventory nameHostnameUsernamePassword
Ansible Control Hostansibleansible-1--
IBM QRadarqradarqradaradminAnsible1!
Attackerattackerattacker--
Snortsnortsnort--
Check Point Management Servercheckpointcheckpoint_mgmtadminadmin123
Check Point Gateway-checkpoint_gw--
Windows Workstationwindows-wswindows_wsadministratorProvided by Instructor
+
+

Note

+

+ The workshop includes preconfigured SSH keys to log into Red Hat Enterprise Linux hosts and don't need a username and password to log in.

+
+
+ +## ステップ 2.1 - Check Point Next Generation Firewall + +セキュリティー環境でファイアウォールを自動化する方法を紹介するため、このラボには Check Point Next Generation +Firewall (NGFW) が含まれます。 + +通常、NGFW は直接管理されず、中央のセキュリティー管理サーバー (MGMT) を介して管理されます。MGMT は、1 つのスポットで複数の NGFW +またはその他のセキュリティーツールを管理する主要なツールです。 + +MGMT と対話する方法は複数あります。このラボでは、以下の 2 つの方法が重要となります。 + +- API: Ansible は主に API と連携します。 - Windows クライアント: ユーザー対話は Windows +クライアントで行われます。 + +このラボでは、作成する Playbook はバックグラウンドで API と対話します。すべてのアクションは Windows クライアント UI +で検証されます。 + +## ステップ 2.2 - Windows ワークステーションを介した Check Point MGMT サーバーへのアクセス + +MGMT サーバーにアクセスするには Windows クライアントが必要ですが、ラボの受講者全員が Windows +環境にアクセスできるか確認できないため、このラボの一部として Windows ワークステーションをプロビジョニングしました。 + +Windows ワークステーションは Remote Desktop Protocol (RDP) +経由でアクセスすることができます。利用可能な場合は、ネイティブの RDP +クライアントを使用することを推奨しています。利用可能でない場合は、ラボの参加者がブラウザー経由でワークステーションにアクセスできるようにする HTML +RDP クライアントがワークステーションに搭載されています。 + +RDP クライアントをインベントリーの `windows-ws` IP にポイントして、MGMT サーバーへのアクセスをテストします。 + +RDP クライアントが利用できない場合や、HTML RDP クライアントをテストする必要がある場合は、ブラウザーで `https:///myrtille` の URL を開いてください。`` は、インベントリーの Windows ワークステーションの IP に置き換えます。ログインフィールドでは、ユーザー名とパスワードのみを指定します。ユーザー名は **Administrator** で、パスワードはインベントリーに記載されています。他のフィールドは空のままにして、**Connect** をクリックします。 + +これで、Google Chrome ブラウザーがインストールされたデフォルトの Windows ワークステーションにアクセスできるようになりました。 + +>**注記** +> +> ログインした直後に、画面の右側に、ネットワーク設定に関する幅広い青いバーが表示されることがあります。これは無視しても問題ありません。画面のどこかをクリックすると、この質問は非表示になります。 -RDPクライアントをお持ちでない場合や、HTMLのRDPクライアントをテストしたい場合は、以下のURL( `http:///myrtille` )をブラウザで開いてください。 -`` を、インベントリにある Windows ワークステーションの IPアドレスに置き換えてください。ログインフィールドには、ユーザ名とパスワードのみを入力してください。他に指示がなければ、ユーザ名は **Administrator**、パスワードはインベントリに記載されています。他のフィールドは空のままにして、**Connect** をクリックします。 +## ステップ 2.3: SmartConsole UI へのアクセス -Google Chromeブラウザがインストールされている状態で、デフォルトのWindowsワークステーションにアクセスできるようになりました。 +デスクトップアイコンから Check Point SmartConsole を起動します。以下のウィンドウでは、ユーザー名に `admin` +を使用し、パスワードに `admin123` を使用します (特に指示がない場合)。 -> **Note** -> -> ログイン後すぐに、画面の右側にネットワーク設定の青いバーが表示される場合があります。画面上のどこかをクリックすると非表示になりますが、これを無視しても問題ありません。 +オンラインエディターで **lab inventory** を開き、**firewall** +インベントリーグループを検索します。`checkpoint` エントリーがあるはずです。`ansible_host` IP アドレスを使用して +SmartConsole にログインします。 -## Step 2.3 - SmartConsole UIにアクセスする -デスクトップアイコンから Check Point SmartConsole を起動します。次のウィンドウでは、ユーザ名に `admin`、パスワードに `admin123` を指定します。入力するIPアドレスは、インベントリの **checkpoint** のものを使用します。 +![SmartConsole login window](images/smartconsole-login-window.png#centreme) -![SmartConsole login window](images/smartconsole-login-window.png) +**Login** ボタンを押します。その後、**PROCEED** ボタンをクリックして、サーバーのフィンガープリントを確認する必要があります。 -**Login** ボタンを押します。その後、**PROCEED** ボタンをクリックしてサーバーのフィンガープリントを検証する必要があります。 - -> **Note** +> **注記** > -> 本番環境では、まずサーバのフィンガープリントを把握し、表示されたフィンガープリントがサーバのものと同一であることを確認してから作業を進める必要があります。今回のデモ環境では、一時的なインスタンスを使用しているため、フィンガープリントは問題ないと推定することができます。 +> 実稼働環境では、まずサーバーのフィンガープリントを把握し、表示されたフィンガープリントがサーバーのものと同一であることを確認してから作業を進めることになります。短期間のインスタンスを使用したこのデモセットアップでは、フィンガープリントが良好であると想定できます。 -これで、Check Point SmartConsole の管理インターフェイスが表示されました。起動時に Internet Explorer の警告が表示される場合があります。これは、IEの動作に制限があるためで、安全に閉じることができます。 +これで Check Point SmartConsole 管理インターフェースが表示されます。起動時に Internet Explorer +の警告が表示される可能性があります。これは、IE の動作の制限によるもので、安全に閉じることができます。 -![SmartConsole main window](images/smartconsole-main-window.png) +![SmartConsole main window](images/smartconsole-main-window.png#centreme) -次に、左側の **SECURITY POLICIES** をクリックし、現在インストールされているルール(すべてのトラフィックをdropする)が1つだけあることを確認します。これで、Check Point の管理インターフェイスがおおよそどうなっているのかがわかりました。後でもっと深く触ることになりますが、まずはコマンドラインに戻って、Check Point を操作する Ansible Playbookの書き方を学びましょう。 +次に、左側で **SECURITY POLICIES** をクリックし、現在インストールされているルールは 1 つだけ +(すべてのトラフィックをドロップするルール) であることに注意してください。これで、管理インターフェースの観点から Check Point +がどのように見えるかについての概要がわかりました。Check Point との対話はもっとありますが、その前にコマンドラインに戻って、Check +Point と対話する Ansible Playbook の作成方法について学びます。 -## Step 2.4 - 最初のサンプルPlaybook +## ステップ 2.4 - 最初の Playbook の例 -Ansible では、自動化はPlaybookで記述されています。Playbook とは、管理されているホストに実装するために必要な設定や手順を記述したファイルです。Playbookは、長くて複雑な管理タスクを、予測可能で成功した結果が得られる簡単に再現可能なルーチンに変えることができます。 +Ansible Automation Platform では、自動化は Playbook で説明されています。Playbook +は、管理対象ホストに実装するための必要な設定またはステップを記述するファイルです。Playbook +は、長くて複雑な管理タスクを、簡単に反復できるルーチンに変え、結果を予測して成功させることができます。 -Playbookは、再実行可能な *Play* と *Task* のセットです。 +Playbook は、*plays* および *tasks* の反復可能なセットです。 -Playbook は複数の Play を持つことができ、Play は1つまたは複数の Task を持つことができます。Task は1つまたは複数の *Module* で構成され、Module は実際の作業を行うコンポーネントです。 +Playbook は複数のプレイを持つことができ、1 つのプレイは 1 つまたは複数のタスクを持つことができます。タスクは 1 つ以上の +*modules* で構成されており、モジュールは実際の作業を行うコンポーネントです。 -*Play* の目的はホストのグループをマップすることです。 *Task* の目標は、それらのホストに対して Module を実行することです。 +*play* の目的は、ホストのグループをマッピングすることです。*task* の目的は、それらのホストに対してモジュールを実装することです。 -Ansible にあまり慣れていない方は、以下の Playbook の例をご覧ください: +Ansible に慣れていない場合は、以下の Playbook の例を参照してください。 ```yaml --- @@ -90,17 +184,20 @@ Ansible にあまり慣れていない方は、以下の Playbook の例をご > **ヒント** > -> 例えるなら、Ansible Moduleが作業場にある工具だとすると、Inventoryは材料であり、Playbook は指示書です。 +> ここで、わかりやすい例えを紹介します。Ansible モジュールがワークショップのツールだとすると、インベントリーは材料で、Playbook は指示書になります。 -ここでは、Check Point の設定を変更するための Playbook を書いてみましょう。まず、ファイアウォールの設定に whiltelist エントリを追加して、特定のマシンから別のマシンへのトラフィックを許可する簡単な例から始めます。この例では、**attacker** というマシンから **snort** というマシンにトラフィックを送信できるようにします。 +次に、Check Point の設定を変更するための Playbook +を作成します。まずは、ファイアウォール設定にホワイトリストエントリーを追加して、特定のマシンから別のマシンにトラフィックを許可する簡単な例から始めます。この例では、**attacker** +というマシンから **snort** マシンへのトラフィック送信を許可します。 -Playbook は Ansible コントロールホスト上で書かれ、実行されます。Playbook の言語は [YAML](https://en.wikipedia.org/wiki/YAML) です。ブラウザでVS Codeのオンラインエディタにアクセスします。メニューバーの **File** -> **New File** をクリックします。新しい空のファイルが開きます。続ける前に、保存しておきましょう。メニューバーの **File** -> **Save As...** をクリックします。ドロップダウンメニューが開き、**lab_inventory** ディレクトリの **Untitled-1** というファイル名が表示されます。このファイル名を`whitelist_attacker.yml`に変更し、**lab_inventory** ディレクトリを削除して、絶対パスでのファイル名が `/home/student/whitelist_attacker.yml` となるようにしてください。`` には割り当てられた生徒IDが入ります。 +Playbook は Ansible コントロールホストで書かれ、実行されます。Playbook が書かれている言語は [YAML](https://en.wikipedia.org/wiki/YAML). です。ブラウザーで、VS Code のオンラインエディターにアクセスします。メニューバーで、**File** -> **New File** をクリックします。新しい空のファイルが開きます。続行する前にこれを保存しましょう。再びメニューバーで、**File** -> **Save As...** をクリックします。ドロップダウンメニューが開き、**lab_inventory** ディレクトリーにファイル名 **Untitled-1** が表示されます。これを `whitelist_attacker.yml` に変更し、**lab_inventory** ディレクトリーを削除して、完全なファイル名 `/home/student/whitelist_attacker.yml` が表示されるようにします。ここで、`` は、各自割り当てられた受講者 ID になります。 -> **Note** -> -> ファイルと今後のすべての操作は、常にホームディレクトリの **/home/student** で行われます。これは演習を適切に実行するために非常に重要です。 +> **注記** +> +> ファイルおよび今後のすべての操作は、常にホームディレクトリー **/home/student\** で実行するようにしてください。これは、演習を正しく実行する上で重要となります。 -ファイルを適切な場所に保存したら、Playbook のコードを追加することができます。まず、Playbook には名前と実行するホストが必要です。そこで、下記を追加してみましょう: +ファイルを適切な場所に保存したら、Playbook コードを追加することができます。まず、Playbook +には名前と実行するホストが必要です。では、これらを追加してみましょう。 ```yaml --- @@ -108,15 +205,19 @@ Playbook は Ansible コントロールホスト上で書かれ、実行され hosts: checkpoint ``` -3つのダッシュ(`---`)が先頭にあることを不思議に感じるかもしれませんが、これはYAMLファイルの先頭であることを表します。 +上部の 3 つのダッシュ (`---`) は、YAML ファイルの開始を示しています。 -> **Note** +> **注記** > -> Playbook 内で `hosts: all` を指定して再利用性を高め、後からコマンドラインや controller 経由で対象を制限するのは良い練習になります。しかし今のところは、Playbookのホストに直接ホスト名を指定することでプロセスを単純化しています。 +> Playbook を `hosts: all` にポイントして、後でコマンドラインまたは自動化コントローラーを介して実行を制限することにより、Playbook をより再利用可能にすることをお勧めします。しかし今のところは、Playbook で直接ホストに名前を付けることでプロセスを簡素化します。 -前述したように、この簡単な例ではホワイトリストのエントリを追加します。シンプルなホワイトリストのエントリは、送信元 IP アドレス、送信先 IP アドレス、およびそれらの間のアクセスを許可するルールで構成されています。 +前述したように、ここでは簡単な例としてホワイトリストエントリーを追加します。シンプルなホワイトリストエントリーは、送信元 IP アドレス、送信先 IP +アドレス、それらの間のアクセスを許可するルールで構成されています。 -このために、送信元と送信先のIPアドレスを変数として Playbook に追加します。Ansible はインベントリからすべてのマシンを把握し、IPアドレスはインベントリに記載されているので、それらの情報を対応するホストの [変数](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html) として参照すればよいだけです: +そのため、送信元と送信先の IP を変数として Playbook に追加します。Ansible はインベントリーからすべてのマシンを認識しており、IP +はインベントリーに記載されているため、これらの情報を対応するホストの +[variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html) +として参照することができます。 ```yaml @@ -130,19 +231,21 @@ Playbook は Ansible コントロールホスト上で書かれ、実行され ``` -ご覧のように、変数は中括弧でマークされています。2番目のプライベート IP を使用していることに注目してください。これらの IP はアプリケーショントラフィックのために FW を介して特別にルーティングされたネットワークに属しています。最初のプライベート IP は管理ネットワークに属します。変数は、Playbook を通して使用される別の(短い)変数を定義するために使用されます。これは、実行からデータを切り離すための一般的な方法です。 +ご覧のように、変数は中括弧で囲まれています。2 番目のプライベート IP +を使用していることに注意してください。これらは、アプリケーショントラフィックのために FW +を介して特別にルーティングされるネットワークに属しています。最初のプライベート IP +は、管理ネットワークに属しています。これらの変数は、それぞれがさらに別の (短い) 変数を定義するために使用され、Playbook +全体で使用されます。これは、データを実行から切り離すための一般的な方法です。 -> **Note** +> **注記** > -> 空白とインデントがこの資料に記述されている通りになっていることを確認してください。YAMLはインデントや空白に非常に敏感で、Playbook を実行する際のほとんどのエラーは間違ったインデントによるものです。 +> 空白文字とインデントが正確に表示されていることを確認してください。YAML はこの点に厳しく、Playbook の実行時のエラーの多くはインデントが間違っていることが原因です。 -次に、Task を追加する必要があります。tasks セクションは、ターゲットマシン上の実際の変更を行う場所です。今回は、以下の3つのステップを実行します: +次にタスクを追加する必要があります。タスクセクションでは、ターゲットマシン上での実際の変更が行われます。この場合、これは 3 つのステップで行われます。 -- 最初に、source オブジェクトを作成します -- 次に、destination オブジェクトを作成します -- 最後に、これら2つのオブジェクト間のアクセスルールを作成します +- 最初に、ソースオブジェクトを作成します。次に、宛先オブジェクトを作成します。最後に、これら 2 つのオブジェクト間のアクセスルールを作成します。 -まずは source オブジェクトを定義するところからはじめましょう: +ソースオブジェクトを定義するタスクから始めましょう。 ```yaml @@ -162,17 +265,17 @@ Playbook は Ansible コントロールホスト上で書かれ、実行され ``` -ご覧のように、Task 自体には名前があり、Module を参照しています(ここでは `checkpoint_hosts`)。 Module は Ansible の「変更を行う」部分で、ここでは Check Point のホストオブジェクトのエントリを作成したり、変更したりします。この Module にはパラメータがあり、ここでは `name` と `ip_address` を指定します。各 Module には個別のパラメータがあり、必須のものと任意のものがあります。モジュールに関する詳細な情報を確認するには、VSCodeでターミナルを開き、ヘルプを呼び出すことができます。メニューバーの **Terminal** > **New Terminal** をクリックして、以下のコマンドを実行します。すると、 `checkpoint_host` のヘルプが表示されます。 +ご覧のとおり、タスク自体にはプレイ自体と同様に名前が付いており、モジュールを参照しています (ここでは`checkpoint_host`)。モジュールは「それを実現する」 Ansible の一部です。この場合のモジュールは、CheckPoint でホストオブジェクトエントリーを作成または変更します。モジュールにはパラメーターがあり、`name` と `ip_address` がそれにあたります。各モジュールには個別のパラメーターがあり、多くの場合、パラメーターの中には必須のものとオプションのものがあります。モジュールに関する詳細な情報を得るには、VS Code オンラインエディタでターミナルを開き、ヘルプを呼び出すことができます。たとえば、メニューバーで **Terminal** > **New Terminal** をクリックし、以下のコマンドを実行します。これにより、モジュール `checkpoint_host` のヘルプが表示されます。 ```bash -[student@ansible ~]$ ansible-doc checkpoint_host +[student@ansible-1 ~]$ ansible-navigator doc checkpoint_host ``` -> **Tip** +> **ヒント** > -> `ansible-doc` では、`up`/`down` の矢印を使って内容をスクロールし、`q` を使って終了することができます。 +> `ansible-navigator` で、`up`/`down` の矢印を使用してコンテンツをスクロールし、`Esc` を使用して終了します。 -接続元IPアドレスのホストオブジェクトを定義したのと同じように、今度は接続先IPアドレスのホストオブジェクトを追加します: +ソース IP ホストオブジェクトを定義したのと同じ方法で、宛先 IP ホストオブジェクトを追加します。 ```yaml @@ -197,7 +300,12 @@ Playbook は Ansible コントロールホスト上で書かれ、実行され ``` -最後に、これら2つのホストオブジェクト間に実際のアクセスルールを定義します。ルールを実際に適用する必要がありますが、これには2つの方法があります。 Task 単位で、Module パラメータ `auto_install_policy: yes` で指定する方法と、`cp_mgmt_install_policy` モジュールで最終的な専用の Task として指定する方法です。この Playbook では、モジュラー方式の柔軟性を強調するために、両方を示しています。しかし、Module がすでに適用プロセスを開始している場合、最後のインストールポリシー Module が失敗する可能性があるので、起こりうるエラーを無視するための特別なフラグ `failed_when: false` を追加します: +最後に、これらの 2 つのホストオブジェクト間で、実際のアクセスルールを定義しています。ルールを適用する必要がありますが、これには 2 +つの方法があります。モジュールパラメーター `auto_install_policy: yes` +を介して示されるタスクごとのベースへの適用、またはモジュール `cp_mgmt_install_policy` +を持つ最終的な専用タスクとしての適用のいずれかになります。この Playbook +では、モジュール式アプローチの柔軟性を強調するために、どちらも紹介しています。ただし、モジュールがすでに適用プロセスを開始している場合、最後のインストールポリシーモジュールが失敗する可能性があるため、エラーの可能性を無視するための特別なフラグを追加しています(`failed_when: +false`)。 ```yaml @@ -239,20 +347,20 @@ Playbook は Ansible コントロールホスト上で書かれ、実行され ``` -## Step 2.5 - Playbookを実行する +## ステップ 2.5 - Playbook の実行 -Playbook はコントロールノードの `ansible-navigator` コマンドを使って実行します。新しい Playbook を実行する前に、構文エラーをチェックすることをおすすめします。VSCode オンラインエディタで、メニューバーの **Terminal** -> **New Terminal** をクリックします。ターミナルで、以下のコマンドを実行します: +Playbook は、コントロールノードで `ansible-navigator` コマンドを使用して実行されます。新しい Playbook を実行する前に、構文エラーを確認することが推奨されます。VS Code のオンラインエディターのメニューバーで、**Terminal** -> **New Terminal** をクリックします。ターミナルで以下のコマンドを実行します。 ```bash -[student@ansible ansible-files]$ ansible-navigator run --syntax-check --mode stdout whitelist_attacker.yml +[student@ansible-1 ~]$ ansible-navigator run whitelist_attacker.yml --syntax-check --mode stdout ``` -構文チェックではエラーが報告されないはずです。エラーが報告された場合は、出力をチェックし、Playbookを見直して問題を修正してみてください。 +構文チェックでは、エラーは報告されないはずです。エラーが報告された場合は出力を確認し、Playbook コードで問題の修正を試みてください。 -これで Playbook を実行する準備が整いました: +これで、Playbook を実行する準備が整いました。 ```bash -[student@ansible ansible-files]$ ansible-navigator run whitelist_attacker.yml +[student@ansible-1 ~]$ ansible-navigator run whitelist_attacker.yml --mode stdout PLAY [Whitelist attacker] ********************************************************* @@ -272,32 +380,47 @@ PLAY RECAP ********************************************************************* checkpoint : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -## Step 2.6 - UIで変更を確認する +## ステップ 2.6 - UI での変更の確認 -ここで、変更が本当に行われたかどうか、Check Point MGMTサーバの設定が変更されたかどうかを確認してみましょう。 +次に、この変更が実際に行われ、Check Point MGMT サーバーの設定が変更されたかどうかを確認します。 -Windows ワークステーションにアクセスし、SmartConsole インタフェースを開きます。右側の **Object Categories** の下の **Network Objects** をクリックし、**Hosts** を選択します。新しいホストエントリの両方がリストアップされているはずです。 +Windows ワークステーションにアクセスし、SmartConsole インターフェースを開きます。右側の **Object Categories** +の下で **Network Objects** をクリックしてから、**Hosts** を選択します。両方の新しいホストエントリーが表示されます。 -![SmartConsole Hosts list](images/smartconsole-hosts-list.png) +![SmartConsole Hosts list](images/smartconsole-hosts-list.png#centreme) -次に、左側の **SECURITY POLICIES** をクリックします。フィールドの中央にアクセス制御ポリシーのエントリが追加されていることを確認してください。トラフィックが許可されるようになったので、**Action** 列のエントリが変更され、色が変わっています。 +次に、左側の **SECURITY POLICIES** +をクリックします。フィールドの中央に追加されたアクセス制御ポリシーのエントリーに注目して、先ほど見たときと比較してください。トラフィックが許可されるようになったので、**Action** +列のエントリーが変更され、色が変わっています。 -![SmartConsole Policy Entries](images/smartconsole-policy-entry.png) +![SmartConsole Policy +Entries](images/smartconsole-policy-entry.png#centreme) -また、左下には、システム全体に変更が適用されたことを示す緑色のバーがあることにも注意してください。 +また、左下隅には、システム全体に変更が適用されることを示す緑色のバーが表示されていることに注意してください。 -## Step 2.7 - 新しいポリシーのロギングを有効化する +## ステップ 2.7 - 新しいポリシーのロギングをオンにする -Check Point の通常の手作業による操作でどのように変更が実行されるかを確認するために、後で便利な小さな変更を行ってみましょう。デフォルトでは、Check Point は新しいルールのロギングを有効にしません。新しいポリシーのロギングを有効にしてみましょう。メイン・ウィンドウの左側にある **SECURITY POLICIES** をクリックします。両方のルールがリストされています。列の **Track** で、新しく作成したルールの **None** エントリの上にマウスを置きます。その上で右クリックし、表示されるボックスで **Log** を選択します。 +Check Point との通常の手動対話で変更がどのように実行されるかを確認するには、後で便利な小さな変更を行います。デフォルトでは、Check +Point +は新しいルールのロギングをオンにしません。ここでは、新しいポリシーのロギングをアクティブ化してみましょう。メインウィンドウの左側で、**SECURITY +POLICIES** をクリックします。両方のルールが一覧表示されています。。**Track** 列で、新しく作成したルールの **None** +エントリー上にマウスをかざします。これを右クリックし、表示されるボックスで **Log** を選択します。 -![SmartConsole, change logging](images/smartconsole-change-logging.png) +![SmartConsole, change +logging](images/smartconsole-change-logging.png#centreme) -その後、ポリシーのリストの一番上にある **Install Policy** ボタンをクリックし、**Publish & Install** と表示されるダイアログを確認し、最後のダイアログで **Install** を再度クリックします。 +その後、ポリシー一覧の上部にある **Install Policy** ボタンをクリックして、**Publish & Install** +で開いたダイアログを確認し、最後のダイアログで **Install** を再度クリックします。 -その結果、左側に小さなウィンドウがポップアップし、変更の進捗状況を知らせてくれます。 +その結果、左隅に、変更のデプロイメントの進捗状況を通知する小さなウィンドウがポップアップします。 -ご覧のように、設定の小さな変更でも、ユーザーが何度もクリックする必要があります。これらのステップを自動化できたほうがよいですね。 +このように、設定を少し変更するだけでも、ユーザーは何度もクリックしなければなりません。これらのステップをより多く自動化できるほど、結果は良くなります。 +
---- -[Ansible Security Automation Workshopの表紙に戻る](../README.ja.md) +**Navigation** +

+[Previous Exercise](../1.1-explore/README.md) | [Next Exercise](../1.3-snort/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/1.3-snort/README.ja.md b/exercises/ansible_security/1.3-snort/README.ja.md index 5bdb87a13..78c8cc1ab 100644 --- a/exercises/ansible_security/1.3-snort/README.ja.md +++ b/exercises/ansible_security/1.3-snort/README.ja.md @@ -1,38 +1,116 @@ -# 演習 1.3 - 最初のSnort用のPlaybookを実行してみよう +# 演習 1.3 - 最初の Snort Playbook の実行 -**Read this in other languages**:
+**他の言語でもお読みいただけます**:
[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
-## Step 3.1 - Snort - -セキュリティ環境でネットワーク侵入検知および侵入防止システムを自動化する方法を紹介するために、このラボでは Snort IDS インスタンスの管理方法を説明します。Snort はネットワークトラフィックを分析し、与えられたルールセットと比較します。 -このラボでは、Red Hat Enterprise Linux マシンに Snort をインストールし、SSH 経由で RHEL ノードにアクセスすることで Ansible が Snort を操作します。 - -## Step 3.2 - Snortサーバーにアクセスする - -Snortに接続するためには、インストールされているマシンのIPアドレスを見つける必要があります。Snort マシンの IP アドレスは、インベントリファイル `~/lab_inventory/hosts` を調べることで取得できます。VS Code のオンラインエディタで、メニューバーの **File** > **Open File...** をクリックして、ファイル `/home/student/lab_inventory/hosts` を開きます。snort のエントリを検索して、以下のようなエントリを見つけてください: + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoleInventory nameHostnameUsernamePassword
Ansible Control Hostansibleansible-1--
IBM QRadarqradarqradaradminAnsible1!
Attackerattackerattacker--
Snortsnortsnort--
Check Point Management Servercheckpointcheckpoint_mgmtadminadmin123
Check Point Gateway-checkpoint_gw--
Windows Workstationwindows-wswindows_wsadministratorProvided by Instructor
+
+

Note

+

+ ワークショップには、Red Hat Enterprise Linux ホストにログインするための事前設定された SSH キーが含まれているので、ログイン用のユーザー名とパスワードは必要ありません。

+
+
+ +## ステップ 3.1 - Snort + +セキュリティー環境でのネットワーク侵入検出および侵入防止システムを自動化する方法を紹介するために、このラボでは、Snort IDS +インスタンスの管理について説明します。Snort はネットワークトラフィックを分析し、これを特定のルールセットと比較します。このラボでは、Snort は +Red Hat Enterprise Linux マシンにインストールされ、Ansible は SSH 経由で RHEL +ノードにアクセスして対話します。 + +## ステップ 3.2 - Snort サーバーへのアクセス + +Snort インストールに接続するには、インストールされているマシンの IP アドレスを確認する必要があります。続いて、Snort マシンの IP アドレスを取得するには、インベントリーファイル `~/lab_inventory/hosts` に関する情報を検索します。VS Code のオンラインエディターで、メニューバーの **File** > **Open File...** をクリックして `/home/student/lab_inventory/hosts` ファイルを開き、以下のような snort のエントリーを検索して確認します。 ```bash snort ansible_host=22.333.44.5 ansible_user=ec2-user private_ip=172.16.1.2 ``` -> **NOTE** +> **注記** > -> ここに記載されているIPアドレスはデモ用のものであり、あなた用のものとは異なります。あなたのラボ環境には、あなた専用のSnort環境が用意されています。 +> ここに記載されている IP アドレスはデモ目的のもので、お客様のケースとは異なります。お使いのラボ環境には、専用の Snort セットアップがあります。 -IPアドレスを見つけたら、Snortサーバにアクセスします。接続には、コントロールホストにプリインストールされているSSHキーを使用します。VS Code のオンラインエディタでターミナルを開き、Snortサーバにアクセスします: +Snort サーバーへの接続は、制御ホストに事前にインストールされた SSH 鍵を使用します。Snort サーバーのユーザーは `ec2-user` +です。VS Code のオンラインエディターでターミナルを開き、以下のように snort サーバーにアクセスします。 ```bash -[student@ansible ~]$ ssh ec2-user@22.333.44.5 +[student@ansible-1 ~]$ ssh ec2-user@snort Warning: Permanently added '22.333.44.5' (ECDSA) to the list of known hosts. Last login: Mon Aug 26 12:17:48 2019 from h-213.61.244.2.host.de.colt.net -[ec2-user@ip-172-16-1-2 ~]$ +[ec2-user@snort ~]$ ``` -Snortが正しくインストールされ設定されているかどうかを確認するには、sudo経由で呼び出してバージョンを確認することができます: +snort が正しくインストールされ、設定されていることを確認するには、sudo で呼び出してバージョンを要求します。 ```bash -[ec2-user@ip-172-16-1-2 ~]$ sudo snort --version +[ec2-user@snort ~]$ sudo snort --version ,,_ -*> Snort! <*- o" )~ Version 2.9.13 GRE (Build 15013) @@ -44,10 +122,10 @@ Snortが正しくインストールされ設定されているかどうかを確 Using ZLIB version: 1.2.7 ``` -また、`sudo systemctl` でサービスがアクティブに動作しているか確認してください: +また、サービスが `sudo systemctl` 経由でアクティブに実行されているかどうかを確認します。 ```bash -[ec2-user@ip-172-16-1-2 ~]$ sudo systemctl status snort +[ec2-user@snort ~]$ sudo systemctl status snort ● snort.service - Snort service Loaded: loaded (/etc/systemd/system/snort.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2019-08-26 17:06:10 UTC; 1s ago @@ -57,107 +135,122 @@ Snortが正しくインストールされ設定されているかどうかを確 [...] ``` -> **NOTE** +> **注記** > -> Snort サービスが起動していないことがあります。このデモ環境では問題ありませんが、その場合は `systemctl restart snort` で再起動してもういちど状態を確認してください。実行状態になっているはずです。 +> snort サービスが実行されていない可能性があります。このデモ環境では問題ありませんが、もし実行されていない場合は、`systemctl restart snort` で再起動し、再度ステータスを確認してください。実行されているはずです。 -`CTRL` と `D` を押すか、コマンドラインで `exit` と入力して Snort サーバを終了します。これ以降の操作はすべて Ansible コントロールホストから Ansible を介して行われます。 +Snort サーバーを終了するには、`CTRL` および `D` を押すか、コマンドラインで `exit` +と入力します。追加の対話はすべて、Ansible コントロールホストから Ansible 経由で行われます。 -## Step 3.3 - シンプルなSnortルール +## ステップ 3.3: Snort の簡単なルール -Snortのもっとも基本的な機能として、Snort はいくつかのルールを読み込んで、それに従って動作します。このラボでは、Snort の簡単な例を使って、Ansible を使ってこの設定を自動化する方法を紹介します。このセッションでは、Snort のルールの詳細や、大規模なセットアップに伴う複雑さまで体験することはできませんが、シンプルなルールの基本的な構造を理解することで、自分が何を自動化しているのかを意識するのに役立ちます。 +最も基本的なキャパシティーでは、Snort はいくつかのルールを読み取り、それらに従って動作することで機能します。このラボでは、Snort +の簡単な例を使用して、Ansible でこの設定を自動化する方法を紹介します。このセッションは、Snort +ルールの詳細や大規模な設定に伴う複雑さについては扱いませんが、簡単なルールの基本構造を理解することで、何を自動化するのかを認識することができます。 -ルールは、ルールヘッダーとルールオプションで構成され、ファイルに保存されます。 +ルールはルールヘッダーとルールオプションで構成され、ファイルに保存されます。 -Snortのルールヘッダーは以下のように分かれています: +Snort のルールヘッダーは以下のように分かれています。 -- アクション -- TCP のような対象のプロトコル -- IPアドレスやポートなどの接続元情報 -- IPアドレスやポートなどの接続先情報 +- アクション - TCP などを探すプロトコル - IP やポートなどのソース情報 - IP やポートなどの宛先情報 -Snortルールのオプションは、`;`で区切られたキーワードで、以下のように指定することができます: +Snort ルールオプションは `;` で区切られたキーワードで、以下のようになります。 -- ルールがマッチしたときに出力するメッセージ -- ルールの一意の識別子であるSID -- 疑わしい文字列などのパケットペイロードの中で検索するコンテンツ -- バイナリデータをチェックするためのバイトテスト -- ルールのリビジョン -- 「priority」と呼ばれる攻撃の深刻度 -- 他のルールとよりよくグループ化するための「classtype」と呼ばれるあらかじめ定義された攻撃タイプ -- その他 +- ルールが一致するときに出力するメッセージ - SID (ルールの一意識別子)、パケットペイロードで検索するコンテンツ (疑わしい文字列など) - +バイナリーデータを確認するバイトテスト - ルールのリビジョン - "priority" と呼ばれる攻撃の重大度 - +ルールを他のルールとより適切にグループ化するための "classtype" と呼ばれる事前に定義された攻撃タイプ - その他。 -すべてのオプションが必須というわけではなく、既存のデフォルト値を上書きするだけのものもあります。 +すべてのオプションが必須ではなく、既存のデフォルト値を上書きするだけのものもあります。 -Snortルールの概要は以下の通りです: +Snort ルールの概要は以下のようになります。 ``` [action][protocol][sourceIP][sourceport] -> [destIP][destport] ( [Rule options] ) ``` -Snortのルールについて詳しく知りたい場合は、[Snort Rule Infographic](https://www.snort.org/documents/snort-rule-infographic)や、[Snort Users Manual (PDF)](https://www.snort.org/documents/snort-users-manual)をご覧ください。実際の Snort ルールを見たい場合は、ラボの Snort インストールにアクセスして `/etc/snort/rules` ディレクトリの内容を見ることもできます。 - -## Step 3.4 - Playbookの例 - - 前述したように、Ansible の自動化は Playbook で記述されています。Playbook は Task で構成されています。各Taskは、Module とModule に対応するパラメータを使用して、実行する必要のある変更や望ましい状態を記述します。 +Snort ルールの詳細は、[Snort Rule +Infographic](https://www.snort.org/documents/snort-rule-infographic) または +Snort Users Manual +(PDF)](https://www.snort.org/documents/snort-users-manual). を確認してください。また、実際の +Snort のルールを確認したい場合は、ラボの Snort インストールにアクセスして、`/etc/snort/rules` +ディレクトリーの内容を見ることもできます。 -Ansible のリリースには Module が同梱されていますが、Ansible 2.9 では Snort と対話するためのモジュールはまだありません。このため、Snortを管理するためのモジュール群を書きました。このようにして、新しいAnsibleのリリースを待たずに価値を提供することができます。また、Moduleの更新作業も早くなりました。これは、新しく開発されたModuleの初期の段階では特に重要です。 +## ステップ 3.4: Playbook の例 -これらのSnort Moduleは「Role」の一部として出荷されます。Role をよりよく記述するために、最後のセクションで自分の Playbook をどのように書いたかを考えてみましょう。以前行ったように1つのファイルに Playbook を書くことは可能ですが、多くの場合ですべての自動化のピースを1つの場所に書くことは、長くて複雑な Playbook をつくることになります。一方で、最終的にPlaybook に書いた自動化の部品を再利用したくなる場合もあります。したがって、複数のより小さく、よりシンプルな Playbook が一緒に動作するように整理する必要があります。Roleは、それを実現する方法です。Roleを作成するときは、プレイブックを部品に分解し、それらの部品をディレクトリ構造に配置します。 +前述したように、Ansible の自動化については Playbook で説明されています。Playbook はタスクで構成されています。各タスクは、モジュールとモジュールの対応するパラメーターを使用して、必要な変更や、必要な状態を記述します。 -Role を使って自動化を実施することには、複数のメリットがあります。最も注目すべきは、複雑さとプレイブックのインテリジェンスがユーザーから隠されていることです。もう一つの重要な利点は、Role を簡単に共有して再利用できることです。 +Ansible リリースにはモジュールのセットが同梱されていますが、Ansible Core 2.11 には、Snort +と対話するためのモジュールがまだありません。このため、Snort を管理するためのモジュールのセットを作成し、`security_ee` +実行環境に含めました。実行環境を使用すると、モジュールの更新時間が短縮されます。これは、新たに開発されたモジュールの初期段階で特に重要です。 -Snortのユースケースに戻ります。前述の通り、Snort Module は Role の一部として出荷されます。このRoleは[ids_rule](https://github.com/ansible-security/ids_rule)と呼ばれています。WebブラウザでGithubリポジトリのリンクを開き、[library](https://github.com/ansible-security/ids_rule/tree/master/library)のパスをクリックします。そこには `snort_rule.py` という Module があります。この Module は ids_rule Role の一部として出荷され、snort ルールを作成したり変更したりすることができます。 +これらの Snort モジュールは "role" の一部として同梱されます。ロールをよりよく説明するには、最後のセクションで Playbook +をどのように書いたかを考えてみましょう。Playbook は以前のように 1 つのファイルに書くことができますが、多くの場合、すべての自動化部分を 1 +つの場所に書くと、長くて複雑な Playbook が作成されます。ある時点で、すでに Playbook +に書いた自動化コンテンツを再利用したくなるでしょう。したがって、複数の小さな Playbook +を組み合わせて連携させるためには、これらを整理する必要があります。これを実現する方法が Ansible ロールです。ロールを作成すると、Playbook +が複数のパーツに分けられ、それらのパーツはディレクトリー構造に置かれます。 -Role を詳しく見てみると、[tasks/snort.yml](https://github.com/ansible-security/ids_rule/blob/master/tasks/snort.yml)に再利用可能な Playbook が付属していることがわかります。 +ロールを使用して自動化を作成する利点は複数あります。最も注目すべき点は、複雑さと Playbook +のインテリジェンスがユーザーから非表示になっていることです。もう 1 つの重要な利点は、ロールを簡単に共有して再利用できることです。 -この Playbook がどのように書き換えてRoleを直接使えるようになるか見てみましょう。まず、コントロールホストに Role をダウンロードしてインストールする必要があります。これには様々な方法がありますが、非常に便利なのは `ansible-galaxy` というコマンドラインツールです。このツールは、アーカイブやGitのURL、[Ansible Galaxy](https://galaxy.ansible.com)から直接Roleをインストールします。Ansible Galaxy は、Ansible のコンテンツを見つけて共有するためのコミュニティハブです。レーティング、品質テスト、適切な検索などの機能を提供しています。例えば、上記のRoleはAnsible Galaxyの[ansible_security/ids_rule](https://galaxy.ansible.com/ansible_security/ids_rule)にあります。 +Snort の使用例に戻ります。前述のように、Snort モジュールはロールの一部として出荷されます。このロールは +[ids_rule](https://github.com/ansible-security/ids_rule). と呼ばれます。Web ブラウザーで +Github +リポジトリーのリンクを開き、[library](https://github.com/ansible-security/ids_rule/tree/master/library) +パスをクリックします。そこには、モジュール `snort_rule.py` があります。`ids_rule` +ロールの一部として出荷されたこのモジュールは、snort のルールを作成および変更することができます。 -コマンドラインでは、`ansible-galaxy` ツールを使って `ids_rule` Role をダウンロードしてインストールすることができます。VSCodeオンラインエディタのターミナルで以下のコマンドを実行します: - -```bash -[student@ansible ~]$ ansible-galaxy install ansible_security.ids_rule -- downloading role 'ids_rule', owned by ansible_security -- downloading role from https://github.com/ansible-security/ids_rule/archive/master.tar.gz -- extracting ansible_security.ids_rule to /home/student/.ansible/roles/ansible_security.ids_rule -- ansible_security.ids_rule (master) was installed successfully -``` +ロールの詳細を確認すると、[tasks/snort.yml](https://github.com/ansible-security/ids_rule/blob/master/tasks/snort.yml). +に再利用可能な Playbook が付属していることがわかります。 +ここでは、この Playbook を書き換えて、ロールを直接使用する方法を見てみましょう。前述の通り、`ids_rule` ロールは +`security_ee` 実行環境にバンドルされています。 -ご覧のように、Role はデフォルトパスである `~/.ansible/roles/` にインストールされ、プレフィックスとして `ansible_security` が付けられています。これは、このラボで使用しているものなど、security roleに使用されるプロジェクトの名前です。 - -Role がコントロールホストにインストールされているので、Playbook で使用することができます。Role を使用するためには、VSCodeのオンラインエディタで `add_snort_rule.yml` という名前の新しいファイルを作成します。これをユーザのホームディレクトリに保存し、`Add Snort rule`という名前と対象となるホストを追加します。Snort上で変更を行うにはroot権限が必要なので、`become`フラグを追加して、Ansibleが特権昇格に対処できるようにします。 +ロールを使用するには、オンラインエディターで `add_snort_rule.yml` +という名前の新しいファイルを作成します。これをユーザーのホームディレクトリーに保存して、名前 `Add Snort rule` とターゲットホストを +`snort` に追加します。Snort で変更を行うために root 権限が必要なため、Ansible が権限昇格を処理するように `become` +フラグを追加します。 ```yaml --- - name: Add Snort rule hosts: snort - become: yes + become: true ``` -次に、Playbookに必要な変数を追加する必要があります。私たちが使用しているRoleは、複数のIDSプロバイダで動作するように書かれています。ユーザが提供する必要があるのはIDSの名前だけで、Roleは残りの部分を担当します。Snort IDSを管理しているので、`ids_provider` 変数の値を `snort` に設定する必要があります。 +次に、Playbook で必要な変数を追加する必要があります。使用するロールは、複数の IDS プロバイダーと連携できる方法で書かれており、ユーザーが +IDS の名前を入力するだけで、あとはロールが処理してくれます。ここでは Snort IDS を管理しているので、`ids_provider` +変数の値を `snort` に設定する必要があります。 ```yaml --- - name: Add Snort rule hosts: snort - become: yes + become: true vars: ids_provider: snort ``` -次に、Taskを追加する必要があります。Taskは、ターゲットマシン上で実際の変更を行うコンポーネントです。Roleを使用しているので、Taskの `include_role` を使ってシンプルな手順でPlaybookに追加することができます。私たちのユースケースに適したRoleを作るために、以下のTask固有の変数を追加します: +次にタスクを追加する必要があります。タスクはターゲットマシンで実際の変更を加えるコンポーネントです。ここではロールを使用しているため、タスクの中の 1 +つのステップ `include_role` を使用するだけで、Playbook に追加することができます。 + +>注記 +> +> Ansible `include_role` モジュールは、指定されたロールをタスクとして動的に読み込み、実行します。詳細は、 [include_role documentation](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/include_role_module.html) を参照してください. + + +ここでは、`include_role` モジュールを使用して `ids_rule` ロールを使用します。 -- 実際のルール定義 -- Snortのルールファイル -- ルールの状態(present/absent) +ユースケースに適したロールにするためには、以下のタスク固有の変数を追加します。 + +- 実際のルール - Snort ルールファイル (present または absent のルールの状態) ```yaml --- - name: Add Snort rule hosts: snort - become: yes + become: true vars: ids_provider: snort @@ -172,17 +265,18 @@ Role がコントロールホストにインストールされているので、 ids_rule_state: present ``` -ルールヘッダは `alert tcp any any -> any any any` となっているので、任意のソースから任意の宛先への tcp トラフィックのアラートを作成します。 -ルールオプションは、ルールがマッチした際の人間が読めるSnortメッセージを定義します。これは `content` の専門化されたバージョンであり、URIの解析を簡単にします。`classtype` は `attempted-user` に設定され、これは「ユーザの特権獲得の試み」のデフォルトクラスです。SIDは、ユーザー定義のルールに十分な高い値が設定されています。優先度は `1` で、最後にこれはこのルールの最初のバージョンなので、リビジョンを `1` に設定します。 +ここで何が起こっているのかを簡単に見てみましょう。ルールヘッダーは `alert tcp any any -> any any` なので、任意のソースから任意の宛先に tcp トラフィックに対するアラートを作成します。 +ルールオプションは、ルールが一致した場合に、人間が判読できる Snort メッセージを定義します。`uricontent` は、`content` の特殊バージョンで、URI の分析を容易にします。`classtype` は、"attempted user privilege gain" のデフォルトクラスである `attempted-user` に設定されます。SID は、ユーザー定義のルールに十分な高い値に設定されています。優先順位は `1` で、最後に、このルールの最初のバージョンであるため、リビジョンを `1` に設定します。 -他の変数 `ids_rules_file` と `ids_rule_state` は、ユーザ定義のルールファイルの場所を指定し、ルールがまだ存在しない場合にはルールを作成すべきであることを示します(`present`)。 +他の変数 `ids_rules_file` および `ids_rule_state` +は、ルールファイルのユーザー定義の場所を提供し、ルールが存在しない場合にルールを作成する必要があることを示します(`present`)。 -## Step 3.5 - Run the playbook +## ステップ 3.5: Playbook の実行 -いよいよPlaybookを実行する時が来ました。Playbook名を指定して `ansible-navigator` を実行します: +VS Code のオンラインエディターで、Playbook を実行します。ターミナルで以下のコマンドを実行します。 ```bash -[student1@ansible ~]$ ansible-navigator run add_snort_rule.yml +[student1@ansible-1 ~]$ ansible-navigator run add_snort_rule.yml --mode stdout PLAY [Add Snort rule] ***************************************************************** @@ -217,25 +311,25 @@ PLAY RECAP ********************************************************************* snort : ok=4 changed=2 unreachable=0 failed=0 skipped=4 rescued=0 ignored=0 ``` -このPlaybookを実行するとわかるように、ルールの追加とともに実行されるTaskがたくさんあります。たとえば、ルールが追加された後、RoleはSnortサービスをリロードします。その他のTaskでは、変数の定義と検証を確実に行います。 -これは、Roleを使うことの価値を改めて強調しています。Roleを活用することで、コンテンツを再利用可能なものにするだけでなく、検証Taskなどの重要なステップを追加し、Roleの中にすっきりと隠しておくことができます。このRoleのユーザは、セキュリティ自動化の一部としてこのRoleを使用するために、Snortがどのように動作するか詳細を知る必要がありません。 +この Playbook の実行時に分かるように、ルールの追加に加えて多数のタスクが実行されます。たとえば、ロールは、ルールの追加後に Snort +サービスを再読み込みします。その他のタスクでは、変数の定義と検証が行われることを確認します。 -## Step 3.6 - 変更を検証する +このことからも、ロールを使用することの価値がわかります。ロールを活用することで、コンテンツを再利用できるようになるだけでなく、検証タスクやその他の重要なステップを追加して、それらをロールの中にきちんと隠しておくことができます。このロールのユーザーは、セキュリティー自動化の一環としてこのロールを使用するために、Snort +の仕組みの詳細を知る必要はありません。 -ルールが正しく書かれているかどうかを確認する簡単な方法は、SnortサーバにSSHして `/etc/snort/rules/local.rules` ファイルの内容を確認することです。 +## ステップ 3.6: 変更の確認 -もう一つの方法は、コントロールホストでAnsibleを使用することです。これを行うには、別の Roleを使用してSnortルールがあるかどうかを確認します。[ids_rule_facts](htithub.com/ansible-security/ids_rule_facts)というRoleは、Snortの既存のルールを検索して見つけます。 -このRoleを使うには、先ほどと同じように `ansible-galaxy` を使ってインストールします: +ルールが正しく書き込まれたかどうかを確認する簡単な方法は、Snort サーバーに SSH +で接続し、`/etc/snort/rules/local.rules` ファイルの内容を確認することです。 -```bash -[student@ansible ~]$ ansible-galaxy install ansible_security.ids_rule_facts -- downloading role 'ids_rule_facts', owned by ansible_security -- downloading role from https://github.com/ansible-security/ids_rule_facts/archive/master.tar.gz -- extracting ansible_security.ids_rule_facts to /home/student1/.ansible/roles/ansible_security.ids_rule_facts -- ansible_security.ids_rule_facts (master) was installed successfully -``` +もう 1 つの方法は、コントロールホストで Ansible を使用することです。そのためには、Snort +のルールがあるかどうかを検証するために、別のロールを使います。このロールは Snort +で既存のルールを検索し、[ids_rule_facts](http://github.com/ansible-security/ids_rule_facts). +と呼ばれます。このロールは、`security_ee` 実行環境に含まれています。 -VSCodeのオンラインエディタで、`verify_attack_rule.yml`というPlaybookを作成します。Playbookの名前を「Verify Snort rule」などに設定します。hosts、IDSプロバイダの変数、`become`フラグの値は、前回のPlaybookと同じように設定することができます。 +VS Code のオンラインエディターで、Playbook `verify_attack_rule.yml` +を作成し、これを使用します。Playbook の名前を "Verify Snort rule" などのように設定します。ホスト、IDS +プロバイダー変数、および `become` フラグの値は、以前の Playbook と同じ値に設定できます。 ```yaml --- @@ -247,7 +341,9 @@ VSCodeのオンラインエディタで、`verify_attack_rule.yml`というPlayb ids_provider: snort ``` -次に、`ids_rule_facts` Role をインポートします。また、探しているルールを特定するための検索文字列を提供する必要があります。この例では、作成したルールを考慮すると、この目的では `uricontent` ルールオプションを使用するのがよいでしょう。 +次に、ロール `ids_rule_facts` +をインポートします。また、検索文字列を指定して、検索するルールを識別する必要があります。この例では、作成したルールを考慮すると、`uricontent` +ルールオプションをこの目的で使用することが理にかなっています。 ```yaml --- @@ -265,8 +361,13 @@ VSCodeのオンラインエディタで、`verify_attack_rule.yml`というPlayb vars: ids_rule_facts_filter: 'uricontent:"/etc/passwd"' ``` +>注記 +> +> Ansible `import_role` タスクは、ロールを読み込み、プレイの他のタスク間でロールタスクが実行されるタイミングを制御できます。詳細は、[import_role documentation](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/import_role_module.html) を参照してください。 -そして何よりも、実際に発見されたものを見られるようにしたいです。ids_rule_facts` は収集したデータを Ansible のFactとして保存します。Ansible のFactは、個々のホストに固有の情報であり、更なるTaskで使用することができます。そこで、これらのFactを出力するための別のTaskを追加します。 +そして最も重要なのは、実際に見つかったものを確認できるようにすることです。`ids_rule_facts` は、収集したデータを Ansible +ファクトとして保存します。Ansible +ファクトは、個々のホストに固有の情報であり、今後のタスクで利用することができます。そこで、これらのファクトを出力するために、別のタスクを追加します。 ```yaml --- @@ -289,10 +390,10 @@ VSCodeのオンラインエディタで、`verify_attack_rule.yml`というPlayb var: ansible_facts.ids_rules ``` -では、Playbookを実行して、ルールがSnortインストールの一部であることを確認してみましょう: +次に、Playbook を実行して、ルールが Snort インストールに含まれていることを確認します。 ```bash -[student@ansible ~]$ ansible-navigator run verify_attack_rule.yml +[student@ansible-1 ~]$ ansible-navigator run verify_attack_rule.yml --mode stdout PLAY [Verify Snort rule] ************************************************************** @@ -312,10 +413,14 @@ PLAY RECAP ********************************************************************* snort : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 ``` -最後のタスクは、Roleで見つけたルールを出力します。見ての通り、以前に追加したルールです。 +最後のタスクは、ロールによって見つかったルールを出力します。ご覧のように、以前に追加したのはルールです。 -おめでとうございます!これで Ansible で Snort を自動化する最初のステップが完了しました。演習の概要に戻り、次のステップに進みます。 +おめでとうございます。Ansible で Snort を自動化する最初のステップを完了しました。演習の概要に戻り、次のステップに進みます。 ---- -[Ansible Security Automation Workshopの表紙に戻る](../README.ja.md) +**Navigation** +

+[Previous Exercise](../1.2-checkpoint/README.md) | [Next Exercise](../1.4-qradar/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/1.4-qradar/README.ja.md b/exercises/ansible_security/1.4-qradar/README.ja.md index ae83baaa5..6da9267f3 100644 --- a/exercises/ansible_security/1.4-qradar/README.ja.md +++ b/exercises/ansible_security/1.4-qradar/README.ja.md @@ -1,309 +1,343 @@ -# Exercise 1.4 - 最初の IBM QRadar playbook の実行 - -**Read this in other languages**:
-[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
- -## Step 4.1 - IBM QRadar - -セキュリティ環境で SIEM を自動化する方法を紹介するために、このラボでは、[IBM QRadar SIEM, community edition](https://developer.ibm.com/qradar/ce/) が含まれています。 - -SIEM には、Web UI および REST API を介してアクセスすることができます。このラボでは、私たちが作成する Playbook はバックグラウンドで API と対話します。すべてのアクションは Web UI で検証されます。 - -## Step 4.2 - Web UI にアクセスする - -最初に SIEM を見て、実際に動作していることを確認してください。Web ブラウザから `https://` にアクセスします。`` はインベントリの `siem` セクションにある `qradar` エントリの IP アドレスです。次に、証明書は自己署名されているため安全ではないという警告が表示されます。これを受け入れて次に進んでください。 - -> **Note** -> -> 本番環境では、安全でない証明書を受け入れることはできません。ラボのセットアップは短命であり、デモを目的としているだけなので、この場合のリスクを受け入れます。 - -ログインフィールドに、他に指示が無ければ、ユーザー名: **admin** とパスワード: **Ansible1!** を入力し、**login**ボタンを押します。 - -これで IBM QRadar のメイン Web インターフェイスが表示されます。 - -![QRadar main window](images/qradar-main-window.png) - -QRadar と基本的な概念を理解するために、インターフェースを簡単に見てみましょう。上部には、QRadar の主要部分への複数のエントリー・ポイントがあるナビゲーション・バーがあります。 - -- **Dashboard**, 概要の一覧を表示 -- **Offenses**, モニタリングにより生成されたイベントやメッセージの確認 -- **Log Activity**, ログソースから収集したイベントの確認 -- **Network Activity**, 特定ホスト間のネットワークトラフィックの確認 -- **Assets**, 環境内のネットワークデバイスとホストのプロファイルを自動的に作成 -- **Reports**, カスタマイズされたレポートや標準レポートを使用して、環境で何が起こっているかのレポート - -デモのために、**Offenses** を詳しく見てみましょう: メニュー項目をクリックします。新しいウィンドウの左側に、違反をフィルタリングするためのナビゲーションバーが表示されます。 - -![QRadar offense window](images/qradar-offense-window.png) - -> **Note** -> -> デモ環境のため、Offense のリストは現在空になっている可能性があります。 - -Offense は、悪意のあるログ行のようなログメッセージやネットワークトラフィックの発見に基づいて生成されるメッセージやイベントのことです。QRadar はルールに基づいて Offense をトリガーします。ルールには条件が記述されており、条件が満たされると Offense が発生します。 - -公式ドキュメントの説明は以下です: - -> *相関ルールと呼ばれることもあるルールは、異常を検索または検出するために、イベント、フロー、または Offense に適用されます。テストのすべての条件が満たされた場合、ルールはレスポンスを生成します。([QRadar ドキュメント](https://www.ibm.com/support/knowledgecenter/en/SS42VS_7.3.2/com.ibm.qradar.doc/c_qradar_rul_mgt.html))* - -本番環境では、時間の経過とともにカスタムルールを作成していくのが一般的です。ただしここでは、システムにすでにインストールされているルールを見てみます: **Offenses** ウィンドウの左側のナビゲーションバーから **Rules** をクリックします。ルールの長いリストが表示されます。このリストの上部にある検索バーに、次の検索キーワードを入力してください: `DDoS`。リストをフィルタリングするには、その後に Enter キーを押してください。 - -リストはフィルタリングされており、DDoS に関連するいくつかのルールのみが表示されます。 - -![QRadar, filtered rules list](images/qradar-offenses-rules.png) - -**"Potential DDoS Against Single Host (TCP)"** をクリックしてください。これは、この演習の後に関連しています。 - -QRadar を一目見たところで、次は Ansible でどのように自動化できるかを見てみます。 - -## Step 4.3 - QRadar モジュールと Ansible collections - -最も基本的なレベルでは、Ansible の自動化はタスクを実行します。これらのタスクはモジュールを実行し、通常は特別なデバイスやプログラムの API エンドポイントのような対応するターゲットで動作します。 - -Ansible には多くのモジュールが付属しています。しかし、この記事を書いている時点では、Ansible は QRadar モジュールを提供していません。代わりに、それらのモジュールは [Ansible collections](https://docs.ansible.com/ansible/devel/dev_guide/collections_tech_preview.html) として提供されています: - -> *Collections は Ansible コンテンツの配布フォーマットです。Collections は、Playbook 、Role 、Module 、および Plugin をパッケージ化して配布するために使用できます。Ansible Galaxy を通じて Collections を公開して使用することができます。* - -Collections は、Ansible のコンテンツを提供するためのシンプルなディレクトリ構造に従っています。ここで Ansible の Role を思い出すかもしれませんが、これには理由があります。Collections は Role の概念に基づいて構築されていますが、その概念を一般的な Ansible コンテンツ管理にまで拡張しています。IBM QRadar 用のコレクションは [ansible-security project](https://github.com/ansible-security/ibm_qradar) にあります。 - -Role と同様に、Collections も使用する前に最初にインストールする必要があります。これらは Ansible を実行しているマシンにインストールされますが、ラボの場合はこれがコントロールホストです。 - -QRadar module の Collection をコントロールホストにインストールします。VS Code Online エディタで新しいターミナルを開きます。コマンド `ansible-galaxy collection --help` を実行して、Collections 機能が正しく動作していることを確認します: - -```bash -[student@ansible ~]$ ansible-galaxy collection --help -usage: ansible-galaxy collection [-h] COLLECTION_ACTION ... - -positional arguments: - COLLECTION_ACTION - init Initialize new collection with the base structure of a - collection. - build Build an Ansible collection artifact that can be publish - to Ansible Galaxy. - publish Publish a collection artifact to Ansible Galaxy. - install Install collection(s) from file(s), URL(s) or Ansible - Galaxy - -optional arguments: - -h, --help show this help message and exit -``` - -これを念頭に置いて、`ibm.qradar` Collections をインストールします: - -```bash -[student@ansible ~]$ ansible-galaxy collection install ibm.qradar -Process install dependency map -Starting collection install process -Installing 'ibm.qradar:0.0.1' to '/home/student/.ansible/collections/ansible_collections/ibm/qradar' -``` - -Collections が正しくインストールされていることを確認します: - -```bash -[student@ansible ~]$ ls -1 ~/.ansible/collections/ansible_collections/ibm/qradar -docs -LICENSE -plugins -README.md -tests -``` - -必要なファイルはすべてそこにあります - 特に実際のモジュールは `plugins/modules` ディレクトリにあります。 - -Collection が揃ったことで、あとは Playbook の作成に取り掛かることができるようになりました。 - -> **Note** -> -> 自宅でも試してみたい方へ: Collection command は最低でも Ansible のバージョン 2.9 が必要なのでご注意ください! - -## Step 4.4 - 最初のサンプル Playbook - -QRadar とのインターフェイスの最初の例では、ルールの有効化/無効化を行います。これはかなり小さな変更ですが、一般的な変更であり、Ansible と QRadar がどのように相互作用するかを示しています。まず最初に変更したいルールを見つけ、その後で変更を適用します。 - -VS Code Online エディタで、ユーザのホームディレクトリに `find_qradar_rule.yml` という新しいファイルを作成します。ここでは `qradar` の名前とターゲットとなるホストを追加します。 - -```yaml ---- -- name: Find QRadar rule state - hosts: qradar -``` - -また、先ほど追加した Collection を使います。Collection は、play レベルだけでなく task レベルなど複数の場所で参照することができます。play レベルで参照することで、後からそれらに基づいて複数の task を作成することができます。 - -```yaml ---- -- name: Find QRadar rule state - hosts: qradar - collections: - - ibm.qradar -``` - -次に実際の task を紹介します。QRadar の REST API は、まず適切なルールを検索してその ID を見つけ、与えられた ID を参照してルールを非アクティブにするように設計されています。このラボのために、DDoS 攻撃の疑いに基づいてメッセージを作成するルールを考えてみます。前のセクションでは、 **Offenses** > **Rules** で QRadar のルールを確認し、 **DDoS** という用語でフィルタリングしました。フィルタリングされたリストの中で、最初に表示されているルールは **"Potential DDoS Against Single Host (TCP) "** であることに注意してください。この文字列を使って、モジュール `qradar_rule_info` を使ってロールを検索します: - -```yaml ---- -- name: Find QRadar rule state - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: get info about qradar rule - qradar_rule_info: - name: "DDoS Attack Detected" -``` - -このモジュールは多くの情報を返しますが、その中でも Role を実際に無効にするために必要な ID を返します。キーワード `register` の助けを借りて、返ってきた情報を変数に登録してみます。これはモジュール自身で直接利用します。これにより、変数の内容を次の task で利用することができます。 - -```yaml ---- -- name: Find QRadar rule state - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: get info about qradar rule - qradar_rule_info: - name: "DDoS Attack Detected" - register: rule_info -``` - -では、モジュールが返す情報は実際にはどのように見えるのでしょうか?変数 `rule_info` を出力するだけではどうでしょうか?そのためには、Playbook の実行中に変数を出力するための `debug` task を追加します: - -```yaml ---- -- name: Find QRadar rule state - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: get info about qradar rule - qradar_rule_info: - name: "Potential DDoS Against Single Host (TCP)" - register: rule_info - - - name: output returned rule_info - debug: - var: rule_info -``` - -> **Note** -> -> デバッグモジュールのパラメータ "var" は、すでに変数名を想定しています - そのため、通常の変数参照時のような中括弧や引用符は必要ありません。 - -どちらのタスクもデータを収集して出力するだけで、何かを変更することはありません。すぐに Playbook を実行して、返されたデータを見てみます: - -```bash -[student@ansible ansible-files]$ ansible-navigator run find_qradar_rule.yml - -PLAY [Find QRadar rule state] *************************************************** - -TASK [Gathering Facts] ************************************************************ -ok: [qradar] - -TASK [get info about qradar rule] ************************************************* -ok: [qradar] - -TASK [output returned rule_info] ************************************************** -ok: [qradar] => { - "rule_info": { - "changed": false, - "failed": false, - "rules": [ - { - "average_capacity": 0, - "base_capacity": 0, - "base_host_id": 0, - "capacity_timestamp": 0, - "creation_date": 1278524200032, - "enabled": true, - "id": 100065, - "identifier": "SYSTEM-1520", - "linked_rule_identifier": null, - "modification_date": 1566928030130, - "name": "Potential DDoS Against Single Host (TCP)", - "origin": "SYSTEM", - "owner": "admin", - "type": "FLOW" - } - ] - } -} - -PLAY RECAP ************************************************************************ -qradar : ok=3 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 -``` - -ご覧のように、デバッグタスク `output returned rule_info` は変数の内容を示し、モジュール `qradar_rule_info` によって返された内容を示しています。これらの戻り値の中にはキー `id` が含まれていることに注意してください。これが必要なキーです。 - -> **Note** -> -> あなたの環境ではキー ID が違う可能性があります。 - -この構造体にキーがある場合、どのようにしてキーを取得するのでしょうか? まず、変数のセグメント `rules` の中にあり、`rule_info.rules` でアクセスすることができます。`rules` の中にはリスト(中括弧に注意)がありますが、エントリは1つしかありません。そして、リストの中から各キーに個別にアクセスすることができます: `rule_info.rules[0]['id']`. - -そこで、新しい Playbook を作成して、これを値としてモジュールに提供し、ルール `qradar_rule` を無効にできるようにします。 - -VS Code Online エディタで、ホームディレクトリ `/home/student/` に `change_qradar_rule.yml` という新しいファイルを作成します。ここでは `qradar` の名前とターゲットとなるホストを追加します。 - - -```yaml ---- -- name: Change QRadar rule state - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: get info about qradar rule - qradar_rule_info: - name: "Potential DDoS Against Single Host (TCP)" - register: rule_info - - - name: disable rule by id - qradar_rule: - state: disabled - id: "{{ rule_info.rules[0]['id'] }}" -``` - - -Playbook が完成しました: それは QRadar にルールのリストを照会し、我々が探しているものを非アクティブにします。 - -## Step 4.5 - Playbook を実行します - -Playbook を完成させたら、実行してみます: - -```bash -[student@ansible ansible-files]$ ansible-navigator run change_qradar_rule.yml - -PLAY [Change QRadar rule state] *************************************************** - -TASK [Gathering Facts] ************************************************************ -ok: [qradar] - -TASK [get info about qradar rule] ************************************************* -ok: [qradar] - -TASK [disable rule by id] ********************************************************* -changed: [qradar] - -PLAY RECAP ************************************************************************ -qradar : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 -``` - -ご覧のように、Playbook は変更を示しています: ルールが変更されました。Playbook をもう一度実行してみてください - ルールはすでに無効化されているので、変更は報告されません。 - -## Step 4.6 - UI から変更を確認します - -Ansible が実際に何かを変更したことを確認するために、QRadar の UI に戻ります。Web ブラウザで QRadar の IP を開きます。**Offenses** タブをクリックし、そこから左側の **Rules** をクリックします。ルールの長いリストが表示されます。このリストの上部にある検索バーに、以下の検索語を入力します: `DDoS` -リストをフィルタリングするために、DDoS に関連するいくつかのルールのみが表示されるように、後から Enter キーを押します。最後に、潜在的な DDoS 攻撃に関するルールに注意して、**Enabled** 列の状態を確認してください。 - -![QRadar, filtered rules list showing disabled rule](images/qradar-rules-disabled.png) - -これで、Ansible で QRadar を自動化する最初のステップは終了です。エクササイズの概要に戻り、次のエクササイズに進みます。 - ----- - -[Ansible Security Automation Workshopの表紙に戻る](../README.ja.md) +# 演習 1.4 - 最初の IBM QRadar の実行 + +**他の言語でもお読みいただけます**:
+[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoleInventory nameHostnameUsernamePassword
Ansible Control Hostansibleansible-1--
IBM QRadarqradarqradaradminAnsible1!
Attackerattackerattacker--
Snortsnortsnort--
Check Point Management Servercheckpointcheckpoint_mgmtadminadmin123
Check Point Gateway-checkpoint_gw--
Windows Workstationwindows-wswindows_wsadministratorProvided by Instructor
+
+

Note

+

+ The workshop includes preconfigured SSH keys to log into Red Hat Enterprise Linux hosts and don't need a username and password to log in.

+
+
+ +## ステップ 4.1 - IBM QRadar + +セキュリティー環境で SIEM を自動化する方法を紹介するために、このラボには、[IBM QRadar SIEM, community +edition](https://developer.ibm.com/qradar/ce/). が含まれています。 + +SIEM は Web UI および REST API からアクセスできます。このラボでは、作成した Playbook はバックグラウンドで API +と対話します。すべてのアクションは Web UI で検証されます。 + +## ステップ 4.2: Web UI へのアクセス + +SIEM を最初に確認し、これが実際に機能していることを確認します。Web ブラウザーで `https://` に対してポイントします。ここで、`` は、インベントリーの `siem` セクションの `qradar` エントリーの IP アドレスになります。次に、証明書が自己署名されているため安全ではないという警告が表示されます。これを受け入れて次に進んでください。 + +> **注記** +> +> 実稼働環境では、安全でない証明書を受け入れるという選択肢はありません。ラボのセットアップは短期間のデモ目的のみであるため、このケースではリスクを受け入れます。 + +ログインフィールドに、ユーザー名 **admin** とパスワード **Ansible1!** を指定します +(特に指定されない場合)。**Login** ボタンを押します。 + +これで、IBM QRadar のメイン Web インターフェースが表示されます。 + +![QRadar main window](images/qradar-main-window.png#centreme) + +QRadar と基本的な概念を理解するために、インターフェースを簡単に見てみましょう。上部には、QRadar +の主要部分に複数のエントリーポイントを持つナビゲーションバーがあります。 + +- **Dashboard** (主な概要を提供) - **Offenses** (監視された状態によって生成されたメッセージまたはイベント) - +**Log Activity** (ログソースから収集されたイベントの表示) - **Network Activity** +(特定ホスト間のネットワークトラフィック通信) - **Assets** (環境内の自動的に作成されたネットワークデバイスおよびホストのプロファイル) +- **Reports** (カスタマイズレポートまたは標準的なレポートで、環境内で起こったことを報告) + +このデモの目的上、**Offenses** +を詳しく見てみます。メニュー項目をクリックします。新しいウィンドウで、左側にナビゲーションバーが表示され、オフェンスのフィルタリングが行われます。 + +![QRadar offense window](images/qradar-offense-window.png#centreme) + +> **注記** +> +> これはデモ環境であるため、オフェンスリストが現在空である可能性があります。 + +オフェンスとは、悪意のあるログラインのように、ログメッセージやネットワークトラフィックでの発見に基づいて生成されるメッセージやイベントのことです。QRadar +は、ルールに基づいてオフェンスをトリガーします。ルールには条件が記述されており、条件が満たされるとオフェンスが発生します。 + +公式ドキュメントには、以下のように書かれています。 + +> *ルール (相関ルールと呼ばれることもある) は、イベント、フロー、またはオフェンスに適用され、異常の検索または検出を行います。テストの条件がすべて満たされた場合、ルールはレスポンスを生成します。([QRadar ドキュメント](https://www.ibm.com/support/knowledgecenter/en/SS42VS_7.3.2/com.ibm.qradar.doc/c_qradar_rul_mgt.html))* + +生産性の高い環境では、時間をかけてさらに多くのカスタムルールを作成するのが一般的です。しかし、現時点では、システムにすでにインストールされているルールを見てみましょう。**Offenses** +ウィンドウのナビゲーションバーの左側で、**Rules** +をクリックします。ルールの長いリストが表示されます。このリストの上部にある検索バーに、`DDoS` という検索用語を入力します。その後に Enter +を押して、一覧をフィルタリングします。 + +この一覧はフィルタリングされ、DDOS に関連するいくつかのルールのみが表示されます。 + +![QRadar, filtered rules list](images/qradar-offenses-rules.png#centreme) + +**"Potential DDoS Against Single Host (TCP)"** +という項目をクリックし、有効になっていることを確認します。これは、この演習で後ほど関連してきます。 + +QRadar の概要がわかったところで、今度は Ansible を使って QRadar を自動化する方法を見ていきましょう。 + +## ステップ 4.3 - QRadar モジュールおよび Ansible コレクション + +最も基本的なレベルでは、Ansible Automation Platform +はタスクを実行します。これらのタスクはモジュールを実行します。モジュールは通常、特別なデバイスやプログラムの API +エンドポイントのように、対応するターゲット上で動作します。 + +Ansible には多くのモジュールが同梱されていますが、執筆時点では、Ansible は 追加設定なしの QRadar +のモジュールを出荷していません。その代わり、それらのモジュールは [Ansible +collections]](https://docs.ansible.com/ansible/devel/dev_guide/collections_tech_preview.html): +として提供されます。 + +> *コレクションは、Ansible コンテンツのディストリビューション形式です。コレクションを使用して、Playbook、ロール、モジュール、およびプラグインをパッケージ化および配布できます。Ansible Galaxy を介してコレクションを公開および使用できます。* + +コレクションは、簡単なディレクトリー構造に従って Ansible コンテンツを提供します。ここで、Ansible +ロールを思い出した場合、これには理由があります。コレクションはロールの概念に基づいて構築されますが、その概念を一般的な Ansible +コンテンツ管理に拡張します。IBM QRadar のコレクションは、[ansible-security +project](https://github.com/ansible-security/ibm_qradar). にあります。 + +自動化実行環境は、必要なコレクションを含めるようにカスタマイズできます。この例として、このワークショップで使用する `security_ee` +カスタム実行環境があります。カスタムの `security_ee` 実行環境には、これらの演習で使用する `ibm.qradar` +コレクションが含まれます。 + + + +> **注記** +> +> Ansible Automation Platform には、独自のカスタム実行環境を作成するために使用できる `ansible-builder` が含まれています。`ansible-builder` の詳細は、[blog post](https://www.ansible.com/blog/introduction-to-ansible-builder). を参照してください。 + +## ステップ 4.4 - 最初の Playbook の例 + +QRadar とのインターフェースの最初の例では、ルールを有効化/無効化します。これは小規模ですが、一般的な変更であり、Ansible と QRadar +の対話方法を紹介します。これは 2 つのステップで行われます。最初のステップでは、変更するルールを見つけます。次のステップでは、変更を適用します。 + +VS Code のオンラインエディターで、ユーザーのホームディレクトリーに新規ファイル `find_qradar_rule.yml` を作成します。ここ +`qradar` に名前とターゲットホストを追加します。 + +```yaml +--- +- name: Find QRadar rule state + hosts: qradar +``` + +また、先ほど追加したばかりのコレクションも使用したいと思います。コレクションは複数の場所で参照することができます。たとえば、タスクレベルとプレイレベルの両方で参照できます。ここでは、プレイレベルでコレクションを参照し、後にコレクションに基づいて複数のタスクを作成できるようにします。 + +```yaml +--- +- name: Find QRadar rule state + hosts: qradar + collections: + - ibm.qradar +``` + +次に、実際のタスクを実行します。QRadar の REST API は、最初に適切なルールを検索して ID を検索し、指定の ID を参照してルールを非アクティブにする必要があるように設計されています。このラボでは、DDoS 攻撃の疑いに基づいてメッセージを作成するルールがあるとします。前のセクションでは、**Offenses** > **Rules** 経由の QRadar ルールをすでに確認し、**DDoS** という用語でフィルタリングしました。フィルタリングされたリストでは、ここで示されている最初のルール **"Potential DDoS Against Single Host (TCP)"** に注目してください。この文字列を使用して、モジュール `qradar_rule_info` を使用するロールを検索します。 + +```yaml +--- +- name: Find QRadar rule state + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: get info about qradar rule + qradar_rule_info: + name: "DDoS Attack Detected" +``` + +このモジュールは多くの情報を返しますが、その中には実際にロールを無効にするために必要な ID も含まれています。ここでは、`register` +キーワードを使用して返された情報を変数に登録します。これは、モジュール自体で直接使用されます。これにより、次のタスクで変数の内容を使用することができます。 + +```yaml +--- +- name: Find QRadar rule state + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: get info about qradar rule + qradar_rule_info: + name: "DDoS Attack Detected" + register: rule_info +``` + +では、実際にモジュールが返す情報は、どのようになっているのでしょうか? 単に変数 `rule_info` を出力するのはどうでしょう? +そのためには、Playbook の実行中の変数の出力に使用できる `debug` タスクを追加します。 + +```yaml +--- +- name: Find QRadar rule state + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: get info about qradar rule + qradar_rule_info: + name: "Potential DDoS Against Single Host (TCP)" + register: rule_info + + - name: output returned rule_info + debug: + var: rule_info +``` + +> **注記** +> +> デバッグモジュールのパラメーター "var" はすでに変数名を想定しています。そのため、通常、変数を参照するときのような中括弧や引用符は必要ありません。 + +どちらのタスクもデータを収集して出力するだけで、何も変更しません。さっそく Playbook を実行し、返ってきたデータを見てみましょう。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run find_qradar_rule.yml --mode stdout +``` +![QRadar rule ID](images/1.4-qradar-id.png#centreme) + +ご覧のように、デバッグタスク `output returned rule_info` は変数の内容を表示し、したがって、モジュール +`qradar_rule_info` によって返されたコンテンツを示しています。これらの返されたデータの中で、キー`id` (この例では値が +`100065`) に注意してください。これは私たちが必要とするキーになります。 + +> **注記** +> +> キー ID は、実際のケースでは異なる場合があります。 + +このような構造になっている場合、どのようにしてキーを取得するのでしょうか。まず、キーは変数のセグメント `rules` +にあり、`rule_info.rules` でアクセスできます。`rules` の中には、実際にはリスト (中括弧に注目) がありますが、エントリーは +1 つしかないので、`rule_info.rules[0]` +でアクセスします。そして、リストのエントリーの中から、各キーへはその名前`rule_info.rules[0]['id']` +で個別にアクセスすることができます。 + +では、これをモジュールに値として提供し、ルール `qradar_rule` を無効にできる新しい Playbook を作成してみましょう。 + +VS Code のオンラインエディターで、ホームディレクトリー `/home/student/` に新しいファイル `change_qradar_rule.yml` を作成します。ここ `qradar` に名前およびターゲットホストを追加します。 + + +```yaml +--- +- name: Change QRadar rule state + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: get info about qradar rule + qradar_rule_info: + name: "Potential DDoS Against Single Host (TCP)" + register: rule_info + + - name: disable rule by id + qradar_rule: + state: disabled + id: "{{ rule_info.rules[0]['id'] }}" +``` + + +これで Playbook が完了しました。ルールのリストを QRadar にクエリーし、検索すしているルールを非アクティブにします。 + +## ステップ 4.5 - Playbook の実行 + +Playbook が完了したら、これを実行してみましょう。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run change_qradar_rule.yml --mode stdout + +PLAY [Change QRadar rule state] *************************************************** + +TASK [Gathering Facts] ************************************************************ +ok: [qradar] + +TASK [get info about qradar rule] ************************************************* +ok: [qradar] + +TASK [disable rule by id] ********************************************************* +changed: [qradar] + +PLAY RECAP ************************************************************************ +qradar : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 +``` + +ご覧のように、Playbook にはルールが変更されたと表示されています。ルールがすでに無効にされているため、Playbook +を再度実行しても変更を報告しません。 + +## ステップ 4.6: UI での変更の確認 + +Ansible が本当に何かを変えたことを確認するために、QRadar の UI に戻ります。Web ブラウザーで QRadar IP +を開きます。**Offenses** タブをクリックして、そこから左側の **Rules** +をクリックします。ルールの長い一覧が表示されます。この一覧の上部にある検索バーに、検索用語 `DDoS` を入力します。Enter +を押して一覧をフィルタリングし、DDOS に関連するルールのみを表示します。最後に、潜在的な DDOS +攻撃に関するルールに注意してください。そして、**Enabled** 列の状態を確認します。これは **False** に設定されています。 + +![QRadar, filtered rules list showing disabled +rule](images/qradar-rules-disabled.png#centreme) + +Ansible で QRadar を自動化する最初のステップを完了しました。演習の概要に戻り、次のステップに進みます。 + +---- + +**Navigation** +

+[Previous Exercise](../1.3-snort/README.md) | [Continue to Section 2](../2.1-enrich/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/2.1-enrich/README.ja.md b/exercises/ansible_security/2.1-enrich/README.ja.md index f87e31f06..c50139fc0 100644 --- a/exercises/ansible_security/2.1-enrich/README.ja.md +++ b/exercises/ansible_security/2.1-enrich/README.ja.md @@ -1,507 +1,716 @@ -# 演習 2.1 - Investigation Enrichment - -**Read this in other languages**:
-[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
- -## Step 1.1 - 背景 - -前のセクションでは、単一のツールとそれらを Ansible でどのように自動化できるかに焦点を当てました。セキュリティ担当者の日常業務では、必要性は一段階高くなります。何か不審なことが起こり、さらに注意を払う必要がある場合、セキュリティ業務では、企業の IT をセキュリティで保護するために多くのツールを展開する必要があります。多くのエンタープライズ環境では、セキュリティソリューションは互いに統合されておらず、大規模な組織では、異なるチームが共通のプロセスを持たない IT セキュリティの異なる側面を担当しています。そのため、多くの場合、手作業や異なるチームの人々の相互作用が発生し、エラーが発生しやすく、何よりも時間がかかります。 - -そこに Ansible が登場します。Ansible を使用して、前のセクションで学習した相互作用を高め、セキュリティツールを自動化ワークフローに統合します。 - -## Step 1.2 - 準備 - -この演習が適切に機能するには、Playbook `whitelist_attacker.yml` を少なくとも一度は実行しておく必要があります。また、攻撃者のホワイトリストポリシーのロギングも有効にしておく必要があります。両方とも Check Point の演習で行いました。手順を未実施の場合には、Check Point の演習に戻って Playbook を実行し、手順に従ってロギングを有効にしてからここに戻ってください。 - -また、QRadar コレクションも必要です。これは前の QRadar の演習で既にインストールしています。その部分が未実施の場合には、次のコマンドを実行しインストールしてください: `ansible-galaxy collection install ibm.qradar` - -さらに、この Role を使用して、前回の Snort の演習の IDS ルールを変更します。未実施の場合には、次のコマンドを実行しインストールしてください: `ansible-galaxy install ansible_security.ids_rule` - -次に、これはセキュリティラボなので、疑わしいトラフィック、つまり攻撃が必要です。この演習の他のコンポーネントが後で反応する5秒ごとの単純なアクセスをシミュレートします。 - -controller のインストールには、ユーザー、インベントリ、認証情報などがすでに入力されています。ただし、この演習では、コマンドラインに焦点を当て、物事がどのように機能しているかをよりよく示すことに注意してください。次の演習では、controller が大きな役割を果たします。したがって、ここでは攻撃を開始するためのインターフェースのみを案内します。次の演習では、controller の特徴と機能をより深く説明し、なぜそれが Security Automation で重要な役割を果たすのかを説明します。 - -VS Code オンラインエディターで、以下のコンテンツを含むホームディレクトリの `web_attack_simulation.yml` を開きます。 - - -```yml ---- -- name: start attack - hosts: attacker - become: yes - gather_facts: no - - tasks: - - name: simulate attack every 5 seconds - shell: "/sbin/daemonize /usr/bin/watch -n 5 curl -m 2 -s http://{{ hostvars['snort']['private_ip2'] }}/web_attack_simulation" -``` - - -プレイブックを実行します: - -```bash -[student@ansible ansible-files]$ ansible-navigator run web_attack_simulation.yml -``` - -> **Note** -> -> 基本的にこのプレイブックでは、watch を実行する小さなデーモンを登録し、5秒ごとにコマンドを実行します。これは繰り返しのタスクを開始するにはかなり厳しい方法ですが、このラボの目的には合っています。 - -これでステージは整いました。このユースケースが何であるかを学ぶために読んでください。 - -## Step 1.3 - 異常を確認する - -あなたが企業のセキュリティアナリストであることを想像してみてください。あなたはアプリケーションに異常があることが通知されました。VS Code オンラインエディタのターミナルから Snort サーバに SSH で接続してください。Snort サーバの IP アドレスは、`/home/student/lab_inventory/hosts` にあるインベントリファイルから調べることができます。 - -VS Code オンラインエディタで新しいターミナルを開き、SSH 経由で Snort サーバに接続します。注: Snort サーバのログインユーザとして、`ec2-user` を使用する必要があります!ログイン後、異常ログのエントリを grep で抽出してください: - -```bash -[student@ansible ~]$ ssh ec2-user@11.22.33.44 -Last login: Sun Sep 22 15:38:36 2019 from 35.175.178.231 -[ec2-user@ip-172-16-115-120 ~]$ sudo grep web_attack /var/log/httpd/access_log -172.17.78.163 - - [22/Sep/2019:15:56:49 +0000] "GET /web_attack_simulation HTTP/1.1" 200 22 "-" "curl/7.29.0" -... -``` - -`exit` コマンドを実行するか、`CTRL-D` を押すことで Snort サーバからログアウトすることができます。 - -> **Note** -> -> このログエントリは、この演習の最初に開始したデーモンによって5秒ごとに起動されます。 - -セキュリティアナリストであるあなたは、異常や違反がその他の深刻な原因の兆候であることを知っています。あなたは調査することにしました。現在のところ、異常を誤検知と判断するのに十分な情報を持っていません。したがって、ファイアウォールや IDS などから、より多くのデータポイントを収集する必要があります。ファイアウォールや IDS のログを手動で調べるには非常に時間がかかります。大規模な組織では、セキュリティアナリストが必要なアクセス権さえ持っていない場合があり、エンタープライズファイアウォールと IDS の両方を担当するチームに連絡して、それぞれのログを手動で調べ、異常を直接確認するよう依頼し、その結果を返信してもらう必要があります。この作業には数時間から数日かかることもあります。 - -## Step 1.4 - Playbook を作成して新しいログソースを作る - -SIEM を使えば、ログを集中的に収集して分析することができます。私たちの場合、SIEM は QRadar です。QRadar には、他のシステムからログを収集し、疑わしいアクティビティーがないかそれらを検索する機能を備えています。では、QRadar ではどのようにしてログを分析するのでしょうか?これらのログを確認する前に、QRadar にログを転送する必要があります。これは2つのステップで行われます。まず、ログを QRadar に転送するようにソース(ここではCheck Point と Snort) を設定する必要があります。次に、これらのシステムをログソースとして QRadar に追加します。 - -これを手動で行うには、複数のマシンで多くの作業を行う必要があります。これにも時間がかかり、セキュリティアナリストには無い権限が必要になる場合があります。しかし、Ansible を使用すると、セキュリティ組織は事前に承認された自動化ワークフローを Playbook の形で提供することができます。これらのワークフローを一元的に管理し、異なるチーム間で共有することで、ボタンを押すだけでセキュリティワークフローを実現することもできます。これらの Playbook を使用すると、セキュリティアナリストである私たちは、企業のファイアウォールと IDS の両方を自動的に設定して、イベントやログを QRadar インスタンスに送信することができるため、データを関連付け、疑わしいアプリケーションの処理方法を決定できます。 - -> **Note** -> -> これらのログを QRadar に永続的に追加しないのはなぜですか?その理由は、多くのログシステムは、消費するログの量に応じてライセンス/料金が決められており、不要なログを退避することで拡張性を持たせているからです。また、ログが多すぎると、データを適切かつタイムリーに分析することが難しくなります。 - -そこで、まずログソース(Snort と Check Point)を設定して QRadar にログを送信し、その後 QRadar にログソースを追加して QRadar が認識できるようにするような Playbook を作成します。 - -いつものように、Playbook には名前とそれを実行するホストが必要です。このワークフローではさまざまなマシンで作業しているため、Playbook をさまざまな "[plays](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#playbook-language-example)" に分割します: - -> *play の目的は、ホストのグループを明確に定義された役割にマッピングすることです。基本的なレベルでは、task は Ansible モジュールの呼び出しにすぎません。* - -つまり、1つの Playbook の中に "host" セクションが複数回登場し、各セクションには専用のタスクリストがあります。 - -Snort の設定から始めます。QRadar サーバにログを送信するために Snort のログサーバが必要です。これは既存の Role [ids_config](https://github.com/ansible-security/ids_config) で設定できるため、Role をインポートして適切なパラメータで使用するのみです。 - -VS Code オンラインエディタのターミナルで、`ansible-galaxy` ツールを使用して、上記の Role を1つのコマンドでダウンロードおよびインストールします: - -```bash -[student@ansible ~]$ ansible-galaxy install ansible_security.ids_config -- downloading role 'ids_config', owned by ansible_security -- downloading role from https://github.com/ansible-security/ids_config/archive/master.tar.gz -- extracting ansible_security.ids_config to /home/student/.ansible/roles/ansible_security.ids_config -- ansible_security.ids_config (master) was installed successfully -``` - -それでは、Role を使用する Playbook を作成します。VS Code オンラインエディタで、以下の内容のファイル `enrich_log_sources.yml` を作成します: - - -```yaml ---- -- name: Configure snort for external logging - hosts: snort - become: true - vars: - ids_provider: "snort" - ids_config_provider: "snort" - ids_config_remote_log: true - ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" - ids_config_remote_log_procotol: udp - ids_install_normalize_logs: false - - tasks: - - name: import ids_config role - include_role: - name: "ansible_security.ids_config" -``` - - -ご覧のように、前回 Snort ルールを設定したときと同じように、Role を再利用して機能させています。変数を介して Role の動作のみを変更します。変数を介して QRadar IP を提供し、IDSプロバイダを `snort` に設定し、Snort が送信するプロトコルを `UDP` に定義します。 - -次に新しい Snort ログソースがあることを QRadar に通知する必要があります。Playbook `enrich_log_sources.yml` に以下の play を追加してください: - - -```yaml -- name: Add Snort log source to QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Add snort remote logging to QRadar - qradar_log_source_management: - name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" - type_name: "Snort Open Source IDS" - state: present - description: "Snort rsyslog source" - identifier: "{{ hostvars['snort']['private_ip']|regex_replace('\\.','-')|regex_replace('^(.*)$', 'ip-\\1') }}" -``` - - -ご覧のように、ここでは Collection が使用されており、実行する唯一のタスクは QRadar でログソースを管理するモジュールを使用しています。ここで正規表現は何をしているのかと聞かれるかもしれませんが、これは Snort が生成した実際の syslog ヘッダーエントリと一致するように IP アドレスを変更しています。そうしなければ、ログが QRadar によって正しく識別されません。 - -次に、Check Point についても同じことをしなければなりません。ログを QRadar に転送するように Check Point を設定する必要があります。これは、既存の Role [log_manager](https://github.com/ansible-security/log_manager) で設定できるため、Role をインポートして、適切なパラメータで使用するだけです。まず、Role をインポートします: - -```bash -[student@ansible ~]$ ansible-galaxy install ansible_security.log_manager -- downloading role 'log_manager', owned by ansible_security -- downloading role from https://github.com/ansible-security/log_manager/archive/master.tar.gz -- extracting ansible_security.log_manager to /home/student/.ansible/roles/ansible_security.log_manager -- ansible_security.log_manager (master) was installed successfully -``` - -ここで、Snort と QRadar をまとめた既存の Playbook `enrich_log_sources.yml` を再度編集して、Check Point 用のセクションを追加します: - - -```yaml -- name: Configure Check Point to send logs to QRadar - hosts: checkpoint - - tasks: - - include_role: - name: ansible_security.log_manager - tasks_from: forward_logs_to_syslog - vars: - syslog_server: "{{ hostvars['qradar']['private_ip'] }}" - checkpoint_server_name: "YOURSERVERNAME" - firewall_provider: checkpoint -``` - - -このスニペットでは、`YOURSERVERNAME` を Check Point 管理インスタンスの実際のサーバ名(`gw-77f3f6` など)に置き換える必要があることに注意してください。Smart Console にログインすることで、個々の Check Point インスタンスの名前を確認できます。これは画面下部の **Summary** の下にある **GATEWAYS & SERVERS** タブに表示されます: - -![Check Point Gateway Name](images/check_point_gw_name.png) - -Playbook の文字列 `YOURSERVERNAME` をあなたの個人名に置き換えてください。 - -> **Note** -> -> これは2つの API 呼び出しで自動的に行うこともできますが、ここでは Playbook のリストが複雑になります。 - -次に、別のログソース、今回では Check Point があることを QRadar に通知しなければなりません。Playbook `enrich_log_sources.yml` に以下の play を追加します: - - -```yaml -- name: Add Check Point log source to QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Add Check Point remote logging to QRadar - qradar_log_source_management: - name: "Check Point source - {{ hostvars['checkpoint']['private_ip'] }}" - type_name: "Check Point FireWall-1" - state: present - description: "Check Point log source" - identifier: "{{ hostvars['checkpoint']['private_ip'] }}" - - - name: deploy the new log source - qradar_deploy: - type: INCREMENTAL - failed_when: false -``` - - -前回の QRadar play と比較して、今回は追加の task が追加されていることに注意してください: `deploy the new log source`。これは、QRadar の変更がスプールされ、追加の要求時にのみ適用されるためです。エラーは REST API のタイムアウトによって発生する可能性がありますが、API 呼び出しの実際の機能には影響しないため無視しています。 - -これらをすべてまとめれば、完全な Playbook `enrich_log_sources.yml` は以下のようになります: - - -```yaml ---- -- name: Configure snort for external logging - hosts: snort - become: true - vars: - ids_provider: "snort" - ids_config_provider: "snort" - ids_config_remote_log: true - ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" - ids_config_remote_log_procotol: udp - ids_install_normalize_logs: false - - tasks: - - name: import ids_config role - include_role: - name: "ansible_security.ids_config" - -- name: Add Snort log source to QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Add snort remote logging to QRadar - qradar_log_source_management: - name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" - type_name: "Snort Open Source IDS" - state: present - description: "Snort rsyslog source" - identifier: "{{ hostvars['snort']['private_ip']|regex_replace('\\.','-')|regex_replace('^(.*)$', 'ip-\\1') }}" - -- name: Configure Check Point to send logs to QRadar - hosts: checkpoint - - tasks: - - include_role: - name: ansible_security.log_manager - tasks_from: forward_logs_to_syslog - vars: - syslog_server: "{{ hostvars['qradar']['private_ip'] }}" - checkpoint_server_name: "YOURSERVERNAME" - firewall_provider: checkpoint - -- name: Add Check Point log source to QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Add Check Point remote logging to QRadar - qradar_log_source_management: - name: "Check Point source - {{ hostvars['checkpoint']['private_ip'] }}" - type_name: "Check Point FireWall-1" - state: present - description: "Check Point log source" - identifier: "{{ hostvars['checkpoint']['private_ip'] }}" - - - name: deploy the new log sources - qradar_deploy: - type: INCREMENTAL - failed_when: false -``` - - -> **Note** -> -> 上記のように `YOURSERVERNAME` を実際のサーバ名に置き換えることを忘れないでください。 - -## Step 1.5 - Playbook を実行してログ転送を有効にする - -Playbook を実行して、両方のログソースを QRadar に追加します: - -```bash -[student@ansible ~]$ ansible-navigator run enrich_log_sources.yml -``` - -Check Point Smart Console では、左下隅に進捗状況を知らせる小さなウィンドウがポップアップ表示されることがあります。これが10%で止まっている場合は、通常は無視しても問題ありませんが、ログ・エクスポータは動作しています。 - -## Step 1.6 - ログソースの設定を確認する - -Ansible Playbook を実行する前は、QRadar は Snort や Check Point からデータを受信していませんでした。実行後、セキュリティアナリストである私たちが何も介入することなく、Check Point のログが QRadar のログ概要に表示され始めました。 - -QRadar の Web UI にログインします。**Log Activity** をクリックしてください。ご覧のように、常に大量のログが送信されています。 - -![QRadar Log Activity showing logs from Snort and Check Point](images/qradar_log_activity.png) - -これらのログの多くは、実際には QRadar の内部のログです。概要をさらに確認するには、ログリストの上の中央にある **Display** の隣にあるドロップダウンメニューをクリックします。エントリを **Raw Events** に変更します。次に、その上のメニューバーで、緑色の漏斗のアイコンの **Add Filter** というボタンをクリックします。**Parameter** は、**Log Source [Indexed]** を選択し、**Operator** には、**Equals any of** を選択します。次に、ログソースのリストから **Check Point source** を選択し、右側の小さなプラスボタンをクリックします。**Snort rsyslog source** についても同様にして、**Add Filter** ボタンを押します: - -![QRadar Log Activity showing logs from Snort and Check Point](images/qradar_filter_logs.png) - -これでログの一覧が分析しやすくなりました。イベントが Check Point から QRadar に送信されていることを確認します。QRadar が新しいログソースを完全に適用するのに数秒かかることがあります。新しいログソースが完全に設定されるまで、受信ログには **SIM GENERIC LOG DSM-7** という不明なログ用の「デフォルト」ログソースがあります。このデフォルトのログソースからのログが表示された場合は、1~2分待ちます。その待ち時間の後、新しいログソースの設定が適切に適用され、QRadar はログを正しいログソース(ここでは Check Point)に帰属させます。 - -また、**View** を **Real Time** から **Last 5 Minuts** などに変更し、個々のイベントをクリックして、ファイアウォールから送信されたデータの詳細を確認することもできます。 - -QRadar でもログソースが正しく表示されることを確認します。QRadar の UI で、左上隅の「ハンバーガーボタン」(横棒3本)をクリックし、下部にある **Admin** をクリックします。その中で、**Log Source** をクリックします。新しいウィンドウが開き、新しいログソースが表示されます。 - -![QRadar Log Sources](images/qradar_log_sources.png) - -Check Point では、ログ・ソースが実際に設定されているかどうかを確認する最も簡単な方法は、コマンドラインを使用して確認することです。VS Code オンラインエディタのターミナルから、SSH を使用して Check Point 管理サーバの IP アドレスにユーザ admin でログインし、以下の `ls` コマンドを実行します: - -```bash -[student@ansible ~]$ ssh admin@11.33.44.55 -[Expert@gw-77f3f6:0]# ls -l /opt/CPrt-R80/log_exporter/targets -total 0 -drwxr-xr-x 6 admin root 168 Sep 16 11:23 syslog-22.33.44.55 -``` - -中央ログサーバは、Check Point の内部ログエクスポーターツールを使用して設定されていることが分かります。Check Point サーバからログアウトし、制御ホストに戻ります。 - -また、バックグラウンドでの Snort の設定が成功したことを確認してみましょう。VS Code オンラインエディタのターミナルから、ユーザ `ec2-user` として SSH 経由で Snort インスタンスにログインします。root になって rsyslog 転送設定を確認します: - -```bash -[student@ansible ~]$ ssh ec2-user@22.33.44.55 -Last login: Wed Sep 11 15:45:00 2019 from 11.22.33.44 -[ec2-user@ip-172-16-11-222 ~]$ sudo -i -[root@ip-172-16-11-222 ~]# cat /etc/rsyslog.d/ids_confg_snort_rsyslog.conf -$ModLoad imfile -$InputFileName /var/log/snort/merged.log -$InputFileTag ids-config-snort-alert -$InputFileStateFile stat-ids-config-snort-alert -$InputFileSeverity alert -$InputFileFacility local3 -$InputRunFileMonitor -local3.* @44.55.66.77:514 -``` - -Snort サーバーを再び離れ、制御ホストに戻ってきてください。 - -これまでのところ Snort から QRadar へログは送信されていません。Snort はこのトラフィックが注目すべきものであることをまだ知りません。 - -しかし、セキュリティアナリストとして、より多くのデータを自由に使えるようになったことで、アプリケーションの動作の異常の原因が何であるのか、最終的にはより良い考えが見えてきました。ファイアウォールからのログを確認し、誰が誰にトラフィックを送っているのかを確認しますが、イベントを誤検知として取り除くにはまだ十分なデータがありません。 - -## Step 1.7 - Snort シグネチャを追加する - -この異常が誤検知であるかどうかを判断するには、セキュリティアナリストとして潜在的な攻撃を除外する必要があります。自由に扱えるデータを考慮し、IDS に新しいシグネチャを実装して、そのようなトラフィックが再び検出された場合にアラートログを取得することを決定します。 - -典型的な状況では、新しいルールを実装するには、Snort を担当するセキュリティオペレータとさらにやりとりが必要になります。しかし、幸いなことに、私たちは再び Ansible Playbook を使用して、数時間や数日ではなく、数秒で同じ目標を達成することができるようになりました。 - -前回の Snort の演習では、Snort ルールにシグネチャを追加して詳細情報を取得しているため、Playbook を再利用してルールデータを変更するだけです。VS Code オンラインエディタで、ユーザのホームディレクトリに `enrich_snort_rule.yml` という以下の内容のファイルを作成します: - - -```yaml ---- -- name: Add Snort rule - hosts: snort - become: yes - - vars: - ids_provider: snort - protocol: tcp - source_port: any - source_ip: any - dest_port: any - dest_ip: any - - tasks: - - name: Add snort web attack rule - include_role: - name: "ansible_security.ids_rule" - vars: - ids_rule: 'alert {{protocol}} {{source_ip}} {{source_port}} -> {{dest_ip}} {{dest_port}} (msg:"Attempted Web Attack"; uricontent:"/web_attack_simulation"; classtype:web-application-attack; sid:99000020; priority:1; rev:1;)' - ids_rules_file: '/etc/snort/rules/local.rules' - ids_rule_state: present -``` - - -この play では、TCP のトラフィックを制御したいということを示す変数を Snort に提供します。その後、`ids_rule` Role を使用して、`web_attack_simulation` 文字列をコンテンツとして含む新しいルールを設定し、この動作の今後の発生を識別できるようにします。 - -Playbook を実行します: - -```bash -[student@ansible ~]$ ansible-navigator run enrich_snort_rule.yml -``` - -新しいルールが実際に追加されたことを簡単に確認します。VS Code オンラインエディタのターミナルから `ec2-user` ユーザとして Snort サーバに SSH 接続して、カスタムルールのディレクトリを確認します: - -```bash -[student@ansible ~]$ ssh ec2-user@11.22.33.44 -Last login: Fri Sep 20 15:09:40 2019 from 54.85.79.232 -[ec2-user@snort ~]$ sudo grep web_attack /etc/snort/rules/local.rules -alert tcp any any -> any any (msg:"Attempted Web Attack"; uricontent:"/web_attack_simulation"; classtype:web-application-attack; sid:99000020; priority:1; rev:1;) -``` - -## Step 1.8 - Offense を特定してクローズする - -Playbook が実行された後、違反を識別したら QRadar で確認できます。そして、確かにその通りです。QRadar の UI にログインして、**Offenses** をクリックして、左側の **All Offenses** にあります: - -![QRadar Offenses](images/qradar_offenses.png) - -これらの情報が手元にあれば、最終的にこのタイプの攻撃をすべてチェックすることができ、それらすべてが単一のホスト(攻撃者)からのみ発生していることを確認することができます。 - -次のステップは、そのマシンを担当するチームと連絡を取り、その動作について話し合うことです。デモとしては、そのマシンのチームがこの動作が本当に必要であるというフィードバックを行い、セキュリティアラートは誤検知であると仮定します。したがって、QRadar の違反を却下することができます。 - -Offence View で、Offence をクリックし、上部のメニューで **Action** をクリックし、ドロップダウンメニューで **Close** をクリックします。ウィンドウがポップアウトし、そこに追加情報を入力して、最終的に誤検知としてその違反を閉じることができます。 - -## Step 1.9 - ロールバック - -最後のステップでは、すべての設定変更を調査前の状態にロールバックして、私たちや他のセキュリティアナリストのリソース消費と分析ワークロードを軽減します。また、攻撃シミュレーションを停止する必要があります。 - -この `enrich_log_sources.yml` を基に `rollback.yml` という Playbook を作成します。主な違いは、QRadar ではログソースの状態を `absent` に設定し、Snort では `ids_config_remote_log` を `false` に設定し、Check Point では `unforward_logs_to_syslog` のタスクを開始することです。 - -Playbook `rollback.yml` には次のような内容が含まれている必要があります: - - -```yaml ---- -- name: Disable external logging in Snort - hosts: snort - become: true - vars: - ids_provider: "snort" - ids_config_provider: "snort" - ids_config_remote_log: false - ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" - ids_config_remote_log_procotol: udp - ids_install_normalize_logs: false - - tasks: - - name: import ids_config role - include_role: - name: "ansible_security.ids_config" - -- name: Remove Snort log source from QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Remove snort remote logging from QRadar - qradar_log_source_management: - name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" - type_name: "Snort Open Source IDS" - state: absent - description: "Snort rsyslog source" - identifier: "{{ hostvars['snort']['private_ip']|regex_replace('\\.','-')|regex_replace('^(.*)$', 'ip-\\1') }}" - -- name: Configure Check Point to not send logs to QRadar - hosts: checkpoint - - tasks: - - include_role: - name: ansible_security.log_manager - tasks_from: unforward_logs_to_syslog - vars: - syslog_server: "{{ hostvars['qradar']['private_ip'] }}" - checkpoint_server_name: "YOURSERVERNAME" - firewall_provider: checkpoint - -- name: Remove Check Point log source from QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Remove Check Point remote logging from QRadar - qradar_log_source_management: - name: "Check Point source - {{ hostvars['checkpoint']['private_ip'] }}" - type_name: "Check Point NGFW" - state: absent - description: "Check Point log source" - identifier: "{{ hostvars['checkpoint']['private_ip'] }}" - - - name: deploy the log source changes - qradar_deploy: - type: INCREMENTAL - failed_when: false -``` - - -> **Note** -> -> ここでも、`YOURSERVERNAME` を実際のサーバ名に置き換えることを忘れないでください。 - -この Playbook は、この演習の中で最も長いものかもしれませんが、構造と内容はすでにお馴染みのものになっているはずです。少し時間をかけて、各 task が何をしているのかを理解してください。 - -Playbook を実行しログソースを削除します: - -```bash -[student@ansible ~]$ ansible-navigator run rollback.yml -``` - -最後に、攻撃シミュレーションを停止する必要があります。student ユーザーとして controller にログインします。**Templates** セクションで、**Stop web attack simulation** というジョブテンプレートを見つけて実行します。 - -これで演習は終了です。次の演習を続けるために、演習のリストに戻ってください。 - ----- - -[Ansible Security Automation Workshopの表紙に戻る](../README.ja.md) +# 演習 2.1 - 調査の強化 + +**他の言語でもお読みいただけます**:
+[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoleInventory nameHostnameUsernamePassword
Ansible Control Hostansibleansible-1--
IBM QRadarqradarqradaradminAnsible1!
Attackerattackerattacker--
Snortsnortsnort--
Check Point Management Servercheckpointcheckpoint_mgmtadminadmin123
Check Point Gateway-checkpoint_gw--
Windows Workstationwindows-wswindows_wsadministratorProvided by Instructor
+
+

Note

+

+ The workshop includes preconfigured SSH keys to log into Red Hat Enterprise Linux hosts and don't need a username and password to log in.

+
+
+ +## ステップ 1.1 - 背景 + +前のセクションでは、単一のツールと、それらを Ansible +で自動化する方法に焦点を当てましたが、セキュリティー担当者の日常業務では、もう少し踏み込んだ方法が必要となります。何か疑わしいことが発生し、さらに注意が必要な場合、セキュリティー操作では、企業の +IT +を保護するために多くのツールをデプロイする必要があります。多くの企業環境では、セキュリティーソリューションは相互に統合されておらず、大規模な組織では、さまざまなチームが +IT +セキュリティーのさまざまな側面を担当しており、共通のプロセスはありません。そのため、多くの場合、異なるチームのメンバー間での手作業ややりとりが必要となり、エラーが発生しやすい上、時間もかかります。 + +セキュリティー侵害の防止には、複数の利害関係者が関与しており、サイバー攻撃が成功した場合は、セキュリティー侵入を可能な限り迅速に修正します。 + +どのような人物が関わっているのかを簡単に見てみましょう。 + +| Persona | Tasks | Challenges | +|--- |--- |--- | +| Chief Information Security Officer (CISO) | Manage the risk and ensure that security incidents are effectively handled.
Create a security ops program. | I have multiple teams managing security in silos. Security is not integrated into larger IT practices and landscape. | +| Security Operator | Reduce the change delivery time.
Enable the escalation of potential threats. | I receive an increasing number of requests from Governance, SOC and ITOps that I don’t have time to review and execute. | +| Security Analyst | Increase the number of events analysed and streamline the coordination of remediation processes. | Attacks are becoming more frequent, faster and complex. The tools I use don’t live up to expectations. | + +Ansible Automation Platform +を使用して、前のセクションで学んだやりとりのレベルを引き上げて、セキュリティーツールを自動化されたワークフローに統合します。 + +## ステップ 1.2 - 準備 + +この演習が正しく動作するには、前の [Check Point 演習](../1.2-checkpoint/README.md) +で、いくつかの手順が完了していることを確認する必要があります。 + +1. `whitelist_attacker.yml` Playbook は、少なくとも 1 回実行されている必要があります。 +2. また、攻撃者のホワイトリストポリシーのロギングが、Check Point SmartConsole でアクティベートされている必要があります。 + +いずれも [Check Point 演習](../1.2-checkpoint/README.md) +で行いました。これらの手順を飛ばしている場合は、手順に戻って Playbook +を実行し、手順に従ってロギングをアクティベートしてから、こちらに戻ってきてください。 + +`ibm.qradar` コレクションおよび `ids_rule` ロールを使用して、前の Snort 演習から IDS ルールを変更します。 + +次に、これはセキュリティーラボなので、疑わしいトラフィック、つまり攻撃が必要です。ここでは、5 秒ごとに単純なアクセスをシミュレートする +Playbook を用意し、この演習の他のコンポーネントが後に反応するようにします。VS Code +オンラインエディターで、ユーザーのホームディレクトリーに以下の内容の Playbook `web_attack_simulation.yml` +を作成します。 + + +```yml +--- +- name: start attack + hosts: attacker + become: yes + gather_facts: no + + tasks: + - name: simulate attack every 5 seconds + shell: "/sbin/daemonize /usr/bin/watch -n 5 curl -m 2 -s http://{{ hostvars['snort']['private_ip2'] }}/web_attack_simulation" +``` + + +Playbook を実行します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run web_attack_simulation.yml --mode stdout +``` + +> **注記** +> +> 基本的に、この Playbook では、5 秒ごとにコマンドを実行する watch を実行する小さなデーモンを登録します。これは繰り返しのタスクを開始するためのかなり厳しい方法ですが、このラボの目的を果たします。 + +これで準備は完了しました。このユースケースの概要を知るには、次へと進んでください。 + +## ステップ 1.3 - 異常の確認 + +あなたは、ある企業のセキュリティーアナリストだとします。たった今、あるアプリケーションの異常を知らされました。VS Code +オンラインエディターのターミナルから、snort マシンに ssh します。 + +VS Code オンラインエディターで新しいターミナルを開き、SSH 経由で Snort サーバーに接続します。 + +> **注記** +> +> Snort サーバーのログインユーザーとして、`ec2-user` を使用する必要があります。 + +ログイン後、異常なログエントリーに対して grep を実行します。 + +```bash +[student@ansible-1 ~]$ ssh ec2-user@snort +Last login: Sun Sep 22 15:38:36 2019 from 35.175.178.231 +[ec2-user@snort ~]$ sudo grep web_attack /var/log/httpd/access_log +172.17.78.163 - - [22/Sep/2019:15:56:49 +0000] "GET /web_attack_simulation HTTP/1.1" 200 22 "-" "curl/7.29.0" +... +``` + +Snort サーバーからログアウトするには、`exit` コマンドを実行するか、`CTRL` と `D` を同時に押します。 + +> **注記** +> +> もうお分かりかもしれませんが、このログエントリーは、この演習のはじめに起動したデーモンによって 5 秒ごとにトリガーされます + +セキュリティーアナリストであるあなたは、異常は侵入やその他の深刻な原因の兆候である可能性があることを認識しています。あなたは調査することにしました。今のところ、この異常を誤検出と断定するには十分な情報がありません。したがって、ファイアウォールや +IDS などから、より多くのデータポイントを収集する必要があります。ファイアウォールと IDS +のログを手作業で調べるのは、非常に時間がかかります。大規模な組織では、セキュリティーアナリストは必要なアクセス権さえ持っていない可能性があり、企業のファイアウォールと +IDS +の両方を担当するチームと連絡をとり、それぞれのログを手動で調べて異常を直接チェックし、その結果を返信するよう依頼する必要があります。この作業には数時間から数日かかることもあります。 + +## ステップ 1.4: 新規のログソースを作成するための Playbook の作成 + +SIEM を使用する場合は、ログを一元的に収集および分析できるので、状況は改善されます。この場合、SIEM は QRadar です。QRadar +には、他のシステムからログを収集し、疑わしいアクティビティーを検索する機能があります。では、QRadar ではどのようにログを分析するのでしょうか? +これらのログを確認する前に、それらを QRadar にストリーミングする必要があります。これには 2 つの手順があります。まず、ソース (Check +Point および Snort) を設定してログを QRadar に転送する必要があります。次に、これらのシステムをログソースとして QRadar +に追加する必要があります。 + +これを手作業で行うには、複数のマシンで多くの作業を行う必要があり、やはり時間がかかる上に、セキュリティーアナリストが持っていない権限が必要になる場合もあります。しかし、Ansible +では、セキュリティー組織が事前に承認した自動化ワークフローを Playbook の形で作成することができます。Playbook +は、一元的に管理し、さまざまなチームで共有することで、ボタンを押すだけでセキュリティーワークフローを実現することもできます。Playbook +を使えば、セキュリティーアナリストとして、エンタープライズファイアウォールと IDS の両方を自動的に設定し、イベントやログを QRadar +インスタンスに送信することができます。これにより、データを相互に関連付け、疑わしいアプリケーションをどのように進めるかを決定することができます。 + +> **注記** +> +> それらのログを QRadar に永続的に追加しないのはなぜでしょうか? それは、多くのログシステムは消費するログの量によってライセンス/料金が決まるため、必要のないログを押し込むと、膨大な量となってしまうからです。また、ログが多すぎると、データを適切かつタイムリーに分析することが難しくなります。 + +では、まずログソース (Snort および Check Point) を設定して、ログを QRadar に送信し、その後これらのログソースを +QRadar に追加して QRadar が認識できるようにする Playbook を作成してみましょう。 + +いつものように、Playbook には名前と実行するホストが必要です。今回のワークフローでは、異なるマシンで作業を行うため、Playbook を異なる +"[plays](https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#playbook-language-example)" +に分けることにします。 + +> プレイの目的は、ホストのグループをいくつかの明確に定義されたロールにマップすることです。これは、Ansible がタスクと呼ぶものによって表されます。基本的なレベルでは、タスクは Ansible モジュールの呼び出しにすぎません。 + +これは、"host" のセクションが 1 つの Playbook に複数回表示され、各セクションに専用のタスクリストがあることを意味します。 + +まず、Snort の設定から始めましょう。QRadar サーバーにログを送信するためには、Snort +のログサーバーが必要です。これは、[ids_config](https://github.com/ansible-security/ids_config) +という既存のロールで設定できますので、あとはロールをインポートして、適切なパラメーターで使用するだけです。 + +`security_ee` カスタム実行環境には、`ids_config` ロールが含まれます。 + +では、ロールを使用する Playbook を作成してみましょう。VS Code オンラインエディターで、以下の内容で +`enrich_log_sources.yml` ファイルを作成します。 + + +```yaml +--- +- name: Configure snort for external logging + hosts: snort + become: true + vars: + ids_provider: "snort" + ids_config_provider: "snort" + ids_config_remote_log: true + ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" + ids_config_remote_log_procotol: udp + ids_install_normalize_logs: false + + tasks: + - name: import ids_config role + include_role: + name: "ansible_security.ids_config" +``` + + +ご覧のとおり、前回の Snort +ルールの設定と同様に、ロールを再利用して、あとはロールに任せています。パラメーターを介して変更するのは、ロールの動作だけです。QRadar の IP +を変数で指定して、IDS プロバイダーを `snort` に設定し、パッケージが `UDP` として送信されるプロトコルを定義します。 + +ここで、この新しい Snort ログソースがあることを QRadar に知らせる必要があります。以下のプレイを Playbook +`enrich_log_sources.yml` に追加します。 + + +```yaml +- name: Add Snort log source to QRadar hosts: qradar collections: + - ibm.qradar + + tasks: + - name: Add snort remote logging to QRadar + qradar_log_source_management: + name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" + type_name: "Snort Open Source IDS" + state: present + description: "Snort rsyslog source" + identifier: "{{ hostvars['snort']['ansible_fqdn'] }}" +``` + + +次に、Check Point についても同じことを行う必要があります。ログを QRadar に転送するように Check Point +を設定する必要があります。これは、既存のロールである +[log_manager](https://github.com/ansible-security/log_manager). +で設定できます。`ids_config` ロールと同様に、`security_ee` 実行環境には `log_manager` が含まれます。 + +ここで、Snort と QRadar をすでにまとめた既存の Playbook `enrich_log_sources.yml` +を再度編集し、Check Point の別のセクションを追加します。 + + +```yaml +- name: Configure Check Point to send logs to QRadar + hosts: checkpoint + + tasks: + - include_role: + name: ansible_security.log_manager + tasks_from: forward_logs_to_syslog + vars: + syslog_server: "{{ hostvars['qradar']['private_ip'] }}" + checkpoint_server_name: "YOURSERVERNAME" + firewall_provider: checkpoint +``` + + +このスニペットでは、`YOURSERVERNAME` を、`gw-77f3f6` などの Check Point +管理インスタンスの実際のサーバー名に置き換える必要があることに注意してください。SmartConsole にログインすると、個々の Check +Point インスタンスの名前を見つけることができます。これは、画面の下部分にある **Summary** の下の **GATEWAYS & +SERVERS** タブに表示されます。 + +![Check Point Gateway Name](images/check_point_gw_name.png#centreme) + +Playbook の文字列 `YOURSERVERNAME` を、個別の名前に置き換えます。 + +> **注記** +> +> これは、2 つの API 呼び出しで自動的に実行できますが、ここでの Playbook の一覧が複雑になってしまいます。 + +ここで、別のログソース (今回は Check Point ) があることを QRadar に知らせる必要があります。以下のプレイを Playbook +`enrich_log_sources.yml` に追加します。 + + +```yaml +- name: Add Check Point log source to QRadar hosts: qradar collections: + - ibm.qradar + + tasks: + - name: Add Check Point remote logging to QRadar + qradar_log_source_management: + name: "Check Point source - {{ hostvars['checkpoint']['private_ip'] }}" + type_name: "Check Point FireWall-1" + state: present + description: "Check Point log source" + identifier: "{{ hostvars['checkpoint']['private_ip'] }}" + + - name: deploy the new log source + qradar_deploy: + type: INCREMENTAL + failed_when: false +``` + + +前回の QRadar プレイと比較して、今回は `deploy the new log source` +というタスクが追加されていることに注意してください。これは、QRadar +の変更がスプールされ、追加のリクエストがあった場合にのみ適用されるという事実によるものです。エラーは、API 呼び出しの実際の機能に影響を与えない +REST API のタイムアウトにより発生する可能性があるため、無視しています。 + +これらのすべての部分をまとめると、Playbook `enrich_log_sources.yml` 全体は以下のようになります。 + + +```yaml +--- +- name: Configure snort for external logging + hosts: snort + become: true + vars: + ids_provider: "snort" + ids_config_provider: "snort" + ids_config_remote_log: true + ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" + ids_config_remote_log_procotol: udp + ids_install_normalize_logs: false + + tasks: + - name: import ids_config role + include_role: + name: "ansible_security.ids_config" + +- name: Add Snort log source to QRadar + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: Add snort remote logging to QRadar + qradar_log_source_management: + name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" + type_name: "Snort Open Source IDS" + state: present + description: "Snort rsyslog source" + identifier: "{{ hostvars['snort']['ansible_fqdn'] }}" + +- name: Configure Check Point to send logs to QRadar + hosts: checkpoint + + tasks: + - include_role: + name: ansible_security.log_manager + tasks_from: forward_logs_to_syslog + vars: + syslog_server: "{{ hostvars['qradar']['private_ip'] }}" + checkpoint_server_name: "YOURSERVERNAME" + firewall_provider: checkpoint + +- name: Add Check Point log source to QRadar + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: Add Check Point remote logging to QRadar + qradar_log_source_management: + name: "Check Point source - {{ hostvars['checkpoint']['private_ip'] }}" + type_name: "Check Point FireWall-1" + state: present + description: "Check Point log source" + identifier: "{{ hostvars['checkpoint']['private_ip'] }}" + + - name: deploy the new log sources + qradar_deploy: + type: INCREMENTAL + failed_when: false +``` + + +> **注記** +> +> 上記のように、値 `YOURSERVERNAME` を実際のサーバー名に置き換えることを忘れないでください。 + +## ステップ 1.5: ログ転送を有効化するための Playbook の実行 + +完全な Playbook を実行して、両方のログソースを QRadar に追加します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run enrich_log_sources.yml --mode stdout +``` +Check Point SmartConsole では、進捗状況を知らせる小さなウィンドウが、左下隅にポップアップ表示されるされることもあります。 + +![Check Point progress](images/2.1-checkpoint-progress.png#centreme) + +>注記 +> +>それが10%で止まった場合、通常は無視しても問題ありません。ログエクスポーターは、いずれにせよ機能します。 + + + +## ステップ 1.6: ログソース設定の確認 + +Ansible Playbook が呼び出される前は、QRadar は Snort または Check Point +からデータを受信していませんでした。直後に、セキュリティーアナリストである私たちの介入なしに、Check Point のログが QRadar +ログの概要に表示され始めます。 + +QRadar Web UI にログインし、**Log Activity** をクリックします。ご覧のとおり、常にたくさんのログが入ってきています。 + +> **IBM QRadar Credentials** +> Username: `admin` +> Password: `Ansible1!` + +![QRadar Log Activity showing logs from Snort and Check +Point](images/qradar_log_activity.png#centreme) + +これらのログの多くは、実際には QRadar の内部ログです。概要を把握するには、ログリストの中央上にある **Display** +の隣のドロップダウンメニューをクリックします。エントリーを **Raw Events** に変更します。 + +次に、その上のメニューバーで、緑色のじょうごマークと **Add Filter** +というテキストが表示されているボタンをクリックします。**Parameter** として **Log Source [Indexed]** +を選び、**Operator** として **Equals any of** を選びます。次に、ログソースのリストから、**Check Point +source** を選び、右側の小さなプラスボタンをクリックします。同様に **Snort rsyslog source** を選び、**Add +Filter** ボタンを押します。 + +![QRadar Log Activity showing logs from Snort and Check +Point](images/qradar_filter_logs.png#centreme) + +>**注記** +> +> この時点では、Check Point のログのみが表示されます。Snort ログは、この演習の後半のいくつかのステップを完了した後でのみ、QRadar に表示されます。 + +これで、ログのリストが分析しやすくなりました。Check Point から QRadar にイベントが送信されていることを確認します。QRadar +が新しいログソースを完全に適用するには、数秒必要な場合があります。新しいログソースが完全に設定されるまでは、受信するログには、未知のログに対する「デフォルト」のログソースがあり、これは +**SIM GENERIC LOG DSM-7** と呼ばれます。このデフォルトのログソースからのログが表示された場合は、1、2 +分待ってください。この待ち時間の後、新しいログソースの設定が正しく適用され、QRadar はログを正しいログソース (ここでは Check Point) +に帰属させます。 + +また、**View** を **Real Time** から **Last 5 Minutes** +などに変更すると、個別のイベントをクリックして、ファイアウォールから送られてくるデータの詳細を見ることもできます。 + +QRadar がログソースもきちんと表示するか確認してみましょう。QRadar の UI で、左上隅の「ハンバーガーボタン」(3本の横棒) +をクリックしてから、下にある **Admin** をクリックします。 + +![QRadar hamburger](images/2-qradar-hamburger.png#centreme) + +そこで、**Log Sources** をクリックします。 + +![QRadar log sources](images/2-qradar-log-sources.png#centreme) + +新しいウィンドウが開き、新しいログソースが表示されます。 + +![QRadar Log Sources](images/2-qradar-log-sources-window.png#centreme) + +Check Point で、ログソースが設定されているかどうかを確認する最も簡単な方法は、実際にコマンドラインを使用することです。VS Code +オンラインエディタのターミナルから、SSH を使用して Check Point の管理サーバー IP にユーザー admin でログインし、次の +`ls` コマンドを実行します。 + +```bash +[student@ansible-1 ~]$ ssh admin@checkpoint_mgmt +[Expert@gw-77f3f6:0]# ls -l /opt/CPrt-R80/log_exporter/targets +total 0 +drwxr-xr-x 6 admin root 168 Sep 16 11:23 syslog-22.33.44.55 +``` + +ご覧のとおり、中央のログサーバーは Check Point の内部ログエクスポーターツールを介して設定されました。Check Point +サーバーを離れ、コントロールホストに戻ります。 + +また、バックグランドでの Snort の設定が成功したことを確認しましょう。VS Code オンラインエディターのターミナルから、`ec2-user` +ユーザーとして SSH で Snort インスタンスにログインします。root になり、rsyslog の転送設定を確認します。 + +```bash +[student@ansible-1 ~]$ ssh ec2-user@snort +Last login: Wed Sep 11 15:45:00 2019 from 11.22.33.44 +[ec2-user@snort ~] sudo cat /etc/rsyslog.d/ids_confg_snort_rsyslog.conf +$ModLoad imfile +$InputFileName /var/log/snort/merged.log +$InputFileTag ids-config-snort-alert +$InputFileStateFile stat-ids-config-snort-alert +$InputFileSeverity alert +$InputFileFacility local3 +$InputRunFileMonitor +local3.* @44.55.66.77:514 +``` + +Snort サーバーを再び離れて、コントロールホストに戻ります。 + +今のところ、Snort から QRadar にはログが送られていない点に留意してください。Snort +は、このトラフィックが注目に値することをまだ認識していません。 + +しかし、セキュリティーアナリストとしては、自由に使えるデータが増えたことで、アプリケーションの異常な動作の原因の可能性について、ようやく以前よりも把握できるようになりました。ファイアウォールのログを確認し、誰が誰にトラフィックを送っているのかを確認できますが、イベントを誤検出と見なすのに十分なデータはまだありません。 + +## ステップ 1.7 - Snort 署名の追加 + +この異常が誤検出であるかどうかを判断するためには、セキュリティーアナリストとして、潜在的な攻撃をすべて除外する必要があります。手元にあるデータをもとに、IDS +に新しい署名を実装し、そのようなトラフィックが再び検出された場合に、警告ログを取得することにします。 + +一般的な状況では、新しいルールの実装には、Snort を担当するセキュリティーオペレーターと再度やりとりする必要があります。しかし幸運なことに、今回も +Ansible Playbook を使って、数時間や数日ではなく数秒で、同じ目的を達成することができます。 + +前回の Snort の演習では、より多くの情報を得るために、署名で Snort ルールを既に追加していたので、Playbook +を再利用して、ルールのデータだけを変更することができます。VS Code オンラインエディターで、ユーザーのホームディレクトリーに +`enrich_snort_rule.yml` というファイルを作成し、以下の内容を記述します。 + + +```yaml +--- +- name: Add Snort rule + hosts: snort + become: yes + + vars: + ids_provider: snort + protocol: tcp + source_port: any + source_ip: any + dest_port: any + dest_ip: any + + tasks: + - name: Add snort web attack rule + include_role: + name: "ansible_security.ids_rule" + vars: + ids_rule: 'alert {{protocol}} {{source_ip}} {{source_port}} -> {{dest_ip}} {{dest_port}} (msg:"Attempted Web Attack"; uricontent:"/web_attack_simulation"; classtype:web-application-attack; sid:99000020; priority:1; rev:1;)' + ids_rules_file: '/etc/snort/rules/local.rules' + ids_rule_state: present +``` + + +このプレイでは、TCP 上のトラフィックを制御する必要があるという内容の変数を Snort に提供します。その後、`ids_rule` +ロールを利用して、`web_attack_simulation` +文字列をコンテンツとして含む新しいルールを設定することで、今後発生するであろうこの動作を特定できるようになります。 + +それでは、Playbook を実行します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run enrich_snort_rule.yml --mode stdout +``` + +新しいルールが実際に追加されたことをすぐに確認してみましょう。VS Code オンラインエディターのターミナルから、Snort サーバーに +`ec2-user` として ssh で接続、カスタムルールのディレクトリーを見てみます。 + +```bash +[student@ansible-1 ~]$ ssh ec2-user@snort +Last login: Fri Sep 20 15:09:40 2019 from 54.85.79.232 +[ec2-user@snort ~]$ sudo grep web_attack /etc/snort/rules/local.rules +alert tcp any any -> any any (msg:"Attempted Web Attack"; uricontent:"/web_attack_simulation"; classtype:web-application-attack; sid:99000020; priority:1; rev:1;) +``` + +## ステップ 1.8: オフェンスを特定して閉じる + +Playbook が実行された数分後に、QRadar +でオフェンスが表示されているかどうかを確認できます。そして、実際に表示されていることがわかりました。QRadar の UI にログインして +**Offenses** をクリックし、続いて左側の**All Offenses**をクリックします。 + +![QRadar Offenses](images/qradar_offenses.png#centreme) + +これらの情報が手元にあれば、これでようやくこのタイプのすべてのオフェンスをチェックして、それらがすべて 1 +つのホスト、つまり攻撃者からのみ発生していることを確認することができます。 + +次のステップは、そのマシンを担当しているチームと連絡を取り、その動作について話し合うことです。このデモでは、そのマシンのチームが、この動作は本当に必要なものであり、セキュリティーアラートは誤検出であるというフィードバックを提供したと仮定します。したがって、QRadar +のオフェンスを退けることができます。 + +Offense ビューで Offense をクリックし、上部のメニューの **Actions** をクリックして、ドロップダウンメニューで +**close** をクリックします。ウィンドウがポップアップ表示されますので、追加情報を入力し、最後に誤検出としてオフェンスをクローズします。 + +## ステップ 1.9 - ロールバック + +最後のステップでは、すべての設定変更を調査前の状態にロールバックし、リソースの消費を抑え、私たちと他のセキュリティーアナリストの分析ワークロードの負担を軽減します。また、攻撃シミュレーションを停止する必要があります。 + +`enrich_log_sources.yml` に基づいて新しい Playbook `rollback.yml` +を作成します。主な違いは、QRadar の場合はログソースの状態を `absent` に設定し、Snort の場合は +`ids_config_remote_log` を `false` に設定し、Check Point の場合は +`unforward_logs_to_syslog` のタスクを開始することです。 + +Playbook `rollback.yml` には、以下の内容が必要です。 + + +```yaml +--- +- name: Disable external logging in Snort + hosts: snort + become: true + vars: + ids_provider: "snort" + ids_config_provider: "snort" + ids_config_remote_log: false + ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" + ids_config_remote_log_procotol: udp + ids_install_normalize_logs: false + + tasks: + - name: import ids_config role + include_role: + name: "ansible_security.ids_config" + +- name: Remove Snort log source from QRadar + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: Remove snort remote logging from QRadar + qradar_log_source_management: + name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" + type_name: "Snort Open Source IDS" + state: absent + description: "Snort rsyslog source" + identifier: "{{ hostvars['snort']['ansible_fqdn'] }}" + +- name: Configure Check Point to not send logs to QRadar + hosts: checkpoint + + tasks: + - include_role: + name: ansible_security.log_manager + tasks_from: unforward_logs_to_syslog + vars: + syslog_server: "{{ hostvars['qradar']['private_ip'] }}" + checkpoint_server_name: "YOURSERVERNAME" + firewall_provider: checkpoint + +- name: Remove Check Point log source from QRadar + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: Remove Check Point remote logging from QRadar + qradar_log_source_management: + name: "Check Point source - {{ hostvars['checkpoint']['private_ip'] }}" + type_name: "Check Point NGFW" + state: absent + description: "Check Point log source" + identifier: "{{ hostvars['checkpoint']['private_ip'] }}" + + - name: deploy the log source changes + qradar_deploy: + type: INCREMENTAL + failed_when: false +``` + + +> **注記** +> +> ここでも、`YOURSERVERNAME` の値を Check Point インスタンスの実際のサーバー名に置き換えることを忘れないでください。 + +この Playbook +は、今回の演習の中で最も長いものになるかもしれませんが、その構造や内容はすでにおなじみのものになっているはずです。少し時間をとって各タスクに目をとおし、何が起きているのかを理解してください。 + +>**注記** +> +> `rollback.yml` Playbook を実行する前に、現在のすべての ssh セッションを終了し、**control-node** プロンプトを開いていることを確認してください。 + +Playbook を実行してログソースを削除します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run rollback.yml --mode stdout +``` + +また、Web 攻撃をシミュレートするプロセスを停止する必要があります。`shell` モジュールを使用して **attacker** +マシンで実行しているプロセスを停止する簡単な Playbook を作成してみましょう。 + +`shell` +モジュールを使用していますが、これは、[piping](https://www.redhat.com/sysadmin/pipes-command-line-linux). +を使用することができるからです。シェルパイピングでは、プロセスを停止するために必要な複数のコマンドを連鎖させることができます。 + +VS Code オンラインエディターを使用して `stop_attack_simulation.yml` という新しい Playbook +を作成し、以下の内容を追加してみましょう。 + + +```yaml +--- +- name: stop attack simulation + hosts: attacker + become: yes + gather_facts: no + + tasks: + - name: stop attack process + shell: > + sleep 2;ps -ef | grep -v grep | grep -w /usr/bin/watch | awk '{print $2}'|xargs kill &>/dev/null; sleep 2 +``` + +次に、`stop_attack_simulation.yml` Playbook を実行します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run stop_attack_simulation.yml --mode stdout +``` + + +これで演習は終わりました。次の演習に進むには、演習のリストへ戻ってください。 + +---- +**Navigation** +

+[Previous Exercise](../1.3-snort/README.md) | [Next Exercise](../2.2-threat/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/2.2-threat/README.ja.md b/exercises/ansible_security/2.2-threat/README.ja.md index 3266fd996..ebe77449f 100644 --- a/exercises/ansible_security/2.2-threat/README.ja.md +++ b/exercises/ansible_security/2.2-threat/README.ja.md @@ -1,168 +1,374 @@ -# 演習 2.2 - Threat hunting - -**Read this in other languages**:
-[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
- -## Step 2.1 - 背景 - -脅威の検出と対応能力は、通常、セキュリティオペレータが企業の IT を保護するために多くのツールを展開する必要があります。不足しているプロセスと多くの手動作業により、これは適切な IT セキュリティ運用にとって深刻な課題です! - -この演習では、大規模な組織でエンタープライズファイアウォールを担当するセキュリティオペレータを想定しています。ここで使用するファイアウォール製品は、Check Point Next Generation Firewall です。この演習では、さまざまなチーム間の相互作用に特に焦点を当て、これらの相互作用を [automation controller](https://www.ansible.com/products/controller) を使用し、効率化する方法について説明します。 - -## Step 2.2 - 準備 - -この演習が適切に機能するには、Playbook `whitelist_attacker.yml` を少なくとも 1 回実行しておく必要があります。また、Check Point Smart Console 管理インターフェイスで、攻撃者のホワイトリストポリシーのロギングが有効になっている必要があります。これらの操作は、演習 1 Check Point の演習で行いました。手順が未実施の場合には、Playbook を実行し、手順に従ってロギングを有効にしてから、ここに戻ってください。 - -## Step 2.3 - controller の設定を確認する - -準備にはさらに2つの手順が必要です。繰り返しになりますが、controller を使用してそれらを実行します。左側にある **Templates** をクリックします。設定済みのすべてのジョブテンプレートのリストが表示されます。ジョブテンプレートは、Ansible ジョブを実行するための定義とパラメーターのセットです。これは、自動化を実行するために必要なインベントリ、資格情報、Playbook、制限、権利などを定義します。このリストで、**Blacklist attacker** というエントリを見つけ、その右側にあるロケットの記号をクリックします。 - -![Blacklist attacker](images/controller_blacklist.png) - -これをクリックすると、ジョブの概要が表示され、自動化ジョブの実行からのライブデータと、ジョブに関連するすべてのパラメータの概要が表示されます。この自動化の実行により、ファイアウォールの既存のポリシーを変更して、2台のマシン間でパッケージをドロップするようにしました。 - -今必要なのは攻撃だけです。左側のナビゲーションバーで、**Templates** をクリックします。テンプレートのリストで、**Start DDOS attack simulation** と呼ばれるテンプレートを見つけ、右にあるロケットのアイコンをクリックして実行します。これにより、数秒ごとに攻撃がシミュレートされます。 - -これでステージは整いました。このユースケースが何であるかを学ぶためにお読みください。 - -## Step 2.4 - 攻撃を確認する - -あなたは、大規模なエンタープライズファイアウォールを担当するセキュリティオペレータです。基幹業務システムを保護する Check Point Next Generation Firewall(NGFW)に適用しているポリシーに繰り返し違反を識別していることが分かりました。これを確認するには、Windows ワークステーションの Smart Console を開き、Check Point の管理サーバにアクセスして、左側の **LOGS & MONITOR** タブをクリックします。新しいウィンドウが開き、**Audit Logs** と **Logs** の2つの選択肢が表示されます。**Logs** をクリックし、実際のログを表示します: - -![Check Point logs view, violation logs](images/smartconsole_violation_logs.png) - -**http Traffic Dropped** と説明が付いた一連のメッセージが表示され、時間の経過とともに何度も繰り返し表示されます。 - -> **Note** -> -> ログが表示されない場合は、自動更新が有効になっていない可能性があります。その場合は、対応するボタン(円の横に A があるアイコン)をクリックしてください: - -![Check Point logs view, auto refresh button](images/smartconsole_auto_refresh.png) - -これらの違反を見て、それが攻撃の結果であるかどうかを評価するために調査を開始する必要があります。調査する最善の方法は、ファイアウォールのログと、ネットワークに展開されている他のセキュリティソリューション(Snort など)が生成したログを、QRadar のようなログ管理ツールで関連付けることです。 - -## Step 2.5 - ログを QRadar に転送する - -しかし、多くの企業環境では、前述したように、セキュリティソリューションは互いに統合されておらず、大規模な組織では、異なるチームが共通のプロセスを持たず、IT セキュリティのさまざまな側面を担当しています。このシナリオの、セキュリティオペレータが問題をエスカレーションし調査を開始するための一般的な方法は、セキュリティ分析チームに連絡し、ルール違反を特定するために使用したファイアウォールログを手動で送信してから返信を待つというものです。これでは、時間のかかる手動のプロセスになってしまいます。 - -しかし、前の演習で示したように、Ansible を使ってこのプロセスを自動化することができます! automation controller のような中央自動化ツールを介して提供される、事前承認された自動化ワークフローを Playbook の形で提供できます。このような Ansible Playbook のセットを使えば、脅威の調査の状況に陥るたびに、エンタープライズファイアウォールのイベント/ログを QRadar インスタンスに送信するように自動的に設定し、セキュリティアナリストがデータを関連付け、潜在的な脅威に対してどのように対処するかを決定するために使用することができます。 - -これらを試してみます。controller インスタンスからログアウトし、ファイアウォールのユーザー `opsfirewall` としてログインします。デモを簡単にするために、パスワードは Student と同じにしています。ログインしてダッシュボードが表示されたら、**Templates** に移動します。ご覧のように、ファイアウォール管理者としては、いくつかのジョブテンプレートしか見ることができず、実行することができません: - -- **Blacklist attacker** -- **Send firewall logs to QRadar** -- **Whitelist attacker** - -私たちはファイアウォールのドメイン所有者なので、これらのジョブテンプレートを変更、削除、実行することができます。テンプレートの横にある小さなロケットアイコンをクリックして、**Send firewall logs to QRadar** を実行します。ジョブの実行には数秒かかります。ファイアウォールオペレータの観点から、中央の SIEM にログを送信するようにファイアウォールを再設定しました。 - -ただし、SIEM はログを受け入れ、それらを QRadar ではログソースと呼ばれる適切なストリームに振り分ける必要があります。セキュリティアナリストの観点に切り替えます。ファイアウォールに何か奇妙なものがあり、ログがすでに我々の方向に送信されているという連絡を受けました。controller からログアウトして、ユーザ `analyst` としてログインします。再度、**Templates** を確認します。手元にある自動化テンプレートの別のリストがあります。私たちは、自分の仕事に関連するものだけを表示して使用できます。ファイアウォールログを SIEM に受け入れます: **Accept firewall logs in QRadar** ジョブテンプレートを実行してください。 - -数秒後に Playbook が実行され、新しいセキュリティ設定が完了します。前の演習とは異なり、これらのステップでは、オペレータやアナリストがコマンドラインにアクセスしたり、Playbook を作成したり、Role や Collection をインストールしたりする必要はありませんでした。Playbook は事前に承認されており、実際には Git リポジトリ内からアクセスできます。controller は、Role や Collection の実行とダウンロードを担当しました。これにより、自動化作業が大幅にシンプルになりました。 - -右側の **Jobs** をクリックすると、以前に実行したジョブにいつでもアクセスすることができます。これにより、チームはいつ何が実行され、どのような結果が得られたかをより適切に追跡することができます。これにより、実行された自動化の透明性と明確な理解が可能になります。 - -## Step 2.6 - 新しい設定を確認する - -QRadar のログが表示されるようになったことを早速確認します。QRadar の Web UI にログインします。**Log Activity** をクリックして、Check Point から QRadar にイベントが送信されていることを確認します: - -![QRadar Log Activity showing logs from Check Point](images/qradar_checkpoint_logs.png) - -> **Note** -> -> ログが表示されない場合は、**View** の隣にあるドロップダウンメニューをクリックして、**Real Time (streaming)** を選択します。 - -ログが QRadar 自身のログにかき消されてしまう場合は、フィルタを作成します。または、**Log Source** の欄で不要なログ行をクリックして、**Filter on Log Source is not ...** を選択すると、その場でフィルタを作成して、不要なトラフィックをフィルタリングします。 - -QRadar でもログソースが正しく表示されることを確認します。QRadar UI で、左上隅のハンバーガーボタンをクリックし、**Admin** をクリックします。その中から、**Log Souces** をクリックします。新しいウィンドウが開き、新しいログソースが表示されます。 - -![QRadar Log Sources](images/qradar_log_sources.png) - -## Step 2.7 - 違反 - -次に、QRadar に表示される違反を管理します。現在は生成されていませんが、このユースケースのためにいくつかはすでに設定されていますか?QRadar の Web UI で、**Offenses** タブを開きます。左側のメニューで、**Rules** をクリックします。上の **Group** の隣にあるドロップダウンメニューをクリックして **Ansible** を選択します。このワークショップのすべての事前設定された違反ルールが表示されます: - -![QRadar Preconfigured Rules](images/qradar_preconfigured_rules.png) - -**Ansible Workshop DDOS Rule** というルールをダブルクリックします。ルールウィザードウィンドウが開き、必要に応じて攻撃ルールを変更することができます: - -![QRadar Rules Wizard](images/qradar_rule_wizard.png) - -ウィザードから、チェック(ウィンドウ内の2番目のボックス)をほとんど使用していないことが分かります。ルールは、さらに複雑になる可能性があり、他のルールに依存する可能性もあるため、攻撃を作成する必要はありませんが、例えば、追加のログエントリを作成することができます。ここでは何も変更を行いため、右下の **Cancel** をクリックしてウィザードを閉じ、ブラウザのクローズ警告を確認します。 - -この違反が誤検知であるかを判断するには、他のソースがファイアウォールでは見られない攻撃を実行していないことを確認する必要があります。そのためには、IDS が生成したログにアクセスし、ファイアウォール上の違反と互換性のある特定の攻撃パターンをチェックする必要があります。 - -## Step 2.8 - Snort ルールを追加する - -新しい IDS ルールを追加します。ここでも、controller に既にある事前承認済みの Playbook を使って行います。controller からログアウトし、ユーザー `opsids` (IDPS を担当する IDPS オペレータ)としてログインします。**Templates** に移動します。Snort にルールを追加するための Playbook が用意されています。小さなロケットのアイコンをクリックして実行します。しかし、ご覧のとおり、ジョブの出力に移動するのではなく、調査に直面します。 - -![automation controller survey](images/controller_snort_survey.png) - -Playbook はそれ以上のコンテンツなしに実行できません。展開する必要がある実際のルールを提供する必要があります!もちろん、Snort では、追加する必要のあるルールは実際のユースケースに依存するため、毎回異なる可能性があります。したがって、このジョブテンプレートでは ***survey*** を有効にしています。これは automation controller で実行前に入力を問い合わせるためのメソッドです。 - -この場合、適切なシグネチャ、つまりこの特定の攻撃に適した Snort ルールを照会します。フィールドに次の文字列を入力します: - -``` -alert tcp any any -> any any (msg:"Attempted DDoS Attack"; uricontent:"/ddos_simulation"; classtype:successful-dos; sid:99000010; priority:1; rev:1;) -``` - -ご覧のように、攻撃のパラメータにマッチする新しい Snort ルールを追加します。この例では、再び URI の内容をチェックします。文字列を追加後、**Next** をクリックし、**Launch** をクリックします。 - -Playbook が実行され、新しいルールのインストール、サービスの再起動などが処理されます。 - -Snort インスタンス上の新しいルールを素早く検証します。VS Code オンラインエディタのターミナルから、ユーザ `ec2user` で SSH で Snort サーバにログインします: - -```bash -[student@ansible ~]$ ssh ec2-user@11.22.33.44 -Last login: Fri Sep 20 15:09:40 2019 from 54.85.79.232 -[ec2-user@snort ~]$ sudo grep ddos_simulation /etc/snort/rules/local.rules -alert tcp any any -> any any (msg:"Attempted DDoS Attack"; uricontent:"/ddos_simulation"; classtype:successful-dos; sid:99000010; priority:1; rev:1;) -``` - -> **Note** -> -> また、`systemctl status snort` で Snort サービスが実行されていることを確認します。致命的なエラーがある場合は、入力したルールにエラーがある可能性があります。ファイル `/etc/snort/rules/local.rules` からルールの行を削除し、Playbook を再度実行します。 - -ルールを確認したら、`exit` コマンドで Snort サーバからログアウトします。 - -次に、ルールがヒットした場合に IDPS が QRadar にログを送信するようにします。ユーザ `opsids` として対応するジョブテンプレートを実行することができます。ただし、今回は別の方法を使用します。IDPS オペレータが用意された Playbook を実行するのではなく、automation controller がどのようにして他の人に実行権限を委譲し、ドメインの制御を取らせることなく実行できるかを示したいと思います。 - -アナリストチームと IDPS オペレータチームが、IDPS から QRadar にログを転送するために事前定義された Playbook に合意したと想定してください。IDPS チームはこの Playbook の作成に関与し、同意したので、アナリストチームに提供し、必要なときにいつでも実行できるようにします。 - -controller からログアウトして、ユーザー `analyst` として再ログインしてください。**Templates** セクションには、複数の Playbook があります: - -- **Accept firewall logs in QRadar** -- **Accept IDPS logs in QRadar** -- **Roll back all changes** -- **Send IDPS logs to QRadar** - -2つの **Accept...** ジョブテンプレートのみがアナリストのものであり、小さなゴミ箱のアイコンが示すように、変更や削除が可能です。ジョブテンプレート **Send IDPS logs to QRadar** は、IDPS チームが実行権限のためだけに提供しているため、変更や削除はできません。このようにして、自動化を実行する権利はチームの境界を越えて提供され、変更や変更の権利はドメイン知識を持つチーム(ここでは IDPS チーム)にあります。IDPS へのアクセスには SSH キーが必要です。これらはジョブテンプレートで参照されていますが、ユーザーアナリストは controller の **Credentials** セクションでその内容を調べることはできません。このようにして、自動化を実行する権利とターゲットマシンにアクセスする権利の分離が保証されます。 - -**Accept IDPS logs in QRadar** と **Send IDPS logs to QRadar** の両方のジョブテンプレートを実行するため、ジョブテンプレートの横にある小さなロケットのアイコンを押します。 - -## Step 2.9 - ホワイトリスト IP - -SIEM QRadar を確認します: **Log Activity** タブにアクセスします。QRadar で IDS からの **no** イベントが生成されていないことを確認します。こうすることで、表示された違反がファイアウォールにある単一の IP によってのみ引き起こされていることを確実に分かります。他のトラフィックが違反の原因となっていないため、表示された違反は誤検知であると想定できます。 - -> **Note** -> -> 実際には、マシンの動作を分析する追加のステップを実行して、マシンが危険にさらされている可能性を除外することができます。 - -ホストが攻撃を行っていないと判断し、最終的にファイアウォールのポリシー違反が誤検知であることを確認しました。これは恐らくアプリケーションのホワイトリストグループの設定ミスによるものだと考えられます。そのため、ファイアウォール内の IP をホワイトリストに登録し、イベントを通過させることができます。 - -controller からログアウトし、ユーザ `opsfirewall` として再ログインします。**Templates** の概要に移動し、ジョブテンプレート **Whitelist attacker** を実行します。しばらくするとトラフィックが許可されます。 - -## Step 2.10 - ロールバック - -アナリストは脅威の探索を終了しました。リソースの消費と分析のワークロードを削減するため、Check Point と Snort ログの設定を調査前の状態に戻すことをお勧めします。そのためには、事前に承認されたジョブ テンプレートを使用します: - -- **Roll back all changes** - -automation controller にユーザー `analyst` としてログインし、その横にある小さなロケットアイコンをクリックして実行します。すぐにすべてのロギング設定が通常の状態に戻ります。 - -最後に、攻撃シミュレーションを止める必要があります。controller からログアウトし、Student ユーザーとしてログインします。**Templates** のセクションで、**Stop DDOS attack simulation** というジョブテンプレートを見つけて実行します。 - -これで演習は終了です。次の演習を続けるために、演習のリストに戻ってください。 - ----- - -[Ansible Security Automation Workshopの表紙に戻る](../README.ja.md) +# 演習 2.2: 脅威ハンティング + +**他の言語でもお読みいただけます**:
+[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoleInventory nameHostnameUsernamePassword
Ansible Control Hostansibleansible-1--
IBM QRadarqradarqradaradminAnsible1!
Attackerattackerattacker--
Snortsnortsnort--
Check Point Management Servercheckpointcheckpoint_mgmtadminadmin123
Check Point Gateway-checkpoint_gw--
Windows Workstationwindows-wswindows_wsadministratorProvided by Instructor
+
+

Note

+

+ The workshop includes preconfigured SSH keys to log into Red Hat Enterprise Linux hosts and don't need a username and password to log in.

+
+
+ +## ステップ 2.1 - 背景 + +脅威の検出および対応機能では、通常、セキュリティーオペレーターは、企業の IT +を保護するための多くのツールをデプロイする必要があります。これは、プロセスが欠落したり、手作業が多かったりするため、適切な IT +セキュリティー運用にとって深刻な課題となっています。 + +この演習では、私たちは大規模な組織のエンタープライズファイアウォールを担当するセキュリティーオペレーターであると前提とします。ここで使用するファイアウォール製品は、Point +Next Generation Firewall.です。この演習では、さまざまなチーム間のやりとりに特に焦点を当て、それらのやりとりを +[automation +controller](https://docs.ansible.com/automation.html). でどのように効率化できるかを考えます。 + +## ステップ 2.2 - 準備 + +前の演習と同じように、前の [Check Point 演習](../1.2-checkpoint/README.md) +でいくつかの手順が完了していることを確認する必要があります。 + +1. `whitelist_attacker.yml` Playbook は、少なくとも 1 回実行されている必要があります。 +2. また、攻撃者のホワイトリストポリシーのロギングが、Check Point SmartConsole でアクティベートされている必要があります。 + +いずれも [Check Point 演習](../1.2-checkpoint/README.md) +で行いました。これらの手順を飛ばしている場合は、手順に戻って Playbook +を実行し、手順に従ってロギングをアクティベートしてから、こちらに戻ってきてください。 + +## Step 2.3: コントローラーの設定を調べる + +準備にはさらに 2 +つの手順が必要ですが、前の演習とは対照的に、自動化コントローラーを使用してこれを実行します。自動化コントローラのインストールには、ユーザー、インベントリー、認証情報などがすでに入力されており、直接使用することができます。では、詳しく見ていきましょう。 + +自動化コントローラーはブラウザー経由でアクセスされます。パーソナルコントローラーインスタンスへの URL が必要です。これは、VS Code +のオンラインエディターの URL に似ていますが、`-code` がついていません。ワークショップのページで確認することもできます。 + +![Controller URL example](images/controller_url.png#centreme) + +> **注記** +> +> この URL とログイン情報は一例です。お使いのコントローラーの URL とログイン情報は異なります。 + +ブラウザーを開き、自動化コントローラーインスタンスへのリンクを入力します。受講者 ID +と、指定したパスワードを使用してログインします。ダッシュボードと、左側のナビゲーションバーが表示されます。 + +![Automation controller dashboard](images/controller_dashboard.png#centreme) + +左側の **Templates** +をクリックします。すでに設定されたすべてのジョブテンプレートの一覧が表示されます。ジョブテンプレートは、Ansible +ジョブを実行するための定義およびパラメーターセットです。これは、自動化の実行に必要なインベントリー、認証情報、Playbook、制限、become +権限などを定義します。この一覧で、**Blacklist attacker** +と呼ばれるエントリーを見つけ、その右側にあるロケットのアイコンをクリックします。 + +![Blacklist attacker](images/controller_blacklist.png#centreme) + +このクリックでジョブの概要が表示され、自動化ジョブ実行のライブデータと、ジョブに関連するすべてのパラメーターの概要が表示されます。この自動化の実行により、2 +台のマシン間でパッケージをドロップするようにファイアウォールの既存のポリシーを変更しました。 + +これで、必要なのは攻撃だけとなりました。前回の演習とは異なり、Playbook +を書いて実行するのではなく、ここでもコントローラーを使って攻撃を開始します。左側のナビゲーションバーで、**Templates** +をクリックします。テンプレートのリストの中から、**Start DDOS attack simulation** +という名前のテンプレートを探し、その右側にあるロケットのアイコンをクリックして、これを実行します。これにより、数秒ごとに攻撃のシミュレーションが行われます。 + +これで準備は完了しました。このユースケースの概要を知るには、次へと進んでください。 + +## ステップ 2.4 - 攻撃の確認 + +あなたは大規模な組織のエンタープライズファイアウォールを担当するセキュリティーオペレーターです。ビジネスアプリケーションを保護する Check +Point Next Generation Firewall (NGFW) +よって適用されるポリシーが、繰り返し違反されていることに気づきました。これを確認するには、Windows ワークステーションで SmartConsole +を開き、Check Point 管理サーバーにアクセスし、左側の **LOGS & MONITOR** +タブをクリックします。新しいウィンドウが開き、**Audit Logs** および **Logs** の 2 つの選択肢が表示されます。**Logs** +をクリックし、ログの実際のビューを表示します。 + +>**Check Point NGFW Credentials** +> +> Username: `admin` +> Password: `admin123` +> + +![Check Point logs view, violation +logs](images/smartconsole_violation_logs.png#centreme) + +ご覧のとおり、**http Traffic Dropped** という説明が付いた一連のメッセージが、時間の経過とともに何度も繰り返されています。 + +> **注記** +> +> ログが表示されない場合は、自動更新が有効になっていない可能性があります。その場合は、対応するボタン (丸印の隣にある A) をクリックしてください。 + +![Check Point logs view, auto refresh +button](images/smartconsole_auto_refresh.png#centreme) + +このような違反があった場合、これらが攻撃の結果であるかどうかを評価するために調査を開始する必要があります。調査のための最良の方法は、QRadar +のようなログ管理ツールで、ファイアウォールのログを、ネットワークにデプロイされている他のセキュリティーソリューション (Snort など) +で生成されたログと相関させることです。 + +## ステップ 2.5: QRadar へのログの転送 + +しかし、前述したように、多くの企業環境では、セキュリティーソリューションが互いに統合されておらず、大規模な組織では、さまざまなチームが IT +セキュリティーのさまざまな側面を担当しており、共通のプロセスはありません。このシナリオでは、セキュリティーオペレーターが問題をエスカレーションして調査を開始する一般的な方法は、セキュリティー分析チームに連絡し、ルール違反を特定するために使用したファイアウォールログを手動で送信し、応答を待つというものでした。これは、時間のかかる、手動によるプロセスです。 + +しかし、前回の演習で示したように、Ansible Automation Platform +を使ってこのプロセスを自動化することができます。自動化コントローラーのような中央自動化ツールを介して、Playbook +の形式で事前に承認された自動化ワークフローを用意することができます。このような一連の Ansible Playbook +があれば、脅威ハンティングの状況になるたびに、エンタープライズファイアウォールがイベントやログを QRadar +インスタンスに送信するように自動的に設定することができます。セキュリティーアナリストは、QRadar +インスタンスを使用してデータを相互に関連付け、潜在的な脅威に対処する方法を決定します。 + +これを試してみましょう。コントローラーのインスタンスからログアウトし、ファイアウォールユーザーである `opsfirewall` +でログインします。デモを簡単にするために、パスワードは受講者ユーザーのものと同じになります。ログインしてダッシュボードが表示されたら、**Templates** +に移動します。ご覧のように、ファイアウォール管理者として、表示および実行できるジョブテンプレートはごくわずかです。 + +- **Blacklist attacker** - **Send firewall logs to QRadar** - **Whitelist +attacker** + +ファイアウォールのドメイン所有者であるため、これらのジョブテンプレートを変更、削除、および実行することができます。テンプレート **Send +firewall logs to QRadar** +の横にある小さなロケットのアイコンをクリックして、これを実行してみましょう。ジョブの実行には数秒かかります。ファイアウォールオペレーターの観点では、これでファイアウォールが中央の +SIEM にログを送信するように再構成されました。 + +ただし、SIEM は引き続きログを受け入れ、QRadar +のログソースと呼ばれる適切なストリームに分類する必要があります。視点をセキュリティーアナリストの立場に切り替えてみましょう。ファイアウォールで何か変なことが起きているという連絡があり、すでにログがこちらに送られてきました。コントローラーからログアウトし、`analyst` +ユーザーとしてログインし直します。再度、**Templates** +を確認してください。ここでも、自動化テンプレートの別のリストが手元にあります。このうち、自分たちのジョブに関連するものだけを確認して使用することができます。ファイアウォールログを +SIEM に許可してみましょう。ジョブテンプレート **Accept firewall logs in QRadar** を実行します。 + +Playbook +は数秒後に実行され、新しいセキュリティー設定が完了します。前回の演習とは対照的に、これらの手順では、オペレーターやアナリストがコマンドラインへアクセスしたり、Playbook +を書いたり、ロールまたはコレクションをインストールしたりする必要はありませんでした。Playbook は事前に承認され、実際には Git +リポジトリー内からアクセスされていました。自動化コントローラーは、実行のほか、ロールまたはコレクションのダウンロードにも対応していました。これにより、自動化操作が大幅に簡素化されます。 + +右側の **Jobs** +をクリックすると、以前実行したジョブに常にアクセスできることが確認できます。これにより、チームは何がいつ実行され、どのような結果になったかをより正確に追跡することができます。これにより、実行された自動化の透過性と明確な理解が可能になります。 + +>**注記** +> +> ジョブは、ジョブテンプレートを起動する自動化コントローラーのインスタンスです。***Jobs** リンクには、ジョブのリストとステータスが表示されます。ステータスは、正常に完了したか失敗したか、またはアクティブな (実行中の) ジョブであるかのいずれかで表示されます。 + +## ステップ 2.6 - 新しい設定の確認 + +QRadar のログが表示されるようになったことを簡単に確認してみましょう。QRadar の Web UI にログインします。**Log +Activity** をクリックし、Check Point から QRadar にイベントが送信されていることを確認します。 + +>**IBM QRadar Credentials** +> +> Username: `admin` +> Password: `Ansible1!` +> + +![QRadar Log Activity showing logs from Check +Point](images/qradar_checkpoint_logs.png#centreme) + +> **注記** +> +> 入ってくるログが表示されない場合は、**View** の横にあるドロップダウンメニューをクリックし、**Real Time (streaming)** を選択します。 + +ログが、QRadar 独自のログに埋もれてしまう場合は、フィルターを作成します。または、**Log Source** +列の不要なログ行をクリックし、**Filter on Log Source is not ...** +を選択すると、不要なトラフィックをフィルタリングするためのフィルターをその場で作成することができます。 + +QRadar がログソースもきちんと表示するか確認してみましょう。QRadar の UI +で、左上隅のハンバーガーボタンをクリックしてから、**Admin** をクリックします。そこで **Log Sources** +をクリックします。新しいウィンドウが開き、新しいログソースが表示されます。 + +![QRadar Log Sources](images/qradar_log_sources.png#centreme) + +## ステップ 2.7 - オフェンス + +次に、QRadar +に表示されるオフェンスを管理する必要があります。現在は何も生成されていませんが、このユースケースのためにあらかじめ設定されているものがあるでしょうか? +QRadar Web UI で、**Offenses** タブを開きます。左側のメニューで **Rules** をクリックします。その上の +**Group:** ドロップダウンメニューの中から、**Ansible** +を選択します。このワークショップ用に事前に設定されたオフェンスルールがすべて表示されます。 + +![QRadar Pre-configured +Rules](images/qradar_preconfigured_rules.png#centreme) + +**Ansible Workshop DDOS Rule** +というルールをダブルクリックします。ルールウィザードウィンドウが開き、必要に応じてオフェンスルールへの変更が可能になります。 + +![QRadar Rules Wizard](images/qradar_rule_wizard.png#centreme) + +ウィザードから、使用するチェックがごくわずかであることがわかります。(ウィンドウの 2 +番目のボックス)。ルールはもっと複雑にすることができ、他のルールに依存することもできます。その結果、オフェンスを作成する必要はありませんが、たとえば、追加のログエントリーを作成することができます。ここでは何も変更しませんので、右下隅の +**Cancel** をクリックしてウィザードを終了し、ブラウザーの終了警告を確認してください。 + +この違反が誤検出であるかどうかを判断するためには、ファイアウォールに表示されないような攻撃を他のソースが実行していないことを確認する必要があります。そのためには、IDS +によって生成されたログにアクセスし、ファイアウォールでの違反と互換性のある特定の攻撃パターンを確認する必要があります。 + +## ステップ 2.8: Snort ルールの追加 + +新しい IDS ルールを追加してみましょう。ここでも、すでにコントローラー内にある事前承認済みの Playbook +を使って行います。コントローラーからログアウトし、`opsids` ユーザー (IDPS 担当の IDPS オペレーター) +としてログインします。**Templates** に移動します。Snort にルールを追加するために利用できる **Add IDPS Rule** +という事前に作成されたジョブテンプレートがあります。小さいロケットのアイコンをクリックして、これを実行します。ところが、ご覧のように、ジョブの出力画面ではなく、アンケートが表示されます。 + +![Automation controller survey](images/controller_snort_survey.png#centreme) + +Playbook はコンテンツを追加せずに実行することはできません。デプロイする必要がある実際のルールを指定する必要があります。当然ながら、Snort +では、追加する必要のあるルールは実際のユースケースによって異なるため、毎回異なる可能性があります。そこで、このジョブテンプレートでは、実行前に入力をクエリーする自動化コントローラーのメソッドである +***survey*** を有効にしています。 + +この場合、適切な署名、つまりこの特定の攻撃に対する適切な Snort ルールをクエリーします。フィールドに以下の文字列を入力します。 + +``` +alert tcp any any -> any any (msg:"Attempted DDoS Attack"; uricontent:"/ddos_simulation"; classtype:successful-dos; sid:99000010; priority:1; rev:1;) +``` + +ご覧のとおり、攻撃のパラメーターに一致する新しい Snort ルールを追加しています。この例では、再び URI +コンテンツをチェックします。文字列の追加後、**Next** をクリックしてから **Launch** をクリックします。 + +Playbook が実行され、新しいルールのインストール、サービスの再起動などの処理が行われます。 + +Snort インスタンスで新しいルールをすばやく確認します。VS Code のオンラインエディターのターミナルから、`ec2-user` +ユーザーを使用して SSH 経由で Snort にログインします。 + +```bash +[student@ansible-1 ~]$ ssh ec2-user@snort +Last login: Fri Sep 20 15:09:40 2019 from 54.85.79.232 +[ec2-user@snort ~]$ sudo grep ddos_simulation /etc/snort/rules/local.rules +alert tcp any any -> any any (msg:"Attempted DDoS Attack"; uricontent:"/ddos_simulation"; classtype:successful-dos; sid:99000010; priority:1; rev:1;) +``` + +> **注記** +> +> また、snort サービスが `sudo systemctl status snort` 経由で実行されていることを確認します。致命的なエラーがある場合は、入力したルールでエラーが発生した可能性があります。ファイル `/etc/snort/rules/local.rules` からルール行を削除して、Playbook を再び実行します。 + +ルールを確認したら、`exit` コマンドで Snort サーバーを終了します。 + +次に、ルールがヒットした場合に IDPS が QRadar にログを送信するようにします。これは、対応するジョブテンプレートを `opsids` +ユーザーとして実行するだけで済みます。ただし、今回は別のパスを使用します。IDPS オペレーターが準備された Playbook +を実行する代わりに、自動化コントローラーが、他のユーザーにドメインを制御させることなく、そのような実行権を委任できる方法を紹介します。 + +アナリストチームと IDPS オペレータチームが、IDPS から QRadar にログを転送するための事前定義された Playbook +に合意したとします。IDPS チームはこの Playbook の作成に関与し、合意しているため、Playbook +をアナリストチームに提供します。アナリストチームは、IDPS チームの関与なしに、必要なときにいつでも Playbook を実行することができます。 + +コントローラーからログアウトし、`analyst` ユーザーとしてログインし直します。**Templates** セクションには、複数の +Playbook があります。 + +- **Accept firewall logs in QRadar** - **Accept IDPS logs in QRadar** - +**Roll back all changes** - **Send IDPS logs to QRadar** + +2 つの **Accept...** +ジョブテンプレートのみがアナリストに属し、これらを修正したり、たとえば、小さなゴミ箱のアイコンからもわかるように、削除したりすることができます。ジョブテンプレート +**Send IDPS logs to QRadar** +は、実行権限のためだけに提供されているため、修正や削除はできず、実行のみが可能です。これにより、自動化を実行する権利がチームの枠を越えて提供されますが、修正や変更の権利はドメイン知識を持つチーム +(ここでは IDPS チーム) が維持したままとなります。また、認証情報にも注意してください。IDPS へのアクセスには SSH +キーが必要です。これらはジョブテンプレートで参照されますが、ユーザーアナリストは、コントローラーの **Credentials** +セクションでその内容を検索することはできません。このようにして、自動化を実行する権利を、ターゲットマシンにアクセスする権利から確実に分離することができます。 + +ここで、ジョブテンプレートの横にある小さなロケットのアイコンを押して、**Accept IDPS logs in QRadar** および **Send +IDPS logs to QRadar** の両方のジョブテンプレートを実行します。 + +## ステップ 2.9 - ホワイトリストへの IP 登録 + +SIEM QRadar を簡単に見てみましょう。ログアクティビティタブにアクセスします。QRadar で IDS からのイベントが +**生成されていない** ことを確認します。そうすれば、表示されている異常が、ファイアウォールにある 1 つの IP +によってのみ引き起こされていることを確実に知ることができます。他のトラフィックが異常を引き起こしていないため、表示されている異常は誤検出であると考えても問題ありません。 + +> **注記** +> +> 実際には、マシンの動作を分析する追加の手順を実行して、不正アクセスの可能性を排除することがあります。 + +ホストが攻撃を行っていないと判断し、ファイアーウォールのポリシー違反が誤検出であることを最終的に確認しました。これは、おそらくそのアプリケーションのホワイトリストグループの設定ミスが原因だと思われます。そこで、ファイアウォールでその +IP をホワイトリストに登録し、イベントを通過させることができます。 + +コントローラーからログアウトして、`opsfirewall` ユーザーとしてログインし直します。**Templates** +の概要に移動し、ジョブテンプレート **Whitelist attacker** を起動します。しばらくすると、トラフィックが許可されます。 + +QRadar が Snort のログイベントを正しく表示することを確認してみましょう。QRadar の UI で、上部の **Log +Activity** メニューをクリックします。以下のような **Snort rsyslog source** +からのログエントリーが表示されるはずです。 + +![QRadar Snort logs](images/qradar_snort_logs.png#centreme) + + +## ステップ 2.10 - ロールバック + +アナリストは脅威ハンティングを終了しました。リソース消費とアナリストのワークロードを減らすには、Check Point と Snort +のログ設定を調査前の状態にロールバックすることをお勧めします。これを行うには、アナリストは **Roll back all changes** +と呼ばれる事前承認済みのジョブテンプレートを利用できます。 + +`analyst` ユーザーとして自動化コントローラーにログインし、**Roll back all changes** +ジョブテンプレートの隣りにある小さなロケットのアイコンをクリックし、これを実行します。すぐにすべてのロギング設定が正常に戻ります。 + +最後に、攻撃シミュレーションを停止する必要があります。コントローラーからログアウトして、受講者 (admin) +ユーザーとしてログインし直します。**Templates** のセクションで、*Stop DDOS attack simulation** +というジョブテンプレートを検索して実行します。 + +これで演習は終わりました。次の演習に進むには、演習のリストへ戻ってください。 + +---- + +**Navigation** +

+[Previous Exercise](../2.1-enrich/README.md) | [Next Exercise](../2.3-incident/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/2.3-incident/README.ja.md b/exercises/ansible_security/2.3-incident/README.ja.md index 59f00fd97..6dabb1737 100644 --- a/exercises/ansible_security/2.3-incident/README.ja.md +++ b/exercises/ansible_security/2.3-incident/README.ja.md @@ -1,249 +1,421 @@ -# 演習 2.3 - Incident response - -**Read this in other languages**:
-[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
- -## Step 3.1 - 背景 - -この演習では、脅威の検出と対応能力に焦点を当てます。いつものように、セキュリティオペレータは、このタスクを実行するためにエンタープライズ IT の一連のツールを必要とします。 - -あなたは企業の IDS を担当するセキュリティオペレーターです。私たちの選択した IDS は Snort です。 - -## Step 3.2 - 準備 - -この演習では、Snort でログを見る操作から始めます。まず最初に実際にログエントリを生成するための Snort ルールを設定する必要があります。VS Code オンラインエディタで、Playbook を作成して実行します `incident_snort_rule.yml` : - - -```yml ---- -- name: Add ids signature for sql injection simulation - hosts: ids - become: yes - - vars: - ids_provider: snort - protocol: tcp - source_port: any - source_ip: any - dest_port: any - dest_ip: any - - tasks: - - name: Add snort sql injection rule - include_role: - name: "ansible_security.ids_rule" - vars: - ids_rule: 'alert {{protocol}} {{source_ip}} {{source_port}} -> {{dest_ip}} {{dest_port}} (msg:"Attempted SQL Injection"; uricontent:"/sql_injection_simulation"; classtype:attempted-admin; sid:99000030; priority:1; rev:1;)' - ids_rules_file: '/etc/snort/rules/local.rules' - ids_rule_state: present -``` - - -Playbook を実行できるようにするため `ids_rule` に、前回の Snort の演習で行ったように、用意された Role を使用して IDS ルールを変更します。それを逃していた場合には、次の方法でインストールしてください。 -`ansible-galaxy install ansible_security.ids_rule` - -同じことが Role の `ids.config` にも当てはまります。 -`ansible-galaxy install ansible_security.ids_config` - -Playbook を実行します: - -```bash -[student@ansible ~]$ ansible-navigator run incident_snort_rule.yml -``` - -これらのルールでログを生成するには、疑わしいトラフィック、つまり攻撃が必要です。繰り返しになりますが、automation controller を介して攻撃シミュレーションを開始できます。ブラウザを開き、automation controller インスタンスへのリンクを入力します。提供された student ID とパスワードを使用してログインします。 - -左側のナビゲーションバーで、**Templates** をクリックします。テンプレートのリストで、右のロケットアイコンをクリックして、**Start SQL injection simulation** と呼ばれるテンプレートを見つけて実行します。これにより、数秒ごとに攻撃がシミュレートされます。これでautomation controller ブラウザタブを閉じることができます。この演習では、これを再度必要とすることはありません。 - -また、QRadar コレクションも必要です。これは前回の QRadar 演習で既にインストールされています。その部分を見逃した場合は、次の方法でインストールしてください。`ansible-galaxy collection install ibm.qradar` - -また、両方のマシン間のトラフィックを通過させるには、最初の Check Point の演習で2つのことを完了させておく必要があります: 最初に、Playbook `whitelist_attacker.yml` を実行する必要があります。次に、攻撃者のホワイトリストポリシーのロギングが有効になっている必要があります。これらの手順をやり逃した場合は、最初の Check Point 演習に戻り、Playbook を作成して実行し、手順に従ってロギングを有効にしてから、ここに戻ってください。 - -これで舞台は整いました。このユースケースが何であるかを学ぶためにお読みください。 - -## Step 3.3 - インシデントを特定する - -企業の IDS を担当するセキュリティオペレータとして、あなたは日常的にログを確認します。VS Code オンラインエディタのターミナルから、ユーザ `ec2-user` として Snort ノードに SSH で接続し、ログを表示します: - -```bash -[ec2-user@ip-172-16-11-22 ~]$ journalctl -u snort -f --- Logs begin at Sun 2019-09-22 14:24:07 UTC. -- -Sep 22 21:03:03 ip-172-16-115-120.ec2.internal snort[22192]: [1:99000030:1] Attempted SQL Injection [Classification: Attempted Administrator Privilege Gain] [Priority: 1] {TCP} 172.17.78.163:53376 -> 172.17.23.180:80 -Sep 22 21:03:08 ip-172-16-115-120.ec2.internal snort[22192]: [1:99000030:1] Attempted SQL Injection [Classification: Attempted Administrator Privilege Gain] [Priority: 1] {TCP} 172.17.78.163:53378 -> 172.17.23.180:80 -Sep 22 21:03:13 ip-172-16-115-120.ec2.internal snort[22192]: [1:99000030:1] Attempted SQL Injection [Classification: Attempted Administrator Privilege Gain] [Priority: 1] {TCP} 172.17.78.163:53380 -> 172.17.23.180:80 -``` - -ご覧のように、このノードは **Attempted Administrator Privilege Gain** の複数のアラートを登録しました。`CTRL-C` を押してログビューを終了します。 - -Snort ログの詳細をさらに詳しく知りたい場合は、Snortマシン上のファイル `/var/log/snort/merged.log` の内容を確認してください: - -```bash -[ec2-user@ip-172-16-180-99 ~]$ sudo tail -f /var/log/snort/merged.log -Accept: */* -[...] -GET /sql_injection_simulation HTTP/1.1 -User-Agent: curl/7.29.0 -Host: 172.17.30.140 -Accept: */* -``` -一部の奇妙な文字に加えて、ユーザの実際の不正な「攻撃」が `sql_injection_simulation` という文字列の形で表示されます。`exit` コマンドで Snort サーバから抜けます。 - -## Step 3.4 - ログを QRadar に転送するための Playbook を作成し実行する - -このインシデントをより良く分析するためには、他のソースとデータを相関させることが重要です。そのためには、ログを SIEM である QRadar に与えたいと考えています。 - -ご存知のように、様々なセキュリティツールがお互いに統合されていないため、IDS を担当するセキュリティオペレータは、別チームに手動で連絡を取るか、電子メールでログを転送しなければなりません。あるいは、FTP サーバーにアップロードしたり、最悪の場合は USB スティックを持ち運んだりしなければなりません。幸いにも、前の演習で示したように、Ansible を使って Snort と Qradar を設定することができます。 - -VS Code オンラインエディタで、`incident_snort_log.yml` という Playbook を以下のように作成します: - - -```yaml ---- -- name: Configure snort for external logging - hosts: snort - become: true - vars: - ids_provider: "snort" - ids_config_provider: "snort" - ids_config_remote_log: true - ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" - ids_config_remote_log_procotol: udp - ids_install_normalize_logs: false - - tasks: - - name: import ids_config role - include_role: - name: "ansible_security.ids_config" - -- name: Add Snort log source to QRadar - hosts: qradar - collections: - - ibm.qradar - - tasks: - - name: Add snort remote logging to QRadar - qradar_log_source_management: - name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" - type_name: "Snort Open Source IDS" - state: present - description: "Snort rsyslog source" - identifier: "{{ hostvars['snort']['private_ip']|regex_replace('\\.','-')|regex_replace('^(.*)$', 'ip-\\1') }}" - - - name: deploy the new log sources - qradar_deploy: - type: INCREMENTAL - failed_when: false -``` - - -この Playbook は見慣れているはずです。Snort が QRadar にログを送信するように設定し、QRadar がログを受信するように設定し、Offence を有効にします。それを実行してください: - -```bash -[student@ansible ~]$ ansible-navigator run incident_snort_log.yml -``` - -## Step 3.5 - QRadar の新しい設定を確認する - -パースペクティブを簡単にセキュリティアナリストの視点に変更しましょう。主に SIEM を使用しており、Snort からログを取得しています。これを確認するには、QRadar UI にアクセスして、**Log Activity** タブを開いて、イベントが Snort から QRadar に送信されていることを確認します。 - -![QRadar logs view, showing logs from Snort](images/qradar_incoming_snort_logs.png) - -QRadar ログビューにフィルターを追加すると、より良い概要を得ることができます。これらのログには、すでに左側にオフェンスマーカーが表示されていることに注意してください! - -> **Note** -> -> ログが表示されない場合は少し待ってください。最初のエントリが表示されるまでに1分以上かかるかもしれません。また、最初のログは "デフォルト "のログソース(**Snort rsyslog source**ではなく**SIM Generic Log DSM-7**と表示されます)で識別される可能性がありますので、少し時間をおいてください。 - -**Offence** タブで、**Error Based SQL Injection** のオフェンスのリストをフィルタリングします。オフェンスサマリーを開いて、以前に Snort ログで確認した攻撃者の IP アドレスの詳細を確認します。 - -## Step 3.6 - ブラックリスト IP - -手元にある全ての情報から、このイベントは攻撃であると確信しています。だから防ぎましょう!攻撃者のソース IP を ブラックリストに登録します。 - -一般的な環境では、この改善策を実行するには、ファイアウォールを担当するセキュリティオペレータとのやりとりが必要になります。しかし、数時間や数日ではなく、数秒で同じ目標を達成するためには Ansible の Playbook を起動することで実現できます。 - -VS Code オンラインエディタで `incident_blacklist.yml` というファイルを作成します。Ansible はすでにインベントリからの情報があるため、ここでは IP アドレスではなく変数を入力することに注意してください。 - - -```yaml ---- -- name: Blacklist attacker - hosts: checkpoint - - vars: - source_ip: "{{ hostvars['attacker']['private_ip2'] }}" - destination_ip: "{{ hostvars['snort']['private_ip2'] }}" - - tasks: - - name: Create source IP host object - checkpoint_host: - name: "asa-{{ source_ip }}" - ip_address: "{{ source_ip }}" - - - name: Create destination IP host object - checkpoint_host: - name: "asa-{{ destination_ip }}" - ip_address: "{{ destination_ip }}" - - - name: Create access rule to deny access from source to destination - checkpoint_access_rule: - auto_install_policy: yes - auto_publish_session: yes - layer: Network - position: top - name: "asa-accept-{{ source_ip }}-to-{{ destination_ip }}" - source: "asa-{{ source_ip }}" - destination: "asa-{{ destination_ip }}" - action: drop - - - name: Install policy - cp_mgmt_install_policy: - policy_package: standard - install_on_all_cluster_members_or_fail: yes - failed_when: false -``` - - -Playbookを実行し、IP アドレスを効果的にブラックリストに登録します: - -```bash -[student@ansible ~]$ ansible-navigator run incident_blacklist.yml -``` - -QRadar UI の、**Log Activity** タブで Snort からのアラートを受信していないことを確認してください。ファイアウォールを QRadar に接続した場合、実際にはそこからログが入ってくることに注意してください。 - -また、Check Point に新しいルールが追加されたことを簡単に確認してみましょう。Windows ワークステーションにアクセスし、SmartConsole インターフェイスを開きます。左側の [**SECURITY POLICIES**] をクリックして、アクセス制御ポリシーのエントリが **Accept** から **Drop** に変更されていることに注意してください。 - -![SmartConsole Blacklist Policy](images/check_point_policy_drop.png) - -攻撃を特定し、攻撃の原因となるトラフィックをブロックすることに成功しました! - -## Step 3.7 - ロールバック - -最後のステップとして、ロールバック Playbook を実行して Snort の設定を元に戻し、リソースの消費と分析のワークロードを削減できます。 - -前の演習で書いた Playbook `rollback.yml` を実行して、すべての変更をロールバックします。 - -```bash -[student@ansible ~]$ ansible-navigator run rollback.yml -``` - -今回は QRadar のログソースとして Check Point を設定していませんが、Playbook は問題なく実行されることに注目してください。Ansible のタスクの多くは冪等性があるので、タスクを何度も実行しても、目的の状態を確保することができます。 - -最後に、攻撃シミュレーションを停止する必要があります。student ユーザーとして automation controller にログインします。**Templates** セクションで、**Stop sql injection simulation** と呼ばれるジョブテンプレートを見つけて実行します。 - -これで最後の練習は終了です。おめでとう! - -## Step 3.8 - まとめ - -必要なツールが揃っていても、ツール同士が統合されていないため、CISO とそのチームの仕事は難しいです。セキュリティ違反が発生した場合、アナリストはトリアージを行い、インフラストラクチャ全体にわたって関連するすべての情報を追跡し、何が起きているのかを理解し、最終的にはあらゆる種類の修正を実行する必要があります。 - -Ansible Security Automation は、共通のオープンな自動化言語である Ansible を通じて、幅広いセキュリティソリューションの統合を促進するRed Hatの取り組みです。Ansible Security Automation は、セキュリティアナリストがセキュリティインシデントをより迅速に調査および修正できるように設計されています。 - -Ansible Security Automation は、エンタープライズファイアウォール、IDS、SIEM の3つの異なるセキュリティ製品を統合して、セキュリティアナリストやオペレータがInvestigation Enrichment、Threat hunting、Incident response に役立ちます。 - -Ansible Security Automation を使用すると、セキュリティ組織は、事前承認された Playbook と呼ばれる自動化ワークフローを作成できます。また、automation controller のサポートにより、これらの自動化ワークフローを、制御されたユーザーフレンドリーで使いやすい方法で他のチームに提供することもできます。 - ----- - -[Ansible Security Automation Workshopの表紙に戻る](../README.ja.md) +# 演習 2.3 - インシデントレスポンス + +**他の言語でもお読みいただけます**:
+[![uk](../../../images/uk.png) English](README.md), [![japan](../../../images/japan.png) 日本語](README.ja.md), [![france](../../../images/fr.png) Français](README.fr.md).
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RoleInventory nameHostnameUsernamePassword
Ansible Control Hostansibleansible-1--
IBM QRadarqradarqradaradminAnsible1!
Attackerattackerattacker--
Snortsnortsnort--
Check Point Management Servercheckpointcheckpoint_mgmtadminadmin123
Check Point Gateway-checkpoint_gw--
Windows Workstationwindows-wswindows_wsadministratorProvided by Instructor
+
+

Note

+

+ The workshop includes preconfigured SSH keys to log into Red Hat Enterprise Linux hosts and don't need a username and password to log in.

+
+
+ +## ステップ 3.1 - 背景 + +この演習では、脅威の検知と対応の機能に焦点を当てます。通常どおり、セキュリティーオペレーターがこのタスクを実行するには、エンタープライズ IT +にある一連のツールが必要です。 + +あなたは、企業の IDS を担当するセキュリティーオペレーターです。IDS に Snort を選択しました。 + +## ステップ 3.2 - 準備 + +この演習では、オペレーターが Snort のログを見るところから始めます。まずは、実際にログエントリーを生成するための Snort +ルールを設定する必要があります。VS Code オンラインエディターで、Playbook `incident_snort_rule.yml` +を作成します。 + + +```yaml +--- +- name: Add ids signature for sql injection simulation + hosts: ids + become: yes + + vars: + ids_provider: snort + protocol: tcp + source_port: any + source_ip: any + dest_port: any + dest_ip: any + + tasks: + - name: Add snort sql injection rule + include_role: + name: "ansible_security.ids_rule" + vars: + ids_rule: 'alert {{protocol}} {{source_ip}} {{source_port}} -> {{dest_ip}} {{dest_port}} (msg:"Attempted SQL Injection"; uricontent:"/sql_injection_simulation"; classtype:attempted-admin; sid:99000030; priority:1; rev:1;)' + ids_rules_file: '/etc/snort/rules/local.rules' + ids_rule_state: present +``` + + +Playbook を実行できるようにするために、準備したロール `ids_rule` を使用して、`security_ee` 実行環境に含まれる IDS +ルールを変更します。これは、ロール `ids.config` についても同様です。 + +以下を入力し、Playbook を実行します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run incident_snort_rule.yml --mode stdout +``` + +これらのルールがログを生成するためには、疑わしいトラフィック、つまり攻撃が必要です。ここでも、数秒ごとに単純なアクセスをシミュレートする +Playbook を用意し、この演習の他のコンポーネントが後に反応するようにします。VS Code オンラインエディターで、以下の内容の +Playbook `sql_injection_simulation.yml` を作成します。 + + +```yml +--- +- name: start sql injection simulation + hosts: attacker + become: yes + gather_facts: no + + tasks: + - name: simulate sql injection attack every 5 seconds + shell: "/sbin/daemonize /usr/bin/watch -n 5 curl -m 2 -s http://{{ hostvars['snort']['private_ip2'] }}/sql_injection_simulation" +``` + + +以下を入力し、実行します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run sql_injection_simulation.yml --mode stdout +``` + +この演習が正しく動作するには、前の [Check Point 演習](../1.2-checkpoint/README.md) +で、いくつかの手順が完了していることを確認する必要があります。 + +1. `whitelist_attacker.yml` Playbook は、少なくとも 1 回実行されている必要があります。 +2. また、攻撃者のホワイトリストポリシーのロギングが、Check Point SmartConsole でアクティベートされている必要があります。 + +いずれも [Check Point 演習](../1.2-checkpoint/README.md) +で行いました。これらの手順を飛ばしている場合は、手順に戻って Playbook +を実行し、手順に従ってロギングをアクティベートしてから、こちらに戻ってきてください。 + +## ステップ 3.3: インシデントの特定 + +企業の IDS を担当するセキュリティーオペレーターとして、あなたは日常的にログをチェックしています。VS Code +オンラインエディターのターミナルから、ユーザー `ec2-user` として snort ノードに SSH 接続し、ログを確認します。 + +```bash +[student@ansible-1 ~]$ ssh ec2-user@snort +``` +```bash +[ec2-user@snort ~]$ journalctl -u snort -f +-- Logs begin at Sun 2019-09-22 14:24:07 UTC. -- +Sep 22 21:03:03 ip-172-16-115-120.ec2.internal snort[22192]: [1:99000030:1] Attempted SQL Injection [Classification: Attempted Administrator Privilege Gain] [Priority: 1] {TCP} 172.17.78.163:53376 -> 172.17.23.180:80 +Sep 22 21:03:08 ip-172-16-115-120.ec2.internal snort[22192]: [1:99000030:1] Attempted SQL Injection [Classification: Attempted Administrator Privilege Gain] [Priority: 1] {TCP} 172.17.78.163:53378 -> 172.17.23.180:80 +Sep 22 21:03:13 ip-172-16-115-120.ec2.internal snort[22192]: [1:99000030:1] Attempted SQL Injection [Classification: Attempted Administrator Privilege Gain] [Priority: 1] {TCP} 172.17.78.163:53380 -> 172.17.23.180:80 +``` + +ご覧のとおり、このノードは、**Attempted Administrator Privilege Gain** +に複数のアラートを登録したところです。`CTRL-C` を押してログ表示を終了します。 + +snort ログの詳細を調べる場合は、Snort マシンの `/var/log/snort/merged.log` ファイルの内容を確認してください。 + +```bash +[ec2-user@snort ~]$ sudo tail -f /var/log/snort/merged.log +Accept: */* +[...] +GET /sql_injection_simulation HTTP/1.1 +User-Agent: curl/7.29.0 +Host: 172.17.30.140 +Accept: */* +``` +一部の変な文字の他に、実際のユーザーの不正な "attack" が文字列`sql_injection_simulation` +の形で表示されます。`exit` コマンドで Snort サーバーを終了します。 + +## ステップ 3.4: ログを QRadar に転送するために Playbook を作成して実行する + +このインシデントをより詳細に分析するには、データを他のソースと相関させることが重要になります。このために、ログを SIEM である QRadar +にフィードする必要があります。 + +ご存知のように、さまざまなセキュリティーツールが相互に統合されていないため、IDS +を担当するセキュリティーオペレーターは、手動で別のチームに連絡するか、ログを電子メールで転送する必要があります。または、FTP +サーバーにアップロードするか、USB スティックに入れて持ち運ぶなどをする必要があります。幸いなことに、前の演習ですでに示したように、Ansible +を使用して Snort と Qradar を設定することができます。 + +VS Code オンラインエディターで、以下のように `incident_snort_log.yml` という名前の Playbook を作成します。 + + +```yaml +--- +- name: Configure snort for external logging + hosts: snort + become: true + vars: + ids_provider: "snort" + ids_config_provider: "snort" + ids_config_remote_log: true + ids_config_remote_log_destination: "{{ hostvars['qradar']['private_ip'] }}" + ids_config_remote_log_procotol: udp + ids_install_normalize_logs: false + + tasks: + - name: import ids_config role + include_role: + name: "ansible_security.ids_config" + +- name: Add Snort log source to QRadar + hosts: qradar + collections: + - ibm.qradar + + tasks: + - name: Add snort remote logging to QRadar + qradar_log_source_management: + name: "Snort rsyslog source - {{ hostvars['snort']['private_ip'] }}" + type_name: "Snort Open Source IDS" + state: present + description: "Snort rsyslog source" + identifier: "{{ hostvars['snort']['ansible_fqdn'] }}" + + - name: deploy the new log sources + qradar_deploy: + type: INCREMENTAL + failed_when: false +``` + + +この Playbook は見覚えがあるはずです。ログを QRadar に送信するように Snort を設定し、それらを受け入れるように QRadar +を設定して、オフェンスを有効にします。実行してみてください。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run incident_snort_log.yml --mode stdout +``` + +## ステップ 3.5: QRadar で新しい設定を確認する + +少し視点を変えて、セキュリティーアナリストの立場で考えてみましょう。私たちは主に SIEM を使用していますが、現在は Snort +からログが入ってきています。これを確認するには、QRadar の UI にアクセスして **Log Activity** タブを開き、Snort から +QRadar にイベントが入ってきていることを確認します。 + +![QRadar logs view, showing logs from +Snort](images/qradar_incoming_snort_logs.png#centreme) + +>**注記** +> +> ログが表示されない場合は、少し待ってください。最初のエントリーを表示するのに 1 分以上かかる場合があります。また、最初のログは "default" のログソースで識別 (**Snort rsyslog source** ではなく **SIM Generic Log DSM-7** を表示) されるかもしれませんので、少し時間をおいてください。 + +起こりうるセキュリティー上の脅威を調査し、必要に応じてインシデントレスポンスを作成することは、アナリストの責任になります。今回のケースでは、SQL +インジェクション攻撃はまさにサイバー攻撃であり、早急にこれを軽減する必要があります。 + +ログをより見やすく表示するには、Log Activity の出力ウィンドウの上部にある表示を **Raw Events** に変更します。 + +![QRadar logs view, attacker IP +address](images/qradar_attacker_ip.png#centreme) + +>**注記** +> +>QRadar のログ表示にフィルターを追加することで、より簡潔な情報を得ることができることを覚えておいてください。 + +**Raw Events** の出力をよく見ると、Snort ログには IP アドレスを含む ***Host*** +エントリーが含まれていることがわかります。これは、サイバー攻撃を修正するために必要な重要な情報です。 + +>**注記** +> +>これらのログには、左側にオフェンスマーカーがすでに表示されることに注意してください。 + +トップメニューで **Offenses** タブを開きます。以下のようなオフェンスが、新しく作成されているのがわかります。 + +![QRadar offense list](images/qradar_offense_list.png#centreme) + +新しいオフェンスをダブルクリックして、右上隅の **Display** ドロップダウンメニューをクリックし、**Annotations** +を選択します。 + +![QRadar Offense Display menu](images/qradar_offense_display_menu.png) + + *Annotation セクションには、カスタムの **Ansible Workshop SQL Injection Rule** がトリガーされたことを示す **SQL Injection Detected** アノテーションが表示されます。 + +![QRadar Offense Annotation](images/qradar_annotation_sql_injection.png) + +## ステップ 3.6 - ブラックリスト IP + +これらのすべての情報をもとに、インシデントレスポンスを作成することができます。これらの攻撃は、以前 QRadar Log Activity ウィンドウの +Snort ログで確認した特定の IP から発信されていることがわかりました。それでは、攻撃を阻止しましょう。攻撃者の発信元 IP +をブラックリストに登録します。 + +一般的な環境では、この修復を実行するには、ファイアウォールを担当するセキュリティーオペレーターとまた別のやり取りをする必要があります。しかし、Ansible +Playbook を起動すれば、数時間、数日ではなく、数秒で同じ目的を達成することができます。 + +VS Code オンラインエディターで、`incident_blacklist.yml` という名前のファイルを作成します。Ansible +にはインベントリーの情報がすでにあるため、ここでは IP アドレスを入力せず、変数を再度入力します。 + + +```yaml +--- +- name: Blacklist attacker + hosts: checkpoint + + vars: + source_ip: "{{ hostvars['attacker']['private_ip2'] }}" + destination_ip: "{{ hostvars['snort']['private_ip2'] }}" + + tasks: + - name: Create source IP host object + checkpoint_host: + name: "asa-{{ source_ip }}" + ip_address: "{{ source_ip }}" + + - name: Create destination IP host object + checkpoint_host: + name: "asa-{{ destination_ip }}" + ip_address: "{{ destination_ip }}" + + - name: Create access rule to deny access from source to destination + checkpoint_access_rule: + auto_install_policy: yes + auto_publish_session: yes + layer: Network + position: top + name: "asa-accept-{{ source_ip }}-to-{{ destination_ip }}" + source: "asa-{{ source_ip }}" + destination: "asa-{{ destination_ip }}" + action: drop + + - name: Install policy + cp_mgmt_install_policy: + policy_package: standard + install_on_all_cluster_members_or_fail: yes + failed_when: false +``` + + +Playbook を実行し、IP を実質的にブラックリストに指定します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run incident_blacklist.yml --mode stdout +``` + +QRadar UI で、Log Activity タブで Snort からアラートを受信しなくなったことを確認します。ファイアウォールを QRadar +に接続していた場合は、実際にはそこからログが入ってきていた点に注意してください。 + +また、新しいルールが Check Point に追加されたことをすばやく確認しましょう。Windows +ワークステーションにアクセスして、SmartConsole インターフェースを開きます。左側で **SECURITY POLICIES** +をクリックし、アクセス制御ポリシーエントリーが **Accept** から **Drop** に変更されていることに注意してください。 + +![SmartConsole Blacklist +Policy](images/check_point_policy_drop.png#centreme) + +攻撃を特定し、攻撃の背後にあるトラフィックをブロックすることに成功しました。 + +## ステップ 3.7 - ロールバック + +最後のステップとして、ロールバック Playbook を実行して Snort 設定を元に戻し、リソースの消費と分析のワークロードを減らすことができます。 + +>**注記** +> +> `rollback.yml` Playbook を実行する前に、現在のすべての ssh セッションを終了し、**control-node** プロンプトを開いていることを確認してください。 + + +前回の演習で書いた Playbook `rollback.yml` を実行して、すべての変更を戻します。 + +```bash +[student@ansible-1 ~]$ ansible-navigator run rollback.yml --mode stdout +``` + +今回、QRadar のログソースとして Check Point を設定していないにもかかわらず、Playbook +が問題なく実行されていることに注目してください。これは、Ansible タスクがほとんどの場合べき等であるため、可能です。Ansible +タスクは何度も実行でき、必要な状態を保証します。 + +また、攻撃をシミュレートするプロセスを強制終了する必要があります。ターミナルで、`stop_attack_simulation.yml` +Playbook を実行します。 + + +```bash +[student@ansible-1 ~]$ ansible-navigator run stop_attack_simulation.yml --mode stdout +``` + + +これで最後の演習が終わりました。おめでとうございます。 + +## ステップ 3.8 - まとめ + +CISO +とそのチームは、必要なツールがすべてそろっていても、ツールが相互に統合されていないため、仕事が難しい場合があります。セキュリティー違反が発生した場合、アナリストはトリアージを行い、インフラストラクチャー全体で関連するすべての情報を追跡し、何が起きているのかを把握して、最終的に何らかの修復を行うまでに何日もかけなければなりません。 + +Ansible Security Automation は、共通のオープンな自動化言語である Ansible +を通じて、さまざまなセキュリティーソリューションの統合を促進するための Red Hat の取り組みです。Ansible Security +Automation は、セキュリティーアナリストがセキュリティーインシデントの調査と修復を迅速に行えるように設計されています。 + +これにより、Ansible Security Automation は、3 つの異なるセキュリティー製品 +(エンタープライズファイアウォール、IDS、および SIEM) +を統合し、調査の強化、脅威ハンティング、およびインシデントレスポンスに対して、セキュリティーアナリストおよびオペレーターをサポートします。 + +Ansible Security Automation により、セキュリティー組織は Playbook +と呼ばれる事前承認済みの自動化ワークフローを作成できます。このワークフローは、集中的に管理したり、異なるチーム間で共有したりすることができます。また、自動化コントローラーの助けを借りて、制御された、ユーザーフレンドリーで消費しやすい方法で、それらの自動化ワークフローを他のチームに提供することもできます。 + +---- +**Navigation** +

+[Previous Exercise](..//2.2-threat/README.md) +

+[Click here to return to the Ansible for Red Hat Enterprise Linux Workshop](../README.md) diff --git a/exercises/ansible_security/README.ja.md b/exercises/ansible_security/README.ja.md index d0eee10eb..ba9dde029 100644 --- a/exercises/ansible_security/README.ja.md +++ b/exercises/ansible_security/README.ja.md @@ -1,41 +1,45 @@ -# Ansible Workshop - Ansible Security Automation +# Ansible ワークショップ - Ansible Security Automation -Ansibleはアプリケーションの展開、構成管理、オーケストレーションなどで利用できるシンプルでパワフルな自動化エンジンであり、すぐに習得することができます。 Ansible Security Automationは、セキュリティのユースケースをさらに深く掘り下げた拡張版です。その目的は、セキュリティを担当するチームにおけるセキュリティイベントの識別、検索、および対応のためのさまざまなプロセスを自動化し、より効率的で合理化された方法を提供することです。 +**これは Ansible Automation Platform 2 のドキュメントです** -このワークショップでは、企業のファイアウォール(CheckPoint Next Generation Firewall)、侵入検知システム(Snort)、SIEM(IBM QRadar)などの複数のセキュリティツールを含む3つのセキュリティ調査・対応アクティビティをAnsibleを使ってオーケストレーションする方法をステップバイステップで学びます。 +3 つのセキュリティーユースケースの自動化を実装することで、Ansible Security Automation を使い始めましょう。3 +つのユースケースとは、1) ファイアウォールのオーケストレーション、2) IDS と SIEM (Web サーバー上の疑わしいトラフィックの調査)、3) +脅威ハンティング (ファイアウォール上の異常なアクセス拒否の分析と SQL インジェクションの修復) +になります。このワークショップでは、簡単な紹介の後、基本的なコンセプトを説明し、Ansible Security Automation +を既存のサードパーティーのセキュリティーソリューションと組み合わせて使用する方法を紹介します。 - -**Read this in other languages**:
+**他の言語でもお読みいただけます**:
[![uk](../../images/uk.png) English](README.md), [![japan](../../images/japan.png) 日本語](README.ja.md), [![france](../../images/fr.png) Français](README.fr.md).
-## 時間配分 +## ワークショップの平均時間 -ワークショップの実施に必要な時間は、参加者の数、参加者がどれだけ Linux に精通しているか、そしてその間にどれだけの議論が行われるか、といった複数の要因に大きく左右されます。 +ワークショップに必要な時間は、参加者の数、参加者がどれだけ Linux +に精通しているか、ワークショップの間にどれだけの議論が行われるかなど、複数の要因に大きく左右されます。 -Ansibleの基本的な経験のある生徒の場合: +Ansible に関する基本的な経験者の場合 -- introduction はおおよそ30分程度かかります -- 最初の演習はおおよそ1時間程度かかります -- 2番目の演習はおおよそ2時間程度かかります +- 概要には約 30 分かかります。最初の演習には約 1 時間かかります。2 番目の演習には約 2 時間かかります。 -もし実際の感覚とこのワークショップのスケジュールが異なる場合、Issue で知らせてください。 +これらのワークショップのスケジューリングが異なる場合は、Red Hat までご連絡ください。 -## Section 1 - Ansible Security Automationの基礎を紹介 +## ラボダイアグラム - - [演習 1.1 - ラボ環境を確認してみよう](1.1-explore/README.ja.md) - - [演習 1.2 - 最初のCheck Point用のPlaybookを実行してみよう](1.2-checkpoint/README.ja.md) - - [演習 1.3 - 最初のSnort用のPlaybookを実行してみよう](1.3-snort/README.ja.md) - - [演習 1.4 - 最初のIBM QRadar用Playbookを実行してみよう](1.4-qradar/README.ja.md) +![ansible security lab +diagram](../../images/ansible_security_diagram.png#centreme) -## Section 2 - Ansible Security Automationのユースケース +## セクション 1 - Ansible Security Automation の基本について - - [演習 2.1 - Investigation Enrichment](2.1-enrich/README.ja.md) - - [演習 2.2 - Threat hunting](2.2-threat/README.ja.md) - - [演習 2.3 - Incident response](2.3-incident/README.ja.md) + - [演習 1.1 - ラボ環境の調査](1.1-explore) + - [演習 1.2 - 最初の Check Point 用 Playbook の実行](1.2-checkpoint) + - [演習 1.3 - 最初の Snort Playbook の実行](1.3-snort) + - [演習 1.4 - 最初の IBM QRadar Playbook の実行](1.4-qradar) -## 追加情報 +## セクション 2 - Ansible Security Automation のユースケース - - [Ansible Getting Started](http://docs.ansible.com/ansible/latest/intro_getting_started.html) + - [演習 2.1 - 調査の強化](2.1-enrich) + - [演習 2.2 - 脅威ハンティング](2.2-threat) + - [演習 2.3 - インシデントレスポンス](2.3-incident) --- -![Red Hat Ansible Automation](../../images/rh-ansible-automation-platform.png) +![Red Hat Ansible +Automation](../../images/rh-ansible-automation-platform.png) diff --git a/exercises/ansible_smart_mgmt/README.ja.md b/exercises/ansible_smart_mgmt/README.ja.md new file mode 100644 index 000000000..58ff5310c --- /dev/null +++ b/exercises/ansible_smart_mgmt/README.ja.md @@ -0,0 +1,65 @@ +# Ansible ワークショップ - Smart Management Automation + +**これは Ansible Automation Platform 2 のドキュメントです** + +このワークショップでは、Red Hat Smart Management サブスクリプションと Ansible Automation Platform +の最適な使用方法について説明します。 + +## 目次 + +# 目次 +- [Ansible ワークショップ - Smart Management + Automation](#ansible-workshop---smart-management-automation) + - [目次](#table-of-contents) +- [目次](#table-of-contents-1) + - [ラボダイアグラム](#lab-diagram) + - [ラボの設定](#lab-setup) + - [目的](#objective) + - [ガイド](#guide) + - [ラボ環境](#your-lab-environment) + - [**ステップ 1 - Ansible Tower の設定**](#step-1---setup-ansible-tower) + - [**ステップ 2 - プロジェクトの作成**](#step-2---create-a-project) + - [**ステップ 3 - ジョブテンプレートの作成**](#step-3---create-job-template) + - [設定管理](#config-management) + - [セキュリティーおよびコンプライアンス](#security-and-compliance) + + +## ラボダイアグラム +## ラボの設定 + +### 目的 +- アクティベーションキーとライフサイクル環境の設定 - Satellite Server へのサーバーの登録 + +### ガイド +#### ラボ環境 + +このラボでは、事前設定されたラボ環境で作業します。ここでは、以下のホストにアクセスできます。 + +| Role | Inventory name | +| ---------------------| ---------------| +| Automation Platform | ansible-1 | +| Satellite Server | satellite | +| Managed Host 1 | node1 | +| Managed Host 2 | node2 | +| Managed Host 3 | node3 | + +#### **ステップ 1 - Ansible Tower の設定** + +Automation Platform にログインします。 + +ブラウザーを開き、アテンダンスページにある Ansible Tower UI のリンクに移動します。アテンダンスページで、ユーザー名 `admin` +とパスワードを入力してログインします。 + +#### **ステップ 2 - プロジェクトの作成** + +Automation Platform ホームページの左側にあるナビゲーションセクションから、**Project** を選択します。右上隅の緑色の +**Create** ボタンをクリックします。 + +ソース git リポジトリーとして +`https://github.com/willtome/automated-smart-management.git` +を使用して、プロジェクトを作成します。**Update on Launch** のチェックボックスをオンにします。 + +#### **ステップ 3 - ジョブテンプレートの作成** + +## 設定管理 +## Security and Compliance diff --git a/exercises/ansible_smart_mgmt/wip-2021/openscap-exercise/README.ja.md b/exercises/ansible_smart_mgmt/wip-2021/openscap-exercise/README.ja.md new file mode 100644 index 000000000..b97d493c1 --- /dev/null +++ b/exercises/ansible_smart_mgmt/wip-2021/openscap-exercise/README.ja.md @@ -0,0 +1,257 @@ +# Integrated Management Workshop: Configuring and performing an OpenSCAP Scan + +In this part of the workshop, we will learn how to configure and perform an +OpenSCAP scan using playbooks in Ansible Tower with Satellite. When running +multiple Red Hat Enterprise Linux systems, it's important to keep all of +these systems compliant with a meaningful security policy and perform +security scans remotely from a single location. OpenSCAP is an open source +project that is used by government agencies, corporations, as well as +e-commerce and provides tools for automated vulnerability checking. + +## Environment + +- Red Hat Satellite v6.8 + +- 3 x Red Hat Enterprise Linux clients v7.9 + +## Pre-requisites (completed in previous exercises in the workshop, values to be changed) + +- Organization to be used = Default Organization + +- Location to be used = Default Location + +- A content view = RHEL7 + +- Lifecycle environments = Dev, QA, Prod + +- SSH access to RHEL clients (node1, node2, node3) which has been + registered to Satellite + +## Exercise + +#### 1\. Logging into Satellite + +- Use a web browser on your computer to access the Satellite GUI via the + link found in the Environment above. And use the following username and + password to login: admin / ansible123 + +![](https://lh3.googleusercontent.com/61RJI80QPal7BWRRjw8AGQA_okIXvBTGG6Vfo0ECdVjSFO4PPkvAMKHpVccroazXRtV_uvfC20x38j0i49BZErswpsDXTcDrxFw94cp1KlLYdjNDCC3Sxb8UwYcrOZNCWR7rqcmD) + +- Once you're in Satellite you would be able to see a dashboard + +![](https://lh5.googleusercontent.com/0oL1NhGOFVJQIcnol7xSneJgzAIAX5HKPkV_hHjan5iM9L7qVliUMct53MsKTy4rkJU0Yu8HBmd7yV9VLafJqDJFZKTLHPo73wNMD64dNuvP6xS04C6KAHKr2KIJ1bF67m62cjdA) + +#### 2\. Creating a new compliance policy + +- Now we will start configuring a compliance policy to be able to scan our + RHEL nodes. + +- Hover over "Hosts" from the menu on the left side of the screen, and + then click on "Policies" + +![](https://lh4.googleusercontent.com/cVLJMoZs3YrWJayGeOd3-1lhpyC_Lu-xXxX0RD1ZLl6uzoA_M_dXktuknpvA5TgPPNrcCJqyYwnEVMEMlQno3_8q7dnN-5f6ATT2q-UfiPRe3wGYKnMDx2BjNgnB-7-tvcIzo9F2) + +- Click on the "New Policy" button, and fill out the details as followed + in step 3.  + +![](https://lh5.googleusercontent.com/2qOPrqw4iC02hxEM6dfG5fj_TOsR5s-AAPCmEIXRDJo7kcfLlATH-bH36htyDB4UHWVTA-43jpwQfv21QdZx6oW41KohQYz4K8bpg1z_70-J6RkSknnMSiD486UjVziqD0SdnSxU) + +#### 3\. Configuring a new compliance policy (values to be changed) + +- Now we will start configuring our Satellite server to be able to manage + a compliance policy + +- Select "Manual" from the deployment options and click "Next" + +![](https://lh3.googleusercontent.com/j9IPZGS-LJPKAZJj4k6wZbbx15cAkOtvqT_UBDj2iAzhi5_Mkkq6aGZClS8gSq__DxVEMsPik-pQVDEK7l2JqWJNYZJXGr2yNdETyeNaSydhU8A205f9cha97QQYNLzlPRjW9-Ka) + +- Create the policy name "PCI-Compliance" and provide any description you + like. Then click "Next" + +![](https://lh4.googleusercontent.com/sbJOKhFNODc7YodnOaFwZjeOx16eofpbEW0PxDTv76R4aoWKHHtP-BrpKXE7khOnSKKxdKWxQRbWK7TIIoYaW6otQJjxHIO-Rd770NsBLVZiHZdhrpy8MhqaiJRoNQOv0bV1oFo4) + +- Select the "Red Hat rhel7 default content" and "PCI-DSS v3.2.1 Control + Baseline for Red Hat Enterprise Linux 7". There is no tailoring + file. Then click + "Next"![](https://lh6.googleusercontent.com/m4VK9on3A5ZASMOB1sG8Hx76L3-fCy4Pn_mYsSmYT-QZYGbK_bYubLLpYRHzP5DoLGi_XTd7bAXTZZ2xdg5ss0OT-oRWguI7nECaUJtD-8k6i6sxLfTFn6SSLwYsaV8ePRMq5v--) + +- It is necessary to set a schedule when creating a new compliance + policy. You can select "Weekly" and "Monday" for lab purposes. Then + click "Next" + +![](https://lh6.googleusercontent.com/rvXj6ousHaUVEs4XBXe-wON8U3LqnSFN8xrTYtQLEWQ1_YmbPDy3Ytw3Muogeb5tYFkG4rxr5s2MlGlJgjSh4gIc53Ovx0o_VEWHrU7YRH_OM6XyLKZmJLR9m8dOucga_HcFaf5_) + +- Steps 5, 6, and 7 as part of the New Compliance Policy can use default + values. Click "Next" through "Locations", "Organizations", and + "Hostgroups" + +![](https://lh6.googleusercontent.com/Y2DSZltuMov4zXtop_IYzfWZXRRmyk2Ogvnv-Sz22QGaKWm4QD7LcVtjkVP3inDSFIlLUiaRC267gnBrABF0sNJCx-lXN-19Ufu4le-HdUzWz36fxAI4nizD3bi5piEwEoJN3JXF) + +#### 4\. Logging into the Ansible Automation Platform + +- Use a web browser on your computer to access the Ansible GUI via the + link found in the Environment above + +![](https://lh5.googleusercontent.com/UH3-l8kGnC1UM20Op4_d0HZZ7upq84dechLxShPZZ4Ki-4P-bu8ej8sfUZIO-lxBXwdAx7MaIehy9I0NQt-w_DhzJdHBJnOfwRcYaY6Z2UUXsTY_eekbmDgvfq-2SLEIgqEvF7SG) + +- Once you're in Ansible Tower, you'll be able to see a dashboard. + +![](https://lh5.googleusercontent.com/yW3YHJtQU1UkU6iJW6gn0i5BYKGPPYAayj3uZ-Qqcqd1yQQqICaHsQbkVYU1bgJhNEK0iUuX4r-cqP-CY8LtTkjT6III2jgw9isInpaJX6GM2pzhwomqTFw0xd6UcxQYMYFJtcpr) + +#### 4\. Configuring an Ansible Tower template to run an OpenSCAP scan and launch the scan. (values to be changed) + +- Click "Templates" from the left sidebar.  + +![](https://lh3.googleusercontent.com/YEBQn4MdNVakLfpdVL2rArmfB-G8wd2esjHQJzMLhni9KWDWx_1vyRtby0uy9Kc46oRdX57mnDXACRs3GT96qNSJk4M5AsJOXqfJdTduMS7Ug7vO2dpcA4yTVV1PbH5vWBczMekf) + +- Then select + ![](https://lh6.googleusercontent.com/sN5ZK1Ryj9X3y6ynlJlYMn9MN7h4rnSmmPgkkPNxgrUbB268TlOs9PjqgKe6SbGlEM1xuTvdGcFUg7CmUplRab-W6mD-apjgX7hnvzhgzZaoar25Oia4kghBEPcxYCHxRq4SBwDp) + on the far right side of the screen and click "Job Template". Fill out + the details as follows. + +- Name: "OpenSCAP_Configure " + +- Job Type: "Run" + +- Inventory: "Workshop Inventory" + +- Playbook: "configure_openscap.yml" + +- Project: "Automated_Smart_Management"  + +- Credentials: "Satellite_Credential", "Workshop Credential" + +- Extra Variables: + +- HOSTS: web + +- Policy_scan:  + +- PCI_Compliance + +![](https://lh6.googleusercontent.com/B_rNKlbNdXn35bcf5KFW_Igt8VSQs3EM1PJryo-T-9eugHt3LBs3TVB5BN5LCDxP2zlQbracBL1z0exSSEt49gYxqFPU1U8OJP1WNxj7hgQS-w03iQg4KZzJ85VwQiXxGAbF3dgH) + +Leave the rest of the fields blank or as they are, and click "Save". + +- Launch the job by clicking: + ![](https://lh4.googleusercontent.com/-q-chMPmF9atKHlW8-yHvUIN1auckybzcS8T2eyIfkG4vkyKisav_Vk0j3VUzve5yICD3jr4SomqCa8erHRMBfTzhQTr2MTC47roIypd18aadDBlRgApzZi_e8A7M65RePeHo7kN) + +![](https://lh4.googleusercontent.com/HRMQ7FhoQazxxarlbwAJgLQS4MoXCjy_mnCMhSugXw0WkXDzh2B582ulwFzIP_PW5pr3Y_jAqpO8T47nsLjGIm9UUBZ_jsdxcqzqiKGT0Oi6x01sc0PF2IjpzhPxdOct1cLUl5Xq) + +#### 5\. Navigate back to Satellite to examine the Asset Reporting File (ARF).  + +- Hover over "Hosts" from the menu on the left side of the screen, and + then click on "Reports". + +![](https://lh4.googleusercontent.com/JZnAxnuQhawkHkBdF1YfOLrXfQ7WV6pRLkpvFwKz9Vrx1Frd3cHZcrLRe7s41qefgY7515rb580oLW5PbrWFm90uip1pNpb1_DhbrWMRfSs9N-9WCCTDc8obztT9uKnMg_MNOqe2) + +- Click on the + ![](https://lh5.googleusercontent.com/5xFQMKyfWZ3kWEJpqFymvptsqV7KHkxFQGTQcTJWW5YDALMCnGm2PTIkzXKT9_qJ8keIDJl2yKtlYHSmxCnzuOVFHa7MPC-02ksTREuF2jis47m3ARKa2OWMNsdmt6wxUa4VPcuD) + for 'node1.example.com' to evaluate + +- You can sort by "Pass", "Fail", "Fixed", or any number of qualifiers as + well as group rules by "Severity" + +![](https://lh3.googleusercontent.com/hu_26q9h1QEMEAs6_57yiqDngir1xM5lolQWOSsDkOOzuiCpSUKtYDDk3TLc2zMozmLNWcmmDXMVuIulAvsolKZa_t6Siu62mqLabFdgO19Mr-V6rw6E14n7qYUxmmwt2PpaiapP) + +- Selecting a rule presents further information regarding rationale as + well as a description of the rule that includes references and + identifiers. + +- If you scroll the page you will notice multiple remediation steps + including an 'Ansible' snippet. This presents tasks you can compile + within a playbook to automation remediation across affected machines. + +![](https://lh3.googleusercontent.com/_H6GjCsPq1pntFiW1lSRJQBq5dOyeGBJhk66RxNn6KO4SqeYJfmEeTgr2-rbpJlIEt5-ueQcfA41Ivae-wIErXreIsy9vkYnVB-i9K_FzA9mz_MWrjFpMdDyMcZurjaSNf-t516p) + +#### 7\. Scaling an OpenSCAP scan. (values to be changed) + +- In Satellite, hover over "Hosts" from the menu on the left side of the + screen, and then click on "Policies". + +![](https://lh4.googleusercontent.com/cVLJMoZs3YrWJayGeOd3-1lhpyC_Lu-xXxX0RD1ZLl6uzoA_M_dXktuknpvA5TgPPNrcCJqyYwnEVMEMlQno3_8q7dnN-5f6ATT2q-UfiPRe3wGYKnMDx2BjNgnB-7-tvcIzo9F2) + +- Select "Manual" from the deployment options and click "Next" + +![](https://lh3.googleusercontent.com/j9IPZGS-LJPKAZJj4k6wZbbx15cAkOtvqT_UBDj2iAzhi5_Mkkq6aGZClS8gSq__DxVEMsPik-pQVDEK7l2JqWJNYZJXGr2yNdETyeNaSydhU8A205f9cha97QQYNLzlPRjW9-Ka) + +- Create the policy name "PCI-Compliance" and provide any description you + like. Then click "Next" + +![](https://lh4.googleusercontent.com/dTnvNbOssJCLU4h2wp1OkN6fOTlVORkANhgW6dmt2gxcegGsXdYlhNbXGVMlc6VDzu8OMzXgXR0oHbs_UWAoBhijgVvsPUEu3_GDkLWaCdLudhJHrlB4Kyv_CGFCEUS362ZqzQak) + +- Select the "Red Hat rhel7 default content" and "DISA STIG for Red Hat + Enterprise Linux 7". There is no tailoring file. Then click "Next" + +![](https://lh4.googleusercontent.com/WSMWISWqV4d5Lm-rOHEZDmsoRaijc642iIhi7l23Tpe5XCJMEk__7xP0o3pj7lDbP0NJssxNI7a0FMbj21r8FPwqjkQ0W58lmyvprQXu3xgoCNiuii6VGwkt1BH_Hb7psI5XBE5c) + +- It is necessary to set a schedule when creating a new compliance + policy. You can select "Weekly" and "Monday" for lab purposes. Then + click "Next" + +![](https://lh6.googleusercontent.com/rvXj6ousHaUVEs4XBXe-wON8U3LqnSFN8xrTYtQLEWQ1_YmbPDy3Ytw3Muogeb5tYFkG4rxr5s2MlGlJgjSh4gIc53Ovx0o_VEWHrU7YRH_OM6XyLKZmJLR9m8dOucga_HcFaf5_) + +- Steps 5, 6, and 7 as part of the New Compliance Policy can use default + values. Click "Next" through "Locations", "Organizations", and + "Hostgroups" + +![](https://lh6.googleusercontent.com/Y2DSZltuMov4zXtop_IYzfWZXRRmyk2Ogvnv-Sz22QGaKWm4QD7LcVtjkVP3inDSFIlLUiaRC267gnBrABF0sNJCx-lXN-19Ufu4le-HdUzWz36fxAI4nizD3bi5piEwEoJN3JXF) + +- Click "Templates" from the left sidebar.  + +![](https://lh3.googleusercontent.com/YEBQn4MdNVakLfpdVL2rArmfB-G8wd2esjHQJzMLhni9KWDWx_1vyRtby0uy9Kc46oRdX57mnDXACRs3GT96qNSJk4M5AsJOXqfJdTduMS7Ug7vO2dpcA4yTVV1PbH5vWBczMekf) + +- Then select + ![](https://lh6.googleusercontent.com/sN5ZK1Ryj9X3y6ynlJlYMn9MN7h4rnSmmPgkkPNxgrUbB268TlOs9PjqgKe6SbGlEM1xuTvdGcFUg7CmUplRab-W6mD-apjgX7hnvzhgzZaoar25Oia4kghBEPcxYCHxRq4SBwDp) + on the far right side of the screen and click "Job Template". Fill out + the details as follows. + +- Name: "OpenSCAP_Configure " + +- Job Type: "Run" + +- Inventory: "Workshop Inventory" + +- Playbook: "configure_openscap.yml" + +- Project: "Automated_Smart_Management"  + +- Credentials: "Satellite_Credential", "Workshop Credential" + +- Extra Variables: + +- HOSTS: web + +- Policy_scan:  + +- PCI-Compliance + +- STIG-Compliance + +![](https://lh5.googleusercontent.com/OhrtdmXwa7y3bQoaAgb2JRhj2LI1ZAsRPpi-VP-EAXYncMYvRFlHMJm4PSprCUfwKGOZcwgBEUC8P4D177epWSsPALU5LMb6Yc-t8BnPj7uIz-NdC7qWPG0Xtq7Pg__OTlkpN27b) + +Leave the rest of the fields blank or as they are, and click "Save". + +- Launch the job by clicking: + ![](https://lh4.googleusercontent.com/-q-chMPmF9atKHlW8-yHvUIN1auckybzcS8T2eyIfkG4vkyKisav_Vk0j3VUzve5yICD3jr4SomqCa8erHRMBfTzhQTr2MTC47roIypd18aadDBlRgApzZi_e8A7M65RePeHo7kN) + +![](https://lh6.googleusercontent.com/2DXuz9ZjyFFEZixvCiSnh8EzcM9xpiY1fIgWyI-8i5VR8cuCFzM8fEaVB7Pij0Nd91EBtQjDpeT1YwD8dGJcfJvzOmFfQc9kvqqjNHzMEuWCljQMT0nO6USaBEjJoHQYWdbSGjao) + +#### 8\. Navigate back to Satellite to examine the Asset Reporting File (ARF).  + +- Hover over "Hosts" from the menu on the left side of the screen, and + then click on "Reports". + +![](https://lh4.googleusercontent.com/JZnAxnuQhawkHkBdF1YfOLrXfQ7WV6pRLkpvFwKz9Vrx1Frd3cHZcrLRe7s41qefgY7515rb580oLW5PbrWFm90uip1pNpb1_DhbrWMRfSs9N-9WCCTDc8obztT9uKnMg_MNOqe2) + +- Notice that we've now easily scaled to six scans, 2 scans of each node + for PCI-Compliance and for STIG-Compliance.  + +![](https://lh3.googleusercontent.com/BoUp9jxDCNaqpWabW1hdEZJazSA5T79Oh1jt7hzCaLtm374oH8EZfrloculCO3ekg2ncdqKMAzAGqdXo7bwNsmMPaxElddYXZx7vmbS3s-J3bGKqCClh7wPjDq0oVC3zL8Xq1wIc) + +- Each report can be reviewed independent of other node scans and + remediations for rule findings can be completed according to the + requirements of your own internal policies. + +  __ _       _     _     _  / _(_)_ __ (_)___| |__ | | | |_| | '_ \| / __| +'_ \| | |  _| | | | | \__ \ | | |_| |_| |_|_| |_|_|___/_| |_(_) diff --git a/exercises/ansible_windows/1-controller/README.ja.md b/exercises/ansible_windows/1-controller/README.ja.md index bd69f0ca9..3500853f0 100644 --- a/exercises/ansible_windows/1-controller/README.ja.md +++ b/exercises/ansible_windows/1-controller/README.ja.md @@ -1,199 +1,224 @@ -# 演習 1 - Automation Controllerの概要と構成 +# Automation Controller の設定 -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-Automation Controller には、マルチテナント、通知、スケジューリングなどの機能を提供する多くのオブジェクトがあります。ここでは、ワークショップに必要な以下の重要なものに焦点を当ててご説明します。インベントリーなど、Ansible Engine でおなじみのオブジェクトもありますし、Automation Controller 独自のオブジェクトもあります。♬ +Automation Controller UI +には、マルチテナンシー、通知、スケジューリングなどを可能にする多くの構成要素があります。ただし、今日このワークショップに必要ないくつかの主要な構成要素にのみ焦点を当てます。 -- 認証情報 +* 認証情報 -- プロジェクト +* プロジェクト -- インベントリー +* インベントリー -- ジョブテンプレート +* ジョブテンプレート -## Controller へのログイン +## Controller へのログイン -各自に準備された Automation Controller のインスタンス情報は講師にご確認ください。 -演習用の Automation Controller には既にライセンスファイルが適応されていますので、ログインするとダッシュボードが表示されます。 +Automation Controller インスタンスの URL と認証情報は、このワークショップ用に作成されたページで提供されました。 -## 認証情報の作成 +Automation Controller のサブスクリプションはすでに適用されていますので、ログインするとダッシュボードが表示されます。 -Automation Controller は、Windows や Linux、ネットワーク機器など管理対象ノードに対するジョブの実行、AWS や VMware vCenter Server などのインベントリーソースとの情報の同期、Git などソースコード管理システムとの同期の際に必要となる個々の認証情報をあらかじめ登録した上で利用する事が出来ます。 +## マシンの認証情報 -[認証情報](https://docs.ansible.com/ansible-tower/latest/html/userguide/credentials.html#credential-types)にはたくさんの種類があります。 -このワークショップでは認証情報として、**マシン**と**ソースコード管理システム**の認証情報を作成し、利用します。 +認証情報は、マシンに対するジョブの起動、インベントリーソースとの同期、バージョンコントロールシステムからのプロジェクトコンテンツのインポートの際に、Controller +が認証のために使用します。 -### ステップ 1: +[認証情報の種類](https://docs.ansible.com/automation-controller/latest/html/userguide/credentials.html#credential-types) +には、マシン、ネットワーク、各種クラウドプロバイダーが含まれます。このワークショップでは、**マシン** および **ソースコントロール** +の認証情報を使用しています。 -左側のパネルから「認証情報」を選択します +### ステップ 1 -![Cred](images/1-tower-credentials.ja.jpg) +リソースの下の左側のパネルから CREDENTIALS を選択します -### ステップ 2: +![Cred](images/1-controller-credentials.png) -![Add](images/add.ja.jpg) アイコンをクリックして新しい認証情報を追加します。 +### ステップ 2 -### ステップ 3: +![追加](images/add.png) アイコンをクリックして新しい認証情報を追加します。 -次のエントリを使用してフォームに入力します。 +### ステップ 3 -| キー | 値 | | -|----------------|-----------------|----------------------------------------------| -| 名前 | Student Account | | -| 組織 | Default | | -| 認証情報タイプ | マシン | | -| ユーザー名 | student# | **# の部分は各自の番号に置き換えてください** | -| パスワード | ***** | student password に置き換えてください | +次のエントリーを使用してフォームに記入します。 -![マシン認証情報の追加](images/1-controller-add-machine-credential.ja.jpg) +| Key | Value | | +|--------------|-----------------|------------------------------------------| +| Name | Windows Credential | | +| Organization | Default | | +| Type | Machine | | +| Username | student# | **Replace # with your student number** | +| Password | | Replace with your student password | -### ステップ 4: +![マシン認証情報の追加](images/1-controller-add-machine-credential.png) -![Save](images/at_save.ja.jpg) をクリック +### ステップ 4 -## SCM 認証情報の作成 +SAVE ![保存](images/at_save.png) を選択 -最初の認証情報は、Windowsマシンにアクセスするためのものです。次に、ソースコードリポジトリ (Git) にアクセスするための認証情報を作成してみます。以下の情報を参考に、先ほどと同じように作成してみてください。 +## SCM 認証情報の作成 -| キー | 値 | | -|--------------|----------------------------------|--------------------------------------------| -| 名前 | Git Credential | | -| 説明 | SCM credential for playbook sync | | -| 組織 | Default | | -| 認証情報タイプ | ソースコントロール | | -| ユーザー名 | student# | **# の部分は各自の番号に置き換えてください** | -| パスワード | ******* | student password に置き換えてください | +最初のクレデンシャルは、Win RM で Windows +マシンにアクセスするためのものでした。今回は、自動化プロジェクトが置かれるソースコードリポジトリーにアクセスするために、別の認証情報が必要です。上記のプロセスを繰り返しますが、詳細は以下の通りです。 -![Save](images/at_save.ja.jpg) をクリック +| Key | Value | | +|--------------|----------------------------------|--------------------------------------------| +| Name | Git Credential | | +| Description | SCM credential for project sync | | +| Organization | Default | | +| Credential Type | Source Control | | +| Username | student# | Replace # with your student number | +| Password | | Replace with your student password | -![Add SCM Credential](images/1-controller-add-scm-credential.ja.jpg) +SAVE ![保存](images/at_save.png) を選択 -## プロジェクトの作成 +![SCM 認証情報の追加](images/1-controller-add-scm-credential.png) -プロジェクトは、Playbook を管理する仕組みを提供します。 Playbook と Playbook ディレクトリを管理するには、Controller サーバーの /var/lib/awx/projects/ 配下に手動で配置するか、Git、Subversion、Mercurialなど、Controller でサポートされるソースコード管理(SCM)システムに Playbook を配置します。 +## プロジェクトの作成 -### ステップ 1: +**プロジェクト** とは、Controller で表現される Ansible コンテンツの論理的な集合体のことです。プロジェクトは、Git や +Subversion など、Controller がサポートするソースコード管理 (SCM) システムに Ansible +コンテンツを配置することで管理できます。 -左パネルで **プロジェクト** をクリックします。 +### ステップ 1 -![Proj](images/1-controller-project.ja.jpg) +この環境では、プレイブックはワークショップの Gitea インスタンスで利用可能な git リポジトリーに保存されます。Automation +Controller で **プロジェクト** を作成する前に、リポジトリーの git URL が必要です。プロジェクトの URL +を取得するには、Gitea インスタンスにログインし、ワークショップのプロジェクトを選択し、"Copy" +ボタンをクリックした後に表示される`https`の URL をコピーします。 -### ステップ 2: +![Proj](images/1-gitea-project.png) ![Clone](images/1-gitea-clone.png) -![Add](images/add.ja.jpg) アイコンをクリックし、新規プロジェクトを作成します。 +リポジトリーの URL は **ステップ 3** で使用されます -### ステップ 3: +### ステップ 2 -次のエントリを使用してフォームに入力します (**SCM URL の欄にはこのワークショップ名(英数字4文字)と各自の Studente 番号を使ってください**) -オプションでは**起動時のリビジョン更新**にチェックを入れます。 +左側のパネルで **Project** をクリックします。 -| キー | 値 | | -|----------------|-------------------------------------------------------------------------|---------------------------------------------------| -| 名前 | Ansible Workshop Project | | -| 説明 | Workshop playbooks | | -| 組織 | Default | | -| SCM タイプ | Git | | -| SCM URL | https://gitlab.**WORKSHOP**.rhdemo.io/**student#**/workshop_project.git | **WORKSHOP と student# は今回のワークショップ名(英数字4文字)と各自のStudent番号に変更ください** | -| SCM ブランチ | | 空欄のまま | -| SCM 認証情報 | Git Credential | | -SCM 更新オプション +![Proj](images/1-controller-project.png) -- [ ] クリーニング -- [ ] 更新時のデプロイ -- [x] 起動時のリビジョン更新 +![追加](images/add.png) アイコンをクリックして新しいプロジェクトを追加します。 +### ステップ 3 -![Defining a Project](images/1-controller-create-project.ja.jpg) +次のエントリーを使用してフォームに記入します (**SCM URL の学習者番号を使用**) -### ステップ 4: +| Key | Value | | +|----------------|-------------------------------------------------------------------------|---------------------------------------------------| +| Name | Ansible Workshop Project | | +| Description | Windows Workshop Project | | +| Organization | Default | | +| Default Execution Environment | windows workshop execution environment | | +| SCM Type | Git | | +| SCM URL | https://git.**WORKSHOP**.demoredhat.com/**student#**/workshop_project.git | URL obtained from Step 1 | +| SCM BRANCH | | Intentionally blank | +| SCM CREDENTIAL | Git Credential | | -![Save](images/at_save.ja.jpg) をクリックします。 +オプション -### ステップ 5: +* [ ] クリーニング +* [ ] 削除 +* [ ] トラックモジュールの追跡 +* [x] 起動時のリビジョン更新 +* [ ] ブランチ上書きの許可 -下にスクロールして、プロジェクトの保存時に、Git に対して正常に同期されたことを確認します。ページ下部のリストビューで、プロジェクト名の左横に緑色の丸が表示されていることを確認します。 +![Defining a Project](images/1-controller-create-project.png) -![Succesfull Sync](images/1-controller-project-success.ja.jpg) +### ステップ 4 -## インベントリー +SAVE ![保存](images/at_save.png) を選択 -管理対象のホスト一覧をインベントリーと呼びます。これは Ansible Engine と同じですね。インベントリーはグループに分割することも可能で、これらのグループには実際のホストの一覧が含まれています。インベントリーには、Automation Controller に直接ホスト接続情報を入力する静的インベントリーと、Automation Controller でサポートされている、AWS や Azure などクラウドや、vSphere などの仮想環境からインベントリー情報を取得して登録する動的インベントリーがあります。 +### ステップ 5 -今回の演習では、静的インベントリーがすでに作成されています。ここで、このインベントリーを見て、その書き方について確認してみます。 +スクロールダウンして、保存時にプロジェクトがソースコントロールリポジトリーに対して正常に同期されたことを確認します。リストビューのプロジェクト名の横に +Successful と表示された緑色のアイコンが表示されているはずです。ステータスが Successful +と表示されない場合は、プロジェクトの同期ボタンを再度押してステータスを確認してください。 -### ステップ 1: +![同期成功](images/1-controller-project-success.png) -左側のパネルで **インベントリー** をクリックします。事前に作成されたインベントリー情報が見えます。 -**Workshop Inventory** という名前のインベントリーもしくは編集アイコン ![Edit](images/at_edit.png) をクリックします。 +## インベントリー -### ステップ 2: +インベントリーとは、ジョブを起動するためのホストの集合体です。インベントリーはグループに分けられ、そのグループにはホストが含まれます。インベントリーは、ホスト名を +Controller に入力して手動で作成したり、Automation Controller がサポートしているクラウドプロバイダーや +Automation Hub の Certified Content Collections にあるインベントリープラグインから作成することができます。 -インベントリーの内容が表示されています。ここからホストやグループや変数など、このインベントリーに関する情報を追加する事が出来ます。 +静的なインベントリーがすでに作成されています。このインベントリーを見て、いくつかのプロパティーと設定パラメーターを紹介しましょう。 -![Edit Inventory](images/1-controller-edit-inventory.ja.jpg) +### ステップ 1 -**ホスト** ボタンをクリックすると対象ホストがリスト表示されます。 +左側のパネルから **Inventories** をクリックします。事前設定されたインベントリが一覧表示されます。インベントリーの名前 +**Workshop Inventory** または Edit ボタンをクリックします。![編集](images/at_edit.png) -### ステップ 3: +### ステップ 2 -ホストビューでは、このインベントリーに関連付けられているすべてのホストが確認できます。また、ホストが関連付けられているグループも表示されます。 -ホストは複数のグループに関連付けることができます。Playbook の実行はこのインベントリー全体でも可能ですし、このグループを指定した実行も可能です。 +現在、インベントリーが表示されています。ここから、このインベントリーに固有のホスト、グループ、さらには変数を追加することができます。 -![Hosts View](images/1-controller-hosts-view.ja.jpg) +![インベントリーの編集](images/1-tower-edit-inventory.png) -### ステップ 4: +ホストを表示するので、**HOSTS** ボタンをクリックします。 -**グループ** ボタンをクリックし **Windows** を選択すると、このグループに対して適応している変数を見る事が出来ます。Windows の場合は接続に WinRM を利用しますので、その情報とポート番号などが記載されています。 +### ステップ 3 -![Group Edit](images/1-controller-group-edit.ja.jpg) +ホストビューでは、このインベントリーに関連付けられているすべてのホストを確認できます。また、ホストが関連付けられているグループも表示されます。ホストは複数のグループに関連付けることができます。これらのグループは、後で自動化を実行する正確なホストに絞り込むために後で使用できます。 -この演習では、特定のホスト(この例では Windows ホスト)に接続する方法を『グループ内の変数』として定義しました。ただ、必ずここに記載しないといけない、というわけではなく、ホスト毎の変数として定義することも出来ますし、テンプレートや、Playbook の中に定義することも可能です。 +![ホストビュー](images/1-controller-hosts-view.png) -各変数の意味については以下の通りです。 +### ステップ 4 -Ansible はデフォルトでは ssh での接続を試みます。Windows では ssh ではなく、WinRM での接続となりますので、その旨 Ansible に教えてあげる必要があります。その手段が、ansible_connection という変数です。 -[WinRM](https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html). +**GROUPS** ボタンをクリックしてから **Windows** +グループを選択すると、そのグループ内のすべてのホストに適用されるグループレベルで設定された変数を検査できます。 -**`ansible_connection: winrm`** +![Group Edit](images/1-controller-group-edit.png) -また、AnsibleにWinRM SSLポート5986に接続するよう指示します(非SSLポートで、暗号化されないポート番号は5985です) +今日、このグループのホストに接続する方法を Controller +に指示するために、いくつかの変数をすでに定義しました。ここでこれらの変数をグループ変数として定義する必要はありません。ホスト変数にすることも、テンプレートまたは +Playbook に直接存在させることもできます。ただし、これらの変数は環境内の **すべて** のWindows +ホストで同じであるため、Windows グループ全体で定義しました。 -**`ansible_port: 5986`** +デフォルトでは、Ansible は SSH を使用して任意のホストに接続しようとするため、Windows の場合は、別の接続方法 (この場合は +[WinRM])(https://docs.ansible.com/ansible/latest/user_guide/windows_winrm.html) +を使用するように指示する必要があります。 -また、演習環境では適切な証明書ストアのセットアップがないため、Ansibleに WinRM 証明書を無視するように指示します。 +**`ansible_connection: winrm`** -**`ansible_winrm_server_cert_validation: ignore`** +また、Ansible に WinRM SSL ポート 5986 に接続するように指示します (非 SSL ポートは 5985 +で実行されますが、暗号化されていません)。 -Windowsには様々な接続時の認証方法があります。ここでは、**CredSSP** を使用して Windows ホストへの認証を行うよう Ansible に指示します。 +**`ansible_port: 5986`** -**`ansible_winrm_transport: credssp`** +また、ラボには適切な証明書ストアが設定されていないため、WinRM 証明書を無視するように Ansible に指示します。 +**`ansible_winrm_server_cert_validation: ignore`** -**ホスト** ボタンをクリックすると windows グループに所属するホスト一覧が表示されます。このページでホストのリンクをクリックすると、定義されているホスト固有の変数を確認する事が出来ます。 +Windows には、接続に利用できるさまざまな認証方法もあります。ここでは、Ansible に **CredSSP** +トランスポートメソッドを使用して Windows ホストへの認証を行うように指示します。 -![Host Edit](images/1-controller-host-edit.ja.jpg) +**`ansible_winrm_transport: credssp`** -**`ansible_host`** +**HOSTS** ボタンをクリックすると、windows +グループに属するホストを表示できます。このページのホストのリンクをクリックすると、定義されているホスト固有の変数を表示できます。 -このサーバーのIPアドレスを定義する変数です。 +![ホスト編集](images/1-controller-host-edit.png) -**`ansible_password`** +**`ansible_host`** -このサーバーに接続するためのパスワードを定義する変数です。 +これは、この特定のサーバーの IP アドレスです -**`ansible_user`** +**`ansible_password`** -このサーバーに接続するためのユーザーを定義する変数です。 +これは、このサーバーに接続するために必要なパスワードです -これらの変数はホスト固有であるため、グループレベルではなくホストレベルで定義されています。 +**`ansible_user`** -その他の設定については [Windows Guides](https://docs.ansible.com/ansible/latest/user_guide/windows.html) をご参照ください。 -認証設定は特に重要であり、それらを確認して、ニーズに合わせて最適な方法を決定する必要があります。 +これは、Ansible がこのサーバーに接続するためにパスワードとともに使用するユーザー名です -## まとめ +これらの変数は非常にホスト固有であるため、グループレベルではなくホストレベルで定義されています。 -これで、Automation Controller の基本設定は完了です。 演習2では、これらのホストに対し、いくつかの Ad-Hoc コマンドを実行します。 +これらの設定やその他の設定の詳細については、[Windows +ガイド](https://docs.ansible.com/ansible/latest/user_guide/windows.html) +を参照してください。認証設定は特に重要であり、それらを確認して、ニーズに最適な方法を決定する必要があります。 -[ワークショップ一覧に戻る](../README.ja.md) +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/2-adhoc/README.ja.md b/exercises/ansible_windows/2-adhoc/README.ja.md index 18e288ffa..58d5f791e 100644 --- a/exercises/ansible_windows/2-adhoc/README.ja.md +++ b/exercises/ansible_windows/2-adhoc/README.ja.md @@ -1,156 +1,303 @@ -# 演習 2 - アドホックコマンド +セクション 1: アドホックコマンド +============================================== -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-この演習では、いくつかのアドホックコマンドを実行して、Ansibleがどのように機能するかを理解します。 Ansible アドホックコマンドを使用すると、Playbook を作成しなくてもリモートノードでタスクを実行できます。多くのリモートノードに対して1つまたは2つのことを簡単に行う必要がある場合に非常に便利です。 +最初の演習では、Ansible の動作の感じをつかむために、いくつかアドホックコマンドを実行します。Ansible Ad-Hoc +コマンドでは、playbook を使わずにリモートノードでタスクを実行できます。これらは、1 つまたは 2 +つのことを素早く多くのリモートノードに行う必要がある場合に便利です。 -### ステップ 1: +ステップ 1 +-------------- -左パネルの **インベントリー**をクリックし、インベントリ **Workshop Inventory** をクリックします。 -インベントリーの詳細が表示されたら**ホスト**をクリックします。 +まず、インベントリーに移動する必要があります。したがって、左側のパネルの **Inventories** をクリックしてから、インベントリーの +**Workshop Inventory** の名前をクリックします。Inventory Details +ページが表示されたため、ホストを選択する必要があります。したがって、**HOSTS** をクリックします。 -各ホストの横にはチェックボックスがあります。アドホックコマンドを実行する Windows グループに属するホストの横にあるチェックボックスをオンにします。**コマンドの実行** ボタンが有効になったことを確認し、クリックします。 +各ホストの横には、チェックボックスがあります。アドホックコマンドを実行したい各ホストの横にあるチェックボックスにチェックを入れます。**Run +Command** ボタンを選択します。 -![Run Command](images/2-adhoc-run-command.ja.jpg) +![コマンド実行](images/2-adhoc-run-command.png) -**コマンドの実行** ウィンドウが表示されます。ここからアドホックコマンドを実行する事が出来ます。 +これにより、**Execute Command** ウィンドウがポップアップ表示されます。ここから、ホストに対して単一のタスクを実行できます。 +まずは基本的なことから始めましょう。ホストに ping を実行します。`win_ping` モジュールは、Windows +ホストが応答することを確認します。これは従来の *ping* ではありませんが、実際にはホストへの接続と認証の両方を検証します。 -まずは簡単なことから始めましょう♪ -ホストへの ping です。 `win_ping` モジュールは、Windows ホストが応答することを確認します。これは一般的に知られているネットワークの*ping*ではなく、Ansible のターゲットホストへ接続と認証の両方を検証します。 +このフォームに次のように記入してください +| Key | Value | Note | +| --------------------- | -------------------------------------- | -------------------------------------------------------------- | +| Module | `win_ping` | | +| Arguments | | Intentionally blank | +| Limit | | This should display the host you selected in the previous step | -下記を入力ください。 +**NEXT** ボタンをクリックします。 -| キー | 値 | 備考 | -|--------------------|-----------------|-----------------------------------------------------------------| -| モジュール | `win_ping` | | -| 引数 | | 空欄のままでOKです | -| 制限 | | 選択したホストが自動で入力されます | -| マシンの認証情報 | Student Account | | +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | -![Run Win\_Ping](images/2-adhoc-run-win_ping.ja.jpg) +**NEXT** ボタンをクリックします。 -**起動** をクリックするとジョブ表示に切り替わります。Ansible Towerのすべてのジョブと実行内容は保存されます。これらのログは自動でローテーションする形式をとっていますが、Splunk や ELK などの別のログシステムに自動的にエクスポートすることもできます。 +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | -以下の通りログには、誰が、どのホストに対して、いつ、ジョブを実行したかなどの情報が含まれます。 -![Win\_Ping Log Details](images/2-adhoc-run-win_ping-success.ja.jpg) +**LAUNCH** をクリックすると、ジョブログにリダイレクトされます。Automation Controller +のすべてのジョブとアクションは記録され、保存されます。これらのログは、Splunk や ELK +などの他のログシステムに自動的にエクスポートすることもできます。 -また、実際の出力結果が表示されます。接続が成功した場合、次のような結果が表示されます。 +出力タブはデフォルトで表示されます。タスクによって生成された出力が表示されます。 -![Win\_Ping Log Details](images/2-adhoc-run-win_ping-output.ja.jpg) +![Win\_Ping 出力](images/2-adhoc-run-win_ping-output.png) -結果表示は、使用するモジュールによって異なります。タスクに応じて異なるデータセットを処理するためです。ただ、使用されているモジュールに関係なく、常に成功、失敗、変更、スキップのいずれかの色分けされたステータスが表示されます。これは共通です。 +詳細タブには、タスクがいつ、誰によって、どのような認証情報で実行され、どのホストが影響を受けたかという情報が表示されます。 -### ステップ 2: +![Win\_Ping 詳細](images/2-adhoc-run-win_ping-details.png) -次に、`win_shell` モジュールを使用して PowerShell コマンドを実行し、出力を表示する方法を見てみましょう。 +返される結果は、使用するモジュールによって異なります。これらはすべて、タスクに応じて異なるデータセットを処理および処理するためです。どのモジュールを使用する場合でも、SUCCESS、FAILURE、CHANGED、または +SKIPPING のいずれかの色分けされたステータスが常に表示されます。 +ステップ 2 +-------------- -| キー | 値 | 備考 | -|--------------------|-----------------|------| -| モジュール | `win_shell` | | -| 引数 | `Get-Service` | | -| マシンの認証情報 | Student Account | | +次に、PowerShell コマンドを実行し、`win_shell` モジュールを使用して出力を表示する方法を見てみましょう。 +もう 1 度フォームに入力しましょう。ただし、今回は `win_shell` モジュールを使用して `Get-Service` Powershell +コマンドを実行します。 -ジョブを起動し、結果を確認してみましょう。Powershell コマンドが返した内容が直接表示されていることが分かります。この表示内容を変数に保存し、Ansible Playbook 内で利用することも可能です。 +| Key | Value | Note | +| --------- | ------------- | -------------------------------------------------------------- | +| Module | `win_shell` | | +| Arguments | `Get-Service` | | +| Limit | | This should display the host you selected in the previous step | -今度は引数に `Get-Process` を入力し、Powershell コマンドを実行してみましょう. -| キー | 値 | 備考 | -|--------------------|-----------------|------| -| モジュール | `win_shell` | | -| 引数 | `Get-Process` | | -| マシン認証情報 | Student Account | | +**NEXT** ボタンをクリックします。 -### ステップ 3: +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | -次に、Ansible の強力な機能の1つである、対象ノードのファクト情報について演習してみましょう。今回の演習では、Windows ノードの構成を確認します。利用するのは、`setup` モジュールです。このモジュールはリモートホストからさまざまなデータを取得し、そのデータを Ansible ファクトとして返します。ファクトには、OSバージョン、ハードウェア構成、その他のデータポイントなどターゲットノードに関する様々な情報が含まれてており、この情報を基にタスク実行の要否を判断したり、OSバージョンに基づいたパッケージ名を決定したりなど、Playbook 内で様々な形で再利用することが可能です。 +**NEXT** ボタンをクリックします。 -デフォルトで、 `setup` モジュールはすべての Playbook の先頭で自動的に実行されます。このため、このファクト情報は常に Playbook で利用可能です。 +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | -早速 `setup` モジュールを実行して出力を見てみましょう。下記情報を使用して**コマンド実行**を行います。 +ジョブを起動し、結果を表示します。Powershell コマンドが返したものの直接出力が返されることがわかります。このデータは変数に保存でき、後で +Ansible Playbook 内で直接解析できます。 -| キー | 値 | 備考 | -|--------------------|-----------------|---------------------| -| モジュール | `setup` | | -| 引数 | | 空欄のまま | -| マシンの認証情報 | Student Account | | +そして、`Get-Process` Powershell コマンドを使用してもう 1 度実行します。 -実行すると以下のような結果が確認できます。 +| Key | Value | Note | +| --------- | ------------- | -------------------------------------------------------------- | +| Module | `win_shell` | | +| Arguments | `Get-Process` | | +| Limit | | This should display the host you selected in the previous step | -![Setup Log Details](images/2-adhoc-run-setup-output.ja.jpg) -(**Note:** 上記の出力の23行目に表示されている3つのドットをクリックすると、`setup` モジュールによって返されたすべてのファクトが表示されます) +**NEXT** ボタンをクリックします。 -### ステップ 4: +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | -では、`win_feature` モジュールを使用して IIS をインストールしましょう。引数は、もう少し複雑になります。 +**NEXT** ボタンをクリックします。 -| キー | 値 | 備考| -|--------------------|---------------------------------|------| -| モジュール | `win_feature` | | -| 引数 | `name=Web-Server state=present` | | -| マシンの認証情報 | Student Account | | +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | -ログテキストがオレンジ色になっていることがわかります。これは、システムに変更が加えられたことを示しており、緑は変更が加えられていないことを示しています。 +ステップ 3 +-------------- -![Win\_Feature Log Details](images/2-adhoc-run-win_feature-output.ja.jpg) +ここからは、Windows ノードの構成を見ていきます。`setup` モジュールは、リモートホストにさまざまなデータを照会し、そのデータを +Ansible +ファクトとして返します。このデータは、オペレーティングシステムのバージョンやハードウェアの構成などを確認するのに役立ちます。これをプレイブックで利用することで、タスクを実行するかどうかを判断したり、OS +のバージョンに応じてパッケージの名前を決定したりすることができます。 -### ステップ 5: +`setup` モジュールは、設定されていない限り、すべてのプレイブックの先頭で自動的に実行されるため、このデータは常に Playbook +で利用できます。 -IIS がインストールされたので、 `win_service` モジュールを使用して開始されていることを確認してみます。 +先に進み、`setup` モジュールを実行して出力を確認しましょう。**EXECUTE COMMAND** フォームにこの情報をもう一度入力します。 -| キー | 値 | 備考 | -|--------------------|----------------------------|------| -| モジュール | `win_service` | | -| 引数 | `name=W3Svc state=started` | | -| マシンの認証情報 | Student Account | | +| Key | Value | Note | +| --------- | ------- | -------------------------------------------------------------- | +| Module | `setup` | | +| Arguments | | Intentionally blank | +| Limit | | This should display the host you selected in the previous step | -### ステップ 6: -最後に、インストールした IIS をクリーンアップしましょう。まず、IIS サービスを止めます。 +**NEXT** ボタンをクリックします。 -| キー | 値 | 備考 | -|--------------------|----------------------------|------| -| モジュール | `win_service` | | -| 引数 | `name=W3Svc state=stopped` | | -| マシンの認証情報 | Student Account | | +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | -### ステップ 7: +**NEXT** ボタンをクリックします。 -次に、IIS をアンインストールします。 +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | -| キー | 値 | 備考 | -|--------------------|--------------------------------|------| -| モジュール | `win_feature` | | -| 引数 | `name=Web-Server state=absent` | | -| マシンの認証情報 | Student Account | | +以下のような出力が表示されるはずです。 -そして、ホストをリブートします。 +![セットアップログの詳細](images/2-adhoc-run-setup-output.png) -| キー | 値 | 備考 | -|--------------------|-----------------|---------------------| -| モジュール | `win_reboot` | | -| 引数 | | 空欄のまま | -| マシンの認証情報 | Student Account | | +(**注意:** 上記の出力の 21 行目に示されている 3 つのドットをクリックすると、`setup` +モジュールによって返されるすべてのファクトが表示されます。) -> **ヒント** -> -> この `win_reboot` モジュールはマシンをリブートさせ、終了する前の状態に完全に戻るのを待ちます。例えば Playbook の途中でホストを再起動する必要がある場合、ホストにアクセスできなくて Playbook の残りの部分の失敗になる事はありません。便利ですね。♬ +ステップ 4 +-------------- +それでは、`win_feature` モジュールを使用して IIS をインストールしましょう。引数パラメーターはもう少し複雑になります。 +| Key | Value | Note | +| --------- | ------------------------------- | -------------------------------------------------------------- | +| Module | `win_feature` | | +| Arguments | `name=Web-Server state=present` | | +| Limit | | This should display the host you selected in the previous step | -## まとめ -アドホックコマンドは、本当の意味でアドホックに実行する際に役に立ちます。逆に、皆さんもこの演習でちょっと感じたかもしれませんが、環境内で自動化が大きくなると、アドホックコマンドの実行は面倒になってきます。上記の IIS の例では、本来は、面倒な一連のアドホックコマンド実行ではなく、Playbook 化して実行する方が良かったと思います。アドホックコマンド利用は、CLIからの個々のコマンドの実行に似ていますよね。これは Playbook を使った演習で、より明確になります。 +**NEXT** ボタンをクリックします。 -*こんなコメントを確認しましたか?* Windows サーバーでタスクが実行されると、Ansible はそのタスクを実行した後の再起動の要否も同時に取得可能です。以下は、IIS 機能を削除するコマンドの出力の一部です。このタスクの出力は、続行する前に再起動するかどうかが含まれており、ここを確認の後、rebbot_required = true なら、後続のタスクでリブートを実行するようなことも可能です。 +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | -![Reboot required](images/2-adhoc-reboot-required.png) +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | + +ログテキストがオレンジ色になっていることがわかります。これは、システムに変更が加えられたことを示しています。一方、グリーンは以前に変更が行われていないことを示しています。 + +![Win\_Feature Log Details](images/2-adhoc-run-win_feature-output.png) + +ステップ 5 +-------------- + +さて、IIS がインストールされたので、`win_service` モジュールを使用して開始されていることを確認しましょう。 + +| Key | Value | Note | +| --------- | -------------------------- | -------------------------------------------------------------- | +| Module | `win_service` | | +| Arguments | `name=W3Svc state=started` | | +| Limit | | This should display the host you selected in the previous step | + + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | + + +ステップ 6 +-------------- + +最後に、クリーンアップを行います。まず、IIS サービスを停止します。 + +| Key | Value | Note | +| --------- | -------------------------- | -------------------------------------------------------------- | +| Module | `win_service` | | +| Arguments | `name=W3Svc state=stopped` | | +| Limit | | This should display the host you selected in the previous step | + + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | + +**NEXT** ボタンをクリックします。 +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | -[ワークショップ一覧に戻る](../README.ja.md) +ステップ 7 +-------------- + +次に、IIS 機能を削除します。 + +| Key | Value | Note | +| --------- | ------------------------------ | -------------------------------------------------------------- | +| Module | `win_feature` | | +| Arguments | `name=Web-Server state=absent` | | +| Limit | | This should display the host you selected in the previous step | + + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | + +そして、ホストを再起動します。 + +| Key | Value | Note | +| --------- | ------------ | -------------------------------------------------------------- | +| Module | `win_reboot` | | +| Arguments | | Intentionally blank | +| Limit | | This should display the host you selected in the previous step | + + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| --------------------- | -------------------------------------- | ---- | +| Execution environment | windows workshop execution environment | | + +**NEXT** ボタンをクリックします。 + +| Key | Value | Note | +| ------------------ | ------------------- | ---- | +| Machine credential | Workshop Credential | | +| | | | + +> **注意** +> +> `win_reboot` モジュールはマシンを再起動させ、その後 +> 終了する前に、完全に元に戻るのを待ちます。この場合、 +> Playbook の途中でホストを再起動する必要があり、Playbook の残りは、 +> ホストにアクセスできないため、失敗しません。 + +結果 +------ + +アドホックコマンドは、時折実行すると便利な場合があります。ただし、自動化が環境内で成長し続けるにつれて、自動化の使用頻度はますます少なくなっています。上記の +IIS の例では、面倒な一連のアドホックコマンドを介して実行するのではなく、Playbook +に書き出すことができたはずです。このアドホックコマンドとの相互作用は、CLI +からの個々のコマンドの実行を模倣しているように見えます。追加の演習で、これがより明確になります。 + +*お気づきでしょうか。*タスクが Windows サーバーで実行される場合、Ansible は、そのタスクの実行後に再起動が必要かどうかをスマートに認識しています。以下は、IIS 機能を削除するコマンドの出力の一部です。このタスクの出力は、続行する前に再起動するかどうかなど、後続のタスクで使用できます。 + +![Reboot required](images/2-adhoc-reboot-required.png) +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/3-playbook/README.ja.md b/exercises/ansible_windows/3-playbook/README.ja.md index 850fe1122..517bc75d3 100644 --- a/exercises/ansible_windows/3-playbook/README.ja.md +++ b/exercises/ansible_windows/3-playbook/README.ja.md @@ -1,53 +1,66 @@ -# 演習 3 - Playbook 概要 +# ステップ 1 - Playbook 用のディレクトリー構造とファイルの作成 -**Read this in other languages**: +**他の言語でもお読みいただけます**:
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-この演習では、初めての Ansible Playbook を書いてみましょう。 Playbook は、実際の作業を記述する **タスク** と、タスクの実行条件などを記述する **プレイ** のセットで構成されます。このセットは Playbook 内で繰り返すことも可能です。まず、Playbook を保存するためのディレクトリ構造をセットアップします。このディレクトリ構造は、**ソースコード管理**(SCM)システムと同期して、Playbook のバージョンや品質を管理します。 この演習では、SCM として**Git**を使用します。 +最初の Ansible ** Playbook **を作成することから始めましょう。Playbook には、自動化するステップを **plays** と +**tasks** の繰り返し可能なセットにリストする場所です。まず、Playbook +を保存するためのディレクトリー構造を設定します。このディレクトリー構造は、**SCM** (source control management) +システムと同期して、プレイブックをバージョン管理します。SCM として **git** を使用します。 -Playbook には1つ以上のプレイがあり、プレイには1つまたは複数のタスクがあります。 **プレイ**の目的の1つは、タスクを実行するホストのグループを記述することです。 **タスク**の目標は、それらのホストに対してモジュールを実行することです。 +1 つの Playbook には、複数のプレイを含めることができ、単一または複数のタスクを指定できます。*play* +の目的は、ホストのグループをマッピングすることです。*task* の目的は、それらのホストにモジュールを実装することです。 -最初の Playbook では、1つのプレイと3つのタスクを記述します。 +最初の Playbook では、1 つの play で 3 つのタスクのみを記述します。 -今回の演習では、全ての Playbook は単一のGit **リポジトリ**に保存されています。Git の様な SCM は、複数のユーザーが同じリポジトリを使用できるため、Playbook の品質とバージョンを管理に有用です。Automation Controller では簡単に SCM と連携する事が出来ます。 +すべてのプレイブックは、1 つの git **repository** に保存されます。 +複数のユーザーが同じリポジトリーを使用することができ、ファイルの競合やバージョンは git +が管理します。この環境では、各生徒はプライベートなリポジトリーに単独でアクセスできます。 ## 概要 -この演習では、エディターとして Visual Studio Code を使ってみましょう。さらに、ソースコード管理に GitLab を使用します。これにより、Linuxコマンドラインを理解していなくても開発作業が楽に行えます。他のエディターまたはソースコードソリューションを使用することももちろん可能です。 +このタスクから始めて、エディターとして Visual StudioCode を使用します。さらに、ソースコード管理には Gitea +を使用します。これにより、Linux +コマンドラインでの開発作業を最小限に抑えることができます。他のエディターまたはソースコードソリューションを使用できますが、これは一般的なワークフローを示しています。 -### ステップ 1: Playbook のディレクトリ構造とファイルの作成 +## ステップ 1 - Playbook 用のディレクトリー構造とファイルの作成 -Playbook のディレクトリ構造としては、[ベストプラクティス](https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html)があります。Ansible の技術を習得する際には学習しておくことを強くお勧めします。ただこの演習で利用する Playbook は非常に基本的なものですので複雑なディレクトリ構造は必要ありません。 +Playbook の望ましいディレクトリー構造については、[ベストプラクティス] +(https://docs.ansible.com/ansible/latest/user_guide/playbooks_best_practices.html) +があります。Ansible のスキルを向上させるために、これらのプラクティスを読んで理解することを強くお勧めします。とはいえ、今回の Playbook +は非常に基本的なものなので、複雑なディレクトリー構造は必要ありません。 -この演習ではまず、シンプルなディレクトリ構造を作成し、そこに Playbook 及び、関連するいくつかのファイルを追加します。 +代わりに、Playbook 用に非常に簡単なディレクトリー構造を作成し、いくつかのファイルを追加します。 -### ステップ 2: Visual Studio Code への接続 +**ステップ 1:** -Visual Studio Code を開きます。 +Visual Studio Code を開きます。 -この演習では、あらかじめ各自の Git リポジトリはクローン済みです。 -VS Code へのアクセス先と認証情報を確認し接続を完了します。 +このラボでは、Git リポジトリーのクローンをすでに作成しています。 + +アクセスするには、ワークショップページ から VS CodeAccess のリンクをクリックします。 ![VS Code Access](images/3-vscode-access.png) -Explorer サイドバーは、READMEファイルのみを含む *WORKSHOP_PROJECT* セクションとなっています。 +Explorer サイドバーのこの時点で、README ファイルのみを含む* WORKSHOP_PROJECT *セクションが必要です。 ![Student Playbooks Repo](images/3-vscode-open-folder.png) -### ステップ 3: ディレクトリーと Playbook の作成 +**ステップ 2:** **iis_basic** というディレクトリーと +`install_iis.yml` というファイルを作成します。 -*WORKSHOP_PROJECT* セクションにカーソルを合わせ、*New Folder* ボタンをクリックします。 -`iis_basic`という名前のフォルダーを作成します。次に作成した新しいフォルダーを右クリックして、`install_iis.yml`というファイルを作成します。 +*WORKSHOP_PROJECT* セクションにカーソルを合わせ、*New Folder* ボタンをクリックします。`iis_basic` +というフォルダーを作成します。次に、そのフォルダーをクリックして選択します。作成した新しいフォルダを右クリックして、`install_iis.yml` +というファイルを作成します。 -作成すると右ペインに編集可能なエディタが表示されます。ここに Playbook を記述していきます。♬ +これで、Playbook の作成に使用できるエディターが右側のペインで開いているはずです。 ![Empty install\_iis.yml](images/3-vscode-create-folders.png) -### ステップ 4: プレイの定義 +## セクション 2: プレイの定義 -`install_iis.yml`を編集します。まずプレイを記述してみましょう。 -次に、各行の意味をご説明します。 +`install_iis.yml` を編集しているので、まずプレイを定義してから、各行が何を達成するかを理解しましょう。 ```yaml --- @@ -55,45 +68,46 @@ Explorer サイドバーは、READMEファイルのみを含む *WORKSHOP_PROJEC hosts: windows ``` -- `---` YAMLであることを示しています。 - -- `name: install the iis web service` プレイに対する名前です。 +* `---` YAMLの始まりを定義します +* `name: install the iis web service` ここでは、プレイを説明します。 +* `hosts: windows` このプレイが実行されるインベントリ内のホストグループを定義します -- `hosts: windows` このプレイが実行されるインベントリ内のホストグループを定義します +## セクション 3: プレイにタスクを追加する -### ステップ 5: プレイに対するタスクの記述 - -次に、いくつかのタスクを追加します。(タスク)の**t**をhost`hosts`の**h**に(垂直に)位置合わせします。 -YAML ファイルではスペースはとても重要です。タブを使ってはいけません。 -Playbook 全体は一番下にありますので必要に応じてご参照ください。 +プレイを定義したので、いくつかのタスクを追加して、いくつかのことを実行しましょう。`task` の **t**を `hosts` の **h** に +(垂直に) 揃えます。これは重要です。実際、すべての Playbook +ステートメントがここに示されている方法で整列されていることを確認する必要があります。また、インデントにはスペースを使用する必要があります。タブは有効な +YAML 構文ではありません。Playbook 全体を参照用に表示する場合は、この演習の最後にスキップしてください。 + ```yaml - tasks: - - name: install iis - win_feature: - name: Web-Server - state: present - - - name: start iis service - win_service: - name: W3Svc - state: started - - - name: Create website index.html - win_copy: - content: "{{ iis_test_message }}" - dest: C:\Inetpub\wwwroot\index.html - - - name: Show website address - debug: - msg: "http://{{ ansible_host }}" + tasks: + - name: install iis + win_feature: + name: Web-Server + state: present + + - name: start iis service + win_service: + name: W3Svc + state: started + + - name: Create website index.html + win_copy: + content: "{{ iis_test_message }}" + dest: C:\Inetpub\wwwroot\index.html + + - name: Show website address + debug: + msg: "http://{{ ansible_host }}" ``` - -- `tasks:` タスクが記述されていることを示しています。 + -- `- name:` Playbook の実行時に標準出力に表示される名前です。短くて分かりやすい名前が良いと思います。♬ +* `tasks:` これは、1 つ以上のタスクが定義されようとしていることを示します +* `- name:` 各タスクには、Playbook + を実行したときに標準出力に出力される名前が必要です。したがって、タスクには短く、わかりやすい名前を付けてください @@ -103,75 +117,99 @@ Playbook 全体は一番下にありますので必要に応じてご参照く state: present ``` -- 上記 3 行は、Ansible モジュール **`win_feature`** を使って IIS Web サーバーをインストールしています。`win_feature` モジュールのすべてのオプションを表示します。win_feature モジュール詳細は[こちら](https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_feature_module.html)をご参照ください。 - +* これらの3行は、IIS WebサーバーをインストールするためのAnsibleモジュール **`win_feature`** + を呼び出しています。`win_feature` モジュールのすべてのオプションを見るには + [ここをクリック](https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_feature_module.html) + します。 + ```yaml win_service: name: W3Svc state: started ``` -- 続くいくつかの行で、Ansible モジュール **win_service** を使って IIS サービスを起動しています。この win_service モジュールは windows ホストのサービス管理するために有用なモジュールです。win_service モジュール詳細は[こちら](https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_service_module.html)をご参照ください。 - +* 次の数行は、Ansible モジュール **win_service** を使用して IIS サービスを開始しています。`win_service` + モジュールは、リモートホスト上のサービスを制御するための推奨される方法です。**`win_service`** + モジュールの詳細は、[ここをクリック](https://docs.ansible.com/ansible/latest/collections/ansible/windows/win_service_module.html) + してください。 + ```yaml win_copy: content: "{{ iis_test_message }}" dest: C:\Inetpub\wwwroot\index.html ``` + -- このタスクでは、win_copy モジュールを使用して、特定のコンテンツを含むファイルを対象ノードにコピーしています。 ここでは、変数を使用してコンテンツを取得しているため、少し表現が複雑になっています。変数については、後のレッスンで説明いたします。ここでは Automation Controller から リモートホストに ファイル名 index.html としてファイルをコピーしていることだけ理解いただければ大丈夫です! +* このタスクでは、win\_copy + モジュールを使用して、特定の内容を含むファイルを作成します。変数を使用してコンテンツを取得しているため、ここではもう少し複雑になっています。変数については後のレッスンで紹介するため、まだ説明しません。 + ```yaml debug: msg: http://{{ ansible_host }} ``` - -- このタスクは `debug` モジュールを利用しています。debug は、変数など特定の内容を出力するためのモジュールです。ここでは、`http://` に続いて、IISをインストールした対象ホストのアドレスを出力するよう構成されています。Ansible 実行後にすぐ対象ホストにブラウザでアクセス出来て便利ですよね。♬ + +* このタスクは、`debug` モジュールを使用して、Playbook + の実行の最後にメッセージを投稿します。この特定のメッセージは、`http://` + 変数名 (Windows IIS server で + Playbook を実行しているホストの IP アドレスを含む) を出力します。 -### ステップ 6: Playbook の保存 +## セクション 4: Playbook の保存 -Playbook の記述が完了しましたので、保存しましょう。 -左上から `File > Save` をクリックします。 +Playboook の作成が完了しても保存しなければ意味がありません +メニューから `File > Save` をクリックします。 -これはするべきです。これで `install_iis.yml` の Playbook ができました。 +これで OK です。これで `install_iis.yml` という完全に記述された Playbook ができました。 -でもまだ終わってません!!! **ローカル**コピーから**Git**への変更(コミット)が必要です。以下に示すように、[Source Code]アイコンをクリックします(ページの一番左の中央にある青い円に1が表示されていることが確認できます) +まだ終わりではありません。**ローカル** コピーから **git** +への変更をコミットしていません。以下に示すように、ソースコードアイコンをクリックします (ページの左端の中央に、\#1 が含まれる青い円があります)。 ![Git Commit](images/3-vscode-click-commit.png) -サイドバーの上部にあるテキストボックスに*Adding install _iis.yml* など変更内容を入力した上で、上部の`Commit`をクリックします。このメッセージは、バージョンを比較するときに他の人(自分を含む)が何が変更されているかをよりよく理解できるように、行った変更を説明することを目的としています。 +サイドバーの上部にあるテキストボックスに、*Adding install\_iis.yml* +などのコミットメッセージを入力します。コミットするには、上のチェックボックスをクリックしてください。このメッセージは、バージョンを比較するときに他の人 +(自分を含む) が何が変更されているかをよりよく理解できるように、行った変更を説明することを目的としています。 ![Git Commit install\_iis.yml](images/3-vscode-commit.png) -次に、コミットした変更をリポジトリにプッシュする必要があります。 +次に、コミットされた変更をリポジトリーにプッシュする必要があります。 -左下の青いバーで、円形矢印を含むセクションをクリックして、変更をプッシュします。 +左下の青いバーで、円形の矢印が含まれているセクションをクリックして、変更をプッシュします。 ![Git Push Origin](images/3-vscode-push.png) -プッシュするのに30秒程度かかる場合があります。 最初のプッシュの後、git fetch を定期的に実行するかどうかを尋ねるポップアップメッセージが表示される場合があります。**Yes** or **No** どちらを選択いただいてもかまいません。 +プッシュするのに 30 秒ほどかかる場合があります。最初のプッシュ後、定期的に gitfetch +を実行するかどうかを尋ねるポップアップメッセージが表示される場合があります。git リポジトリで作業しているのはあなただけなので、**Yes** または +**No** をクリックできます。 ![Git Push Origin](images/3-vscode-push-initial-pop-up.png) -コードがgitにあることを検証したい場合は、GitLabに接続して確認してみましょう。 +コードが git にあることを検証することに興味がある場合は、GitLab に接続して確認できます。ワークショップページに戻り、**GitLab +Access** の下のリンクをクリックしてユーザー名とパスワードをメモします。 ![GitLab access](images/3-vscode-gitlab-access.png) -これで最初の Playbook は完成です♬ +自動化の準備が整いました。 -> **Note** +> **注意** > -> Ansible(実際、YAML)は、特にインデント/スペースの周りの書式設定に少しこだわりがあります。YAML の書き方は、[こちら](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html)をご確認ください。上記で完成した Playbook は次のようになります。スペースに特に注意してください。 +> Ansible (実際には YAML) はフォーマットがやや特殊と感じられるかもしれません。 +> 特にインデント/間隔の周りが特殊です。オフィスに戻って +> この [YAML +構文](https://docs.ansible.com/ansible/latest/reference_appendices/YAMLSyntax.html) を少し読んだときの +> 煩わしさが軽減されます。 +> 完成した Playbook は、次のようになります。スペースと +> アライメントには特に注意が必要です。 + ```yaml --- - name: install the iis web service @@ -197,6 +235,8 @@ Playbook の記述が完了しましたので、保存しましょう。 debug: msg: http://{{ ansible_host }} ``` + -[ワークショップ一覧に戻る](../README.ja.md) +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/4-projects/README.ja.md b/exercises/ansible_windows/4-projects/README.ja.md index 7705bfdbc..ab5deae6c 100644 --- a/exercises/ansible_windows/4-projects/README.ja.md +++ b/exercises/ansible_windows/4-projects/README.ja.md @@ -1,151 +1,148 @@ -# 演習 4 - Automation Controller プロジェクト・ジョブテンプレート - -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-Automation Controller 独自のオブジェクトとして、プロジェクトとジョブテンプレートがあります。 - -## ジョブテンプレート - -Playbook 実行に必要な以下のオブジェクトを紐づけて定義したものです。 - -・管理対象ホストの一覧(インベントリ) -・管理対象ホストの認証情報(ホスト認証情報) -・起動するAnsible Playbook(プロジェクト / Playbook) - -ジョブテンプレートを作成・実行すると、管理対象ホストに対して Playbook が実行されます。 - -## プロジェクト +ジョブテンプレートは、Ansible +ジョブを実行するための定義とパラメーターのセットです。ジョブテンプレートは、同じジョブを何度も実行するのに役立ちます。 -利用する Playbook の保存先ディレクトリを指定したものです。プロジェクトで指定するのは Playbook のディレクトリまでで、Playbook の指定はジョブテンプレートで行います。プロジェクトは、/var/lib/awx/projects/ 配下に作成され、各プロジェクトの中に Playbook が配置されます。Playbook は Automation Controller ホストに sshで接続して /var/lib/awx/projects//xxx.yml という形で作成することも可能ですし、Git 等の SCM と連携して管理することも可能ですが、Playbook の品質管理やバージョン管理の面で、SCM利用を推奨しています。この演習でも、SCMを利用します。 +プロジェクトの同期 +=========================== -## プロジェクトの同期 +新しいプレイブックを使用してジョブテンプレートを作成する前に、Controller +がそれを認識できるように、まずプロジェクトを同期する必要があります。これを行うには、Controller にアクセスし、**Projects** +をクリックしてから、プロジェクトの横にある同期アイコンをクリックします。これが完了したら、ジョブテンプレートを作成できます。 -新しい Playbook でジョブテンプレートを作成する前に、最初にプロジェクトを同期して、Controllerがそれを認識できるようにする必要があります。 これを行うには、**プロジェクト**をクリックし、プロジェクトの横にある同期アイコンをクリックします。 これが完了したら、ジョブテンプレートを作成することができます。 +![プロジェクト同期](images/4-project-sync.png) -![Project Sync](images/4-project-sync.ja.jpg) +ジョブテンプレートの作成 +==================================== +ステップ 1 +-------------- -## ジョブテンプレートの作成 +**Templates** を選択します -### ステップ 1: +ステップ 2 +-------------- -左側のメニューから**テンプレート**をクリックします。 +![追加](images/add.png) アイコンをクリックして、ジョブテンプレートを選択します。 -### ステップ 2: +ステップ 3 +-------------- -次に、右側にある緑色の **+** アイコンをクリックし、**ジョブテンプレート** を選択します。 +次の値を使用してフォームに記入します -### ステップ 3: - -ジョブテンプレート作成画面が立ち上がりますので、以下を参考に作成ください。 - -| キー | 値 | 備考 | +| Key | Value | Note | |-------------|----------------------------------------------|------| -| 名前 | IIS Basic Job Template | | -| 説明 | Template for the iis-basic playbook | | -| ジョブタイプ | 実行 | | -| インベントリー | Workshop Inventory | | -| プロジェクト | Ansible Workshop Project | | +| Name | IIS Basic Job Template | | +| Description | Template for the iis-basic playbook | | +| JOB TYPE | Run | | +| INVENTORY | Workshop Inventory | | +| PROJECT | Ansible Workshop Project | | +| Execution Environment | windows workshop execution environment | | | PLAYBOOK | `iis-basic/install_iis.yml` | | -| 認証情報 | 認証情報タイプ: **マシン**. 名前: **Student Account** | | -| 制限 | windows | | -| オプション | [*] ファクトキャッシュの有効化にチェック | | - -![Create Job Template](images/4-create-job-template.ja.jpg) +| CREDENTIAL | Name: **Windows Credential** | | +| LIMIT | windows | | +| OPTIONS | [*] ENABLE FACT STORAGE | | -### ステップ 4: +![ジョブテンプレートの作成](images/4-create-job-template.png) -![Save](images/at_save.ja.jpg) をクリックし、![Add](images/at_add_survey.ja.jpg) をクリックします。 +ステップ 4 +-------------- +SAVE ![保存](images/at_save.png) をクリックします。表示されたページで、**Survey** タブを選択し、**Add** +ボタンを押します ![Survey の作成](images/4-create-survey.png) -### ステップ 5: +ステップ 5 +-------------- -以下の値を参考に、Surveyを完成させてください。 +次の値を使用して survey フォームに記入します -| キー | 値 | 備考 | +| Key | Value | Note | |------------------------|------------------------------------------------------------|------------------| -| プロンプト | 新しい Web サイト用のテストメッセージを入力します | | -| 説明 | Webサイトのテストメッセージ入力画面 | | -| 回答の変数名 | `iis_test_message` | | -| 回答タイプ | テキスト | | -| 最大長 | | デフォルトのまま | -| デフォルトの応答 | *Be creative, keep it clean, we're all professionals here* | | - -![Survey Form](images/4-survey.ja.jpg) - -### ステップ 6: +| PROMPT | Please enter a test message for your new website | | +| DESCRIPTION | Website test message prompt | | +| ANSWER VARIABLE NAME | `iis_test_message` | | +| ANSWER TYPE | Text | | +| MINIMUM/MAXIMUM LENGTH | | Use the defaults | +| DEFAULT ANSWER | *Be creative, keep it clean, we’re all professionals here* | | -![Add](images/at_add.png) をクリックします。 +Survey の設定後に、**保存** をクリックします。生成されるページで、作成した Survey を有効にします。 -### ステップ 7: +![survey の作成](images/4-survey-created.png) -![Add](images/at_save.ja.jpg) をクリックします。 -### ステップ 8: +ジョブテンプレートの実行 +==================================== -先ほどのジョブテンプレート作成画面に戻りますので、保存ボタンをクリックします。 -   -   -## ジョブテンプレートの起動 +ジョブテンプレートが正常に作成されたので、起動する準備が整いました。起動すると、ジョブのステータスを示す、リアルタイムで更新されるジョブ画面にリダイレクトされます。 -ここまでの演習でジョブテンプレートの作成が完了しました。早速起動してみましょう。♬ -ジョブテンプレートを実行するとジョブのステータスがリアルタイムで更新されるジョブ画面にリダイレクトされます。 +ステップ 1 +-------------- -### ステップ 1: +テンプレートを選択します -テンプレートをクリックします。 -> **ヒント** -> -> ジョブテンプレートの作成ページから移動していない場合は、下にスクロールして既存のすべてのジョブテンプレートを表示することも可能です +ステップ 2 +-------------- -### ステップ 2: +**IIS Basic Job Template** のロケットアイコン!![追加](images/at_launch_icon.png) +をクリックします -**IIS Basic Job Template**の右端にあるロケットアイコン ![Add](images/at_launch_icon.png) をクリックします。 +ステップ 3 +-------------- -### ステップ 3: +プロンプトが表示されたら、目的のテストメッセージを入力します -Surveyで作成した入力画面が表示されるので、お好きなメッセージ(英語)を入力してください。♪ +![Survey プロンプト](images / 4-survey-prompt.png) -![Survey Prompt](images/4-survey-prompt.ja.jpg) +ステップ 4 +-------------- -### ステップ 4: +**NEXT** を選択し、入力をプレビューします。 -**次へ** をクリックします。 +ステップ 5 +-------------- -### ステップ 5: +LAUNCH ![SurveyL](images/4-survey-launch.png) を選択します -![SurveyL](images/4-survey-launch.ja.jpg) -起動ボタンをクリックしてジョブテンプレートを起動します。 +ステップ 6 +-------------- -### ステップ 6: +リラックスしながら、魔法を拝見しましょう -ジョブの画面にリダイレクトされます。ジョブのステータス(保留中、実行中、完了など)や、だれがいつ、どのインベントリーに対して実行しているかなどが確認できます。 +再度ジョブログページが表示されます。**詳細** タブを選択すると、他の詳細間で Playbook に渡した変数が表示されます。 -![Job Summary](images/4-job-summary-details.ja.jpg) +![ジョブサマリー](images/4-job-summary-details.png) -また、実際に動作しているジョブのステータスが表示されていることが分かります。 +次に、Playbook のプレイと各タスクの詳細を確認できます。 -![Play and Task Output](images/4-job-summary-output.ja.jpg) +![プレイとタスク出力](images/4-job-summary-output.png) -### ステップ 7: +ステップ 7 +-------------- -ジョブが正常に完了すると、ジョブ出力の下部にWebサイトへのURLが印刷されます。 -アドレスに接続すると、以下のようなものが表示されます。 +ジョブが正常に完了すると、ジョブ出力の下部に Web サイトへの URL が出力されます。 -![New Website with Personalized Test Message](images/4-website-output.png) +すべてが問題なければ、このようなものが表示されるはずです。メッセージは当然、独自のカスタムが表示されます。 -### 追加演習 +![カスタムテストメッセージを含む新しい Web サイト](images/4-website-output.png) -ここまでで IISをインストールしましたので、*remove_iis.yml*という新しい Playbook を作成してIISを停止および削除します。 +追加クレジット +===================== -**ヒント:** +IIS がインストールされたので、*remove\_iis.yml* という新しい Playbook を作成して、IIS を停止および削除します。 -最初に `win_service` モジュールを使用して `W3Svc` サービスを停止。次に `win_feature` モジュールを使用して `Web-Server` サービスを削除します。 オプションで、`win_file` モジュールを使用してインデックスページを削除すれば完璧ですね♪ +**ヒント:** まず、`win_service` モジュールを使って、`W3Svc` サービスを停止します。 +その後、`win_feature` モジュールを使用して `Web-Server` サービスを削除します。 +オプションとして、`win_file` モジュールを使用してインデックスページを削除します。 -## まとめ +結果 +====== -演習4はこれで終了です。ここまでで、Automation Controller のコア機能を学びました。次の演習では、高度な Playbook の演習を行います。 +ワークショップのこの時点で、Ansible Controller +のコア機能を体験しました。しかし、待ってください。まだまだあります。これは、Automation Controller +でできることの一部にすぎません。次のいくつかのレッスンは、基本的な Playbook からの発展に役立ちます。 -[ワークショップ一覧に戻る](../README.ja.md) +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/5-adv-playbook/README.ja.md b/exercises/ansible_windows/5-adv-playbook/README.ja.md index 84af5edb4..a19e22709 100644 --- a/exercises/ansible_windows/5-adv-playbook/README.ja.md +++ b/exercises/ansible_windows/5-adv-playbook/README.ja.md @@ -1,56 +1,66 @@ -# 演習 5 - 高度な Playbook - -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-これまでの演習で、Ansible Playbook の書き方の基本を学びました。これを発展させてさらに柔軟性に富んだパワフルな Playbook の書き方について学んでいきましょう。♬ +前の演習では、Ansible Playbook の基本を説明しました。次のいくつかの演習では、自動化に柔軟性とパワーを追加する、より高度な +ansible スキルをいくつか紹介します。 + +Ansible の存在意義は、タスクをシンプルかつ繰り返し可能にすることです。すべてのシステムが完全に同じであるとは限らず、Ansible +Playbook の実行の仕組みを少し変更しなければならいことは理解しています。そこで変数を使用します。 -Ansible を利用することにより、タスクをシンプルかつ簡単に繰り返すことが可能になります。ただ、ちょっと考えていただければ分かると思いますが、全てのシステムが同じ設定というわけではなく、Playbook 実行の際、システムごとの柔軟性が必要になることもよくあります。この様な場合に対応するため、 Ansible では、非常に柔軟性に富んだ利用しやすい変数の機能が備わっています。 +変数は、システム間の違いに対処する方法です。これにより、ポート、IP アドレス、またはディレクトリーなどの変更を考慮に入れることができます。 -変数は、システム間の違いを吸収する手段を提供します。例えば、ポート、IPアドレス、またはディレクトリなどをシステムに毎に柔軟に変更することができます。 +ループでは、同じタスクを何度も繰り返すことができます。たとえば、複数のサービスの起動、複数の機能のインストール、複数のディレクトリーの作成を行いたいとします。Ansible +ループを使用することで、1 つのタスクでこれらすべてを行うことができます。 -ループを使用すると同じタスクを何度も繰り返すことができます。たとえば、複数のサービスを開始したり、複数の機能をインストールしたり、複数のディレクトリを作成したりする事が出来ます。Ansible ループを使用すると、1つのタスクでそれを実行できます。 +ハンドラーは、サービスを再起動する方法です。新しい設定ファイルをデプロイし、新しいパッケージをインストールしましたでしょうか。その場合、これらの変更を有効にするためにサービスの再起動が必要となる場合があります。これはハンドラーを使用して行います。 -ハンドラーについても学びます。ハンドラーとは、特定のタスクが実行されたときにのみに追加で呼び出されるタスクです。例えば、httpd サービスの設定ファイルを変更した場合にのみ httpd サービスを再起動するというようなことが簡単に実現可能です。通常だと if 文で書いたり、複雑になりがちですよね。Ansible だと極めて簡単に記述する事が出来ます。 +変数、ループ、ハンドラーの詳細については、これらのテーマに関する Ansible のドキュメントをご覧ください。 [Ansible +Variables](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html +[Ansible +Loops](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html +[Ansible +Handlers](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html#handlers -変数、ループ、およびハンドラーを完全に理解するには、 これらのテーマに関する以下の Ansible ドキュメントをご覧ください。 -[Ansible 変数](https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html) -[Ansible ループ](https://docs.ansible.com/ansible/latest/user_guide/playbooks_loops.html) -[Ansible ハンドラー](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html#handlers) - -## Playbook の作成 +セクション 1: Playbook の作成 +===================================== -まず最初に新しい Playbook を作成します。演習3で作成したものに近いので問題なく理解できると思います。 +まず、新しい Playbook を作成しますが、演習 3 で作成したものに非常によく似ていると思います。 -### ステップ 1: +ステップ 1 +-------------- -Visual Studio Code 内で、gitリポジトリに新しいディレクトリを作成し、`site.yml` ファイルを作成します。 -以前に「iis_basic」ディレクトリを作成した*WORKSHOP_PROJECT*が存在していると思います。 +Visual Studio Code 内で、git リポジトリーに新しいディレクトリーを作成し、site.yml ファイルを作成します。 -![Student Playbooks](images/5-vscode-existing-folders.png) +Explorer で、以前に `iis_basic` を作成した場所に *WORKSHOP_PROJECT* セクションがあるはずです。 -### ステップ 2: フォルダーとファイルの作成 +![学習者 Playbooks](images/5-vscode-existing-folders.png) -*WORKSHOP_PROJECT*セクションにカーソルを合わせ、*New Folder*ボタンをクリックします。 +ステップ 2: **iis_advanced** というフォルダーと `site.yml` というファイルを作成します +------------------------------------------------------------------------ -「iis_advanced」と入力してEnterキーを押します。 +*WORKSHOP_PROJECT* セクションにカーソルを合わせ、*New Folder* ボタンをクリックします。 -`iis_advanced`フォルダーを右クリックし、*New_File*を選択します。 +`iis_advanced` と入力し、Enter キーを押します。次に、そのフォルダーをクリックして選択します。 -`site.yml` と入力します。 +`iis_advanced` フォルダーを右クリックし、*New File* を選択します。 -Playbook 編集用のエディターが右ペインに開きます。 +`site.yml` と入力し、Enter キーを押します。 + +これで、Playbook の作成に使用できるエディターが右側のペインで開いているはずです。 ![Empty site.yml](images/5-vscode-create-folders.png) -### ステップ 3: +ステップ 3 +-------------- -Playbook のプレイの中にいくつかの変数を定義します。これには後程タスクの中で利用する Web サーバーに対する固有の構成情報が含まれています。 +プレイ定義といくつかの変数を Playbook に追加します。これらには、Playbook が Web +サーバーにインストールする追加のパッケージに加えて、いくつかの Web サーバー固有の設定が含まれます。 ```yaml --- -- hosts: windows - name: This is a play within a playbook +- name: This is a play within a playbook + hosts: windows vars: iis_sites: - name: 'Ansible Playbook Test' @@ -62,17 +72,21 @@ Playbook のプレイの中にいくつかの変数を定義します。これ iis_test_message: "Hello World! My test IIS Server" ``` -### ステップ 4: +ステップ 4 +-------------- -**install IIS**という新しいタスクを追加します。Playbook を書いた後、`ファイル` > `保存`をクリックして変更を保存します。 +**install IIS** という新しいタスクを追加します。Playbook を作成したら `File` > `Save` +をクリックして変更を保存します。 + ```yaml tasks: - name: Install IIS win_feature: name: Web-Server state: present + - name: Create site directory structure win_file: path: "{{ item.path }}" @@ -88,40 +102,58 @@ Playbook のプレイの中にいくつかの変数を定義します。これ with_items: "{{ iis_sites }}" notify: restart iis service ``` + ![site.yml part 1](images/5-vscode-iis-yaml.png) -> **ヒント** +> **注意** +> +> **ここで起きていることを説明します。** > -> - `vars:` 変数名と値に関する定義を行うことを宣言しています。 +> - `vars:` Ansible に、次のものが +> 変数名であることを指示しています。 > -> - `iis_sites` iis_sitesという名前のリスト型変数を定義しています。その下の、`name` `port` `path` は iis_sites の下位の階層の変数を定義しています。 +> - `iis_sites`: iis \ _sites というリストタイプの変数を定義しています +> これに続くのは、関連した変数を持つ各サイトの +> リストです > -> - `win_file:` ファイル、ディレクトリ、およびシンボリックリンクを作成、変更、削除するために使用されるモジュールです。 +> - `win_file:`: このモジュールは、ファイル、ディレクトリー、シンボリックリンクの作成、変更、削除に +> 使用されます。 > -> - `{{ item }}` 変数 iis_sites に対して変数の値を変化させながらタスクがループされます。ここでは、プレイで定義した `name`, `port`, `path` にそれぞれ2回、異なる値が入りながらループが実行されます。 +> - `{{ item }}` これがリストアイテムに広がることを Ansible に伝えています +> 各アイテムには、`name`、`port`、`path` などの +> いくつかの変数があります。 > -> - `with_items: "{{ iis_sites }}` Ansible によるループの書き方の1つです。変数 iis_sites が持つ値を入力しながらループを実行するという意味です。ループ内での変数は、`{{ item }}` で、この中に定義された値が入ります。 +> - `with_items: "{{ iis_sites }}` これは、 +> Ansible に、`iis_sites` においてすべての `item` に、このタスクを実行するように指示する +> ループです。 > -> - `notify: restart iis service` これはハンドラーに関する内容ですので、後述します。 +> - `notify: restart iis service` このステートメントは `handler` なので、 +> セクション 3 で説明します。 -## Firewall の開放とファイルの送付 +セクション 2: ファイアウォールを開いてファイルを展開する +================================================================================== -その後、IISサービスを開始するタスクを定義します。 +その後、IIS サービスを開始するタスクを定義します。 -### ステップ 1: +ステップ 1 +-------------- -**iis_advanced folder** がハイライトされていることを確認して、*WORKSHOP_PROJECT* にカーソルを当て、*New Folder* ボタンをクリックします。 +プロジェクトディレクトリーに `templates` ディレクトリーを作成し、次のようにテンプレートを作成します。 -`templates` と入力します。次に、この *templates* ホルダーを右クリックして *New File* ボタンを選択します。 +** iis_advanced folder** が強調表示されていることを確認してから、*WORKSHOP_PROJECT* +セクションにカーソルを合わせ、*New Folder* ボタンをクリックします。 -`index.html.j2` と入力します。 +`templates` と入力し、Enter キーを押します。*templates* フォルダーを右クリックし、*New File* +ボタンをクリックします。 -テンプレート作成用のエディターが右ペインに開きます。次の様に入力します。 +`index.html.j2` と入力し、Enter キーを押します。 +これで、テンプレートの作成に使用できるエディターが右側のペインで開いているはずです。次の詳細を入力します。 + ```html @@ -132,15 +164,19 @@ Playbook のプレイの中にいくつかの変数を定義します。これ ``` + ![index.html template](images/5-vscode-template.png) -### ステップ 2: +ステップ 2 +-------------- -ファイアウォールのポートの開放と、テンプレートによるファイル作成を行う様に Playbook `site.yml`を編集します。スラッシュをエスケープしないために、 `win_template`に一重引用符を使用しましょう。 +ファイアウォールポートを開いてテンプレートを作成することにより、Playbook `site.yml` +を編集し直します。スラッシュをエスケープしないように、`win_template` には一重引用符を使用してください。 + ```yaml - name: Open port for site on the firewall win_firewall_rule: @@ -166,28 +202,39 @@ Playbook のプレイの中にいくつかの変数を定義します。これ - http://{{ ansible_host }}:8080 - http://{{ ansible_host }}:8081 ``` + -> **ヒント** +> **注意** > -> **上記の解説です** +> **では、実際に書いたものを詳しく見ていきます。** > -> - `win_firewall_rule:` ファイアウォールルールを作成、変更、および更新するために使用されるモジュールです。AWSの場合、通信に影響を与える可能性のあるセキュリティグループルールもあります。今回の演習では、ポート開放を行っています。 +> - `win_firewall_rule:` このモジュールは、ファイアフォールルールの作成、変更、および +> 更新に使用されます。AWS の場合は、次の点にも注意してください。 +> 通信に影響を与える可能性のあるセキュリティグループルール。この例では、 +> そのポートのルールを開きました。 > -> - `win_template:` jinja2テンプレートを使ってファイルを作成し、対象ホストにファイルをコピーしています。 +> - `win_template:` このモジュールは、jinja2 テンプレートが +> 使用およびデプロイされていることを指定します。 > -> - テンプレートの中では、変数に値が入力されファイルコピーが行われます。 +> - テンプレート式内 (フィルター) のデータを変換するために +> Ansible で使用されます。 > -> - `debug:` `iis_basic` 同様、この Playbook も最後に Web サイトの URL を表示するように構成されています。 +> - `debug:` 繰り返しになりますが、`iis_basic` Playbook のように、このタスクは、この演習用に作成しているサイトにアクセスするための URL を表示します +セクション 3: ハンドラーの定義と使用 +==================================================== -## ハンドラーの利用 +設定ファイルのデプロイ、新しいパッケージのインストールなど、サービス/プロセスを再起動する必要がある理由はいくつもあります。このセクションには、実際には +2 つのパートがあります。Playbook にハンドラーを追加し、タスクの後にハンドラーを呼び出します。前者から始めます。 -Ansible には便利な機能として、ハンドラーという機能が備わっています。一つの "場合分け" と考えていただいて大丈夫です。例えば、構成ファイルの更新、新しいパッケージのインストールなど、多くの場合、サービス/プロセスの再起動が必要となります。この様な場合、特定のタスクに Notify を記述しておき、後ろにハンドラーとして追加のタスクを記述しておきます。そうすると、Notifyのタスクが実行された時にのみハンドラーで記述されたタスクが実行されるという動作が簡単に実現できます。 +`handlers` ブロックは、1 レベルのインデント、つまり 2 つのスペースの後に開始する必要があります。`tasks` +ブロックと整列する必要があります。 -### ステップ 1: +ステップ 1 +-------------- -ハンドラーの定義 +ハンドラーを定義します。 ```yaml handlers: @@ -198,35 +245,47 @@ Ansible には便利な機能として、ハンドラーという機能が備わ start_mode: auto ``` -> **ヒント** ->> -> - `handler:` notify を受けて実行されるということを除いては、ハンドラーはタスク様に記述されます。 +> **注意** +> +> **後者を語らずして、前者を始めることはできません。** > -> - `notify: restart iis service` notity は、`win_iis_website` に追記されていますのでこのタスクが実行されたときに限り、`restart iis service` で記述されたハンドラーが呼び出されて実行されるという動きになります。 +> - `handler:` これは **play** に `tasks:` が +> 終了していて、`handlers:` を定義していることを指示します。その下のすべては、 +> 他のタスクと同じように見えます。つまり、名前、 +> モジュール、およびそのモジュールのオプションを指定します。これが、ハンドラーの +> 定義です。 +> +> - `notify: restart iis service` ...そして、ここからがようやく後者の部分です。 +> `notify` ステートメントは、名前によるハンドラーの呼び出しです。 +> 明らかですね。 +> `win_iis_website` タスクに `notify` ステートメントを追加したことには既にお気づきでしょう。 +> これがその理由です。 -## コミットと動作確認 +セクション 4: コミットとレビュー +============================================== -改良された新しい Playbook の完成です♪ -早速、変更を保存し、GitLabにコミットしましょう。 +新しく改良された Playbook が完成しました。ただし、ソースコード管理への変更をコミットする必要があることを忘れないでください。 -`File` をクリックし、`Save All` を選択。編集したファイルを保存します。 +`File` → `Save All` をクリックして、書き込んだファイルを保存します ![site.yml part 2](images/5-vscode-iis-yaml.png) -Source Control アイコンをクリックし (1)、変更内容を記述し (2)、上部のチェックをクリックします (3)。 +ソースコードアイコン (1) をクリックし、*Adding advanced playbook* (2) +などのコミットメッセージを入力して、上のチェックボックス (3) をクリックします。 ![Commit site.yml](images/5-commit.png) -左下の青いバーの矢印をクリックして、gitlabに同期します。 プロンプトが表示されたら、`OK`をクリックしてコミットをプッシュおよびプルします。 +左下の青いバーの矢印をクリックして、gitlab に同期します。プロンプトが表示されたら、`OK` をクリックしてコミットをプッシュおよびプルします。 ![Push to Gitlab.yml](images/5-push.png) -コミットが完了するまでに5〜30秒かかります。 青いバーは回転を停止し、問題が0であることを確認します...   +コミットが完了するまで 5〜30 秒かかります。青いバーは回転を停止し、問題がないことを示しています...。 -Playbook は以下のようになっているはずです。もう一度確認してみましょう。 -もし間違っていれば修正してみてください。特に、スペースには要注意です。 +今一度、自分の意図した通りになっているかどうかを確認してみましょう。もしそうでなければ、今こそ修正する時です。以下の playbook +は正常に実行されるはずです。 + ```yaml --- - hosts: windows @@ -252,7 +311,7 @@ Playbook は以下のようになっているはずです。もう一度確認 path: "{{ item.path }}" state: directory with_items: "{{ iis_sites }}" - + - name: Create IIS site win_iis_website: name: "{{ item.name }}" @@ -278,7 +337,7 @@ Playbook は以下のようになっているはずです。もう一度確認 src: 'index.html.j2' dest: '{{ item.path }}\index.html' with_items: "{{ iis_sites }}" - + - name: Show website addresses debug: msg: "{{ item }}" @@ -293,96 +352,104 @@ Playbook は以下のようになっているはずです。もう一度確認 state: restarted start_mode: auto ``` + -## ジョブテンプレートの作成 +セクション 5: ジョブテンプレートの作成 +======================================================= -### ステップ 1: +ステップ 1 +-------------- -ジョブテンプレートを作成する前に、最初にプロジェクトを再同期する必要があります。そこからやりましょう! +ジョブテンプレートを作成する前に、まずプロジェクトを再同期する必要があります。これを行います。 -> **Note** +> **注意** > -> 基本的には、GitLab と Automation Controller は自動では同期されません。つまり、今回のPlaybook の存在を Automation Controller はまだ知りません。これを教えてあげる手段が、プロジェクトの同期です。やり方は・・・、そう、Automation Controller の GUI の左ペインでプロジェクトをクリックして、丸くなった矢印をクリックですね!! +> ジョブテンプレートから選択する新しい *ベース* Playbook ファイルを作成するときは、 +> 常にこれを行う必要があります。新しいファイルは、 +> ジョブテンプレート Playbook ドロップダウンで利用可能になる前に Controller に +> 同期する必要があります。 -### ステップ 2: +ステップ 2 +-------------- -この Playbook をテストするには、この Playbook を実行する新しいジョブテンプレートを作成する必要があります。*テンプレート*に移動して*+*をクリックし、`ジョブテンプレート`を選択して2番目のジョブテンプレートを作成します。入力値は以下の通りです。 +この Playbook をテストするには、この Playbook +を実行するための新しいジョブテンプレートを作成する必要があります。したがって、*Template* に移動し、*Add* をクリックして、`Job +Template` を選択し、2 番目のジョブテンプレートを作成します。 -| キー | 値 | 備考 | -|-------------|----------------------------|------| -| 名前 | IIS Advanced | | -| 説明 | Template for iis_advanced | | -| ジョブタイプ | 実行 | | -| インベントリー | Workshop Inventory | | -| プロジェクト | Ansible Workshop Project | | -| PLAYBOOK | `iis_advanced/site.yml` | | -| 認証情報 | Student Account | | -| 制限 | windows | | -| オプション | [*] ファクトキャッシュの有効化にチェック | | +次の値を使用してフォームに記入します -![Create Job Template](images/5-create-template.ja.jpg) +| Key | Value | Note | +|-------------|----------------------------|------| +| Name | IIS Advanced | | +| Description | Template for iis_advanced | | +| Job Type | Run | | +| Inventory | Workshop Inventory | | +| Execution Environment | windows workshop execution environment | | +| Project | Ansible Workshop Project | | +| Playbook | `iis_advanced/site.yml` | | +| Credentials | Workshop Credential | | +| OPTIONS | [\*] Enable Fact Storage | | -### ステップ 3: +ステップ 3 +-------------- -![Add](images/at_save.ja.jpg) をクリックした上で、SURVEY の追加をクリック ![Add](images/at_add_survey.ja.jpg) +SAVE ![保存](images/at_save.png) をクリックし、以下のページで **Survey** タブを選択します。 -### ステップ 4: +ステップ 4 +-------------- -Survey に以下を入力します。 +以下の値を使用して新規 survey を作成します。 -| キー | 値 | 備考 | +| Key | Value | Note | |------------------------|----------------------------------------------------------|------| -| プロンプト | 新しい Web サイト用のテストメッセージを入力します | | -| 説明 | Webサイトのテストメッセージ入力画面 | | -| 回答の変数名 | `iis_test_message` | | -| 回答のタイプ | テキスト | | -| 最大長 | デフォルトのまま | | -| デフォルトの応答 | Be creative, keep it clean, we're all professionals here | | +| Question | Please enter a test message for your new website | | +| Description | Website test message prompt | | +| Answer Variable Name | `iis_test_message` | | +| Answer Type | Text | | +| Minimum/Maximum Length | Keep the defaults | | +| Default Answer | Be creative, keep it clean, we’re all professionals here | | -![Survey Form](images/5-survey.ja.jpg) +![Survey ファーム](images/5-survey.png) -### ステップ 5: +ステップ 5 +-------------- -![Add](images/at_add.png) をクリックします。 +SAVE ![追加](images/at_save.png) を選択し、**On** スイッチを入れることを忘れないでください ![On +switch](images/controller_on.png) を選択します。 -### ステップ 6: -------- -![Add](images/at_save.ja.jpg) をクリックします。 +セクション 6: 新しいプレイブックの実行 +======================================================= -### ステップ 7: +それを実行して、どのように機能するかを見てみましょう。 -ジョブテンプレートの画面に戻るので、保存をクリックします。 +ステップ 1 +-------------- -## 作成した playbook を起動 +テンプレートを選択します -作成した Playbook を実行して、動くかどうか確認してみましょう。 - -### ステップ 1: - -テンプレートを選択します。 - -> **ヒント** +> **注意** > -> ジョブテンプレートの作成ページから移動していない場合は、下にスクロールして既存のすべてのジョブテンプレートを表示することも可能です +> あるいは、ジョブテンプレートから移動していない場合 +> 作成ページでは、下にスクロールして既存のすべてのジョブテンプレートを表示できます -### ステップ 2: +ステップ 2 +-------------- -**IIS Advanced**の右端にあるロケットアイコン ![Add](images/at_launch_icon.png) をクリックします。 +**IIS Advanced** ジョブテンプレートのロケットアイコン![追加](images/at_launch_icon.png) +をクリックします。 -### ステップ 3: +ステップ 3 +-------------- -Surveyで作成した入力画面が表示されるので、お好きなメッセージ(英語)を入力してください。♪ +プロンプトが表示されたら、目的のテストメッセージを入力します -起動するとジョブ画面が表示され、出力をリアルタイムで見ることができます。 +起動後、リダイレクトされ、ジョブの出力をリアルタイムで監視できます。 -ジョブが正常に完了すると、ジョブ出力の下部にWebサイトへの2つのURLが出力されます。 +ジョブが正常に完了すると、ジョブ出力の下部に Web サイトへの 2 つの URL が出力されます。 ![Job output](images/5-job-output.png) -![IIS site](images/5-iis-8080.png) - - -[ワークショップ一覧に戻る](../README.ja.md) - +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/6-roles/README.ja.md b/exercises/ansible_windows/6-roles/README.ja.md index e03fa5bba..b889ab726 100644 --- a/exercises/ansible_windows/6-roles/README.ja.md +++ b/exercises/ansible_windows/6-roles/README.ja.md @@ -1,259 +1,301 @@ -# 演習 6 - Ansible Roles - -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-このワークショップ全体で行ったように、1つの Playbook として記述することは可能ですが、Ansible を使っていると、有用な Playbook を他から再利用したいと考えるようになります。 +このワークショップを通して行ったように、1 つのファイルで Playbook +を作成することは可能です。ただし、最終的には複数のファイルを再利用して、整理することをお勧めします。 -Ansible Roles はこの手段を提供します。Roles を作成すると、Playbook をパーツが分解され、それらのパーツがディレクトリ構造に配置されます。これは Playbook 管理のベストプラクティスと考えられており、Ansible を使っていく上で多くの時間を節約できます。 +これを行うには、Ansible Roles を使用します。ロールを作成するときは、Playbook +を複数のパーツに分け、それらのパーツをディレクトリー構造に配置します。これはベストプラクティスとして考えられており、将来多くの時間を節約することができます。 -この演習では、作成した Playbook を Role に作り変えます。 +この演習では、作成したばかりの Playbook を使用して、ロールにリファクタリングします。 -まず、iis-basic-playbookがどのように複数の Role に分解されるかを見てみましょう… +まず、iis-basic-playbook がどのように役割に分解されるかを見てみましょう... -## Role のためのディレクトリーの作成 +セクション 1: 新しい役割のディレクトリー構造の作成 +========================================================================= -### ステップ 1: +ステップ 1 +-------------- -Visual Studio Codeで、エクスプローラーと以前に `iis_advanced` を作成した*WORKSHOP_PROJECT*セクションに移動します。 +Visual Studio Code で、エクスプローラーと、以前に作成した `iis_advanced` *WORKSHOP_PROJECT* +セクションに移動します。 ![iis\_advanced](images/6-vscode-existing-folders.png) -**iis_advanced** フォルダーを選択します。 +**iis_advanced** フォルダーを選択します。 -**iis_advanced** を右クリックして *New Folder* を選択、**roles** という名前のフォルダーを作成します。 +**iis_advanced** を右クリックし、*New Folder* を選択して、**roles** というディレクトリーを作成します。 -**roles** を右クリックし、その下に `iis_simple` という新しいフォルダーを作成します。   +次に、**role** を右クリックして、その下に `iis_simple` という名前の新しいフォルダーを作成します。 -### ステップ 2: +ステップ 2 +-------------- -*iis\_simple* の下にさらに以下の新しいフォルダーを作成します: +*iis\_simple* 内に、次のように新しいフォルダーを作成します。 -- defaults +* defaults -- vars +* vars -- handlers +* handlers -- tasks +* tasks -- templates +* templates -### ステップ 3: +ステップ 3 +-------------- -templates フォルダーを除く各フォルダーに、`main.yml`という名前のファイルを作成します。これは基本的な Roles のフォルダー構造であり、main.yml はロールが各セクションで使用するデフォルトのファイルになります。 +これら各新しいフォルダー (テンプレートを除く) で、右クリックして *New File* を作成します。これらの各フォルダーに `main.yml` +というファイルを作成します。個別のテンプレートファイルを作成するため、テンプレートではこれを行いません。これは基本的なロール構造であり、main.yml +はロールが各セクションで使用するデフォルトのファイルになります。 -完成した構造は次のようになります。 +完成した構造は次のようになります。 -![Role Structure](images/6-create-role.png) +![ロール構造](images/6-create-role.png) -## Playbook の Role 化 +セクション 2: `site.yml` Playbook を、新しく作成された `iis_simple` ロールに分割 +===================================================================================================== -このセクションでは、`vars:`、`tasks:`、`template:`、`handlers:`など、Playbook の主要部分を分解し Role 化します。 +このセクションでは、`vars:`、`tasks:`、`template:`、`handlers:` などの Playbook の主要部分を分離します。 -### ステップ 1: +ステップ 1 +-------------- -元の `site.yml` のバックアップを作成した後、新しく `site.yml`を作成します。 +`site.yml` のバックアップコピーを作成してから、新しい `site.yml` を作成します。 -`iis_advanced` フォルダーで、`site.yml`を右クリックし、`rename`を選択、`site.yml.backup`に変更します。 +`iis_advanced` ディレクトリーに移動し、`site.yml` を右クリックして `rename` をクリックし、これを +`site.yml.backup` と指定します。 -同じフォルダーに`site.yml` を新たに作成します。 +同じフォルダーに `site.yml` という名前の空の新しいファイルを作成します -### ステップ 2: +ステップ 2 +-------------- -site.ymlを編集して、iis_simple という名の Role を呼び出すようにします。以下のようになります。 +site.yml を更新して、自分のロールのみを呼び出すようにします。以下のようになります。 ```yaml ---- -- hosts: windows - name: This is my role-based playbook - - roles: - - iis_simple + --- + - hosts: windows + name: This is my role-based playbook + + roles: + - iis_simple ``` -![New site.yml](images/6-new-site.png) +![新しい site.yml](images/6-new-site.png) -### ステップ 3: +ステップ 3 +-------------- -デフォルト変数をロールに追加します。 `roles \ iis_simple \ defaults \ main.yml`を次のように編集します: +デフォルト変数をロールに追加します。以下のように `roles\iis_simple\defaults\main.yml` を編集します。 ```yaml ---- -# defaults file for iis_simple -iis_sites: - - name: 'Ansible Playbook Test' - port: '8080' - path: 'C:\sites\playbooktest' - - name: 'Ansible Playbook Test 2' - port: '8081' - path: 'C:\sites\playbooktest2' + --- + # defaults file for iis_simple + iis_sites: + - name: 'Ansible Playbook Test' + port: '8080' + path: 'C:\sites\playbooktest' + - name: 'Ansible Playbook Test 2' + port: '8081' + path: 'C:\sites\playbooktest2' ``` -### ステップ 4: +ステップ 4 +-------------- -`roles \ iis_simple \ vars \ main.yml`のロールにいくつかのロール固有の変数を追加します。 +`roles\iis_simple\vars\main.yml` のロールにいくつかのロール固有の変数を追加します。 ```yaml ---- -# vars file for iis_simple -iis_test_message: "Hello World! My test IIS Server" + --- + # vars file for iis_simple + iis_test_message: "Hello World! My test IIS Server" ``` -> **ヒント** -> -> **変数を違う場所に置く??** -> -> はい! Ansible では、変数はいろんな場所に置く事が出来ます。ほんの一例をあげると: +> **注意** > -> - vars フォルダー +> **では...、2 つの別々の場所に、変数を配置しました。** > -> - defaults フォルダー +> そうです。変数は、さまざまな場所に配置して使用できます。 +> いくつか例を挙げます。 > -> - group\_vars フォルダー +> * vars ディレクトリー +> * defaults ディレクトリー +> * group\_vars ディレクトリー +> * Playbook の `vars:` セクション +> * `--extra_vars` オプションを使用して、 +> コマンドラインで指定できるファイル +> * いなかのおばあちゃんのおうち *(ウソですので注意してください)* > -> - Playbook の `vars:` の中 -> -> - コマンド実行の際の`--extra_vars` オプション -> ->上記変数の定義は、場所によって優先順位が決まっています。最初からあまりいろんなところに置く必要はありませんが、こちらを一度確認しておくと良いと思います。[variable precedence](https://docs.ansible.com/ansible/latest/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable)。この演習では、Role の default を使用していくつかの変数を定義していますが、これらは優先順位が低いため、他の場所で記述されると置き換わります。逆に言うと、順応性がある変数とも言えます。この default より優先順位が高いのが vars で、一部をこちらで定義してみました。 +> 詳しくは [変数 +> 優先順位](https://docs.ansible.com/ansible/latest/playbooks_variables.html#variable-precedence-where-should-i-put-a-variable) をお読みください。 +> 変数と、優先順位を受け入れる場所の両方を +> 理解できます。この演習では、ロールのデフォルトを使用して +> いくつかの変数を定義します。これらは、発展させることができます。その後、 +> デフォルトよりも優先度の高い `/vars` にいくつか変数を定義しました。 +> これは、デフォルト変数として上書きできません。 -### ステップ 5: +ステップ 5 +-------------- -次に、ハンドラーを Role 化してみましょう。編集するファイルは、`roles\iis_simple\handlers\main.yml` です。 +`roles\iis_simple\handlers\main.yml` にロールハンドラーを作成します。 ```yaml ---- -# handlers file for iis_simple -- name: restart iis service - win_service: - name: W3Svc - state: restarted - start_mode: auto + --- + # handlers file for iis_simple + - name: restart iis service + win_service: + name: W3Svc + state: restarted + start_mode: auto ``` -### ステップ 6: +ステップ 6 +-------------- -タスクの Role 化はこちらを編集します。 `roles\iis_simple\tasks\main.yml` +`roles\iis_simple\tasks\main.yml` のロールにタスクを追加します。 + ```yaml ---- -# tasks file for iis_simple - -- name: Install IIS - win_feature: - name: Web-Server - state: present - -- name: Create site directory structure - win_file: - path: "{{ item.path }}" - state: directory - with_items: "{{ iis_sites }}" - -- name: Create IIS site - win_iis_website: - name: "{{ item.name }}" - state: started - port: "{{ item.port }}" - physical_path: "{{ item.path }}" - with_items: "{{ iis_sites }}" - notify: restart iis service - -- name: Open port for site on the firewall - win_firewall_rule: - name: "iisport{{ item.port }}" - enable: yes - state: present - localport: "{{ item.port }}" - action: Allow - direction: In - protocol: Tcp - with_items: "{{ iis_sites }}" - -- name: Template simple web site to iis_site_path as index.html - win_template: - src: 'index.html.j2' - dest: '{{ item.path }}\index.html' - with_items: "{{ iis_sites }}" - -- name: Show website addresses - debug: - msg: "{{ item }}" - loop: - - http://{{ ansible_host }}:8080 - - http://{{ ansible_host }}:8081 + --- + # tasks file for iis_simple + + - name: Install IIS + win_feature: + name: Web-Server + state: present + + - name: Create site directory structure + win_file: + path: "{{ item.path }}" + state: directory + with_items: "{{ iis_sites }}" + + - name: Create IIS site + win_iis_website: + name: "{{ item.name }}" + state: started + port: "{{ item.port }}" + physical_path: "{{ item.path }}" + with_items: "{{ iis_sites }}" + notify: restart iis service + + - name: Open port for site on the firewall + win_firewall_rule: + name: "iisport{{ item.port }}" + enable: yes + state: present + localport: "{{ item.port }}" + action: Allow + direction: In + protocol: Tcp + with_items: "{{ iis_sites }}" + + - name: Template simple web site to iis_site_path as index.html + win_template: + src: 'index.html.j2' + dest: '{{ item.path }}\index.html' + with_items: "{{ iis_sites }}" + + - name: Show website addresses + debug: + msg: "{{ item }}" + loop: + - http://{{ ansible_host }}:8080 + - http://{{ ansible_host }}:8081 ``` - -### ステップ 7: + +ステップ 7 +-------------- -index.htmlテンプレートを追加します。 +index.html テンプレートを追加します。 -`roles\iis_simple\templates` を右クリックして`index.html.j2` という名前の新しいファイルを作成、さらに、そのファイルを以下の通り編集してください。 +`roles\iis_simple\templates` を右クリックして、以下のない用で `index.html.j2` +という新しいファイルを作成します。 + ```html - - + + -

-

{{ ansible_hostname }} --- {{ iis_test_message }}

+

+

{{ ansible_hostname }} --- {{ iis_test_message }}

- - + + ``` + -さて、iiadvanced レベルに以前の演習で作成した*templates*フォルダーがまだ残っていると思います。これを削除しておきましょう。右クリックして選択し、削除します。 +この Playbook のベースレベルにはまだ *templates* フォルダーがあるので、ここで削除します。それを右クリックして、*Delete* +を選択します。 + +ステップ 8: コミット +---------------------------- -### ステップ 8: コミット +File → Save All をクリックして、すべてのファイルが保存されるようにします。 -File → Save All をクリックして、すべてのファイルが保存されていることを確認します。 +以下に示すように、ソースコードアイコンをクリックします (1)。 -Source Control アイコンをクリックし(1)、変更の内容に関するコメント、例えば、 `Adding iis_simple role` を入力し(2)、上部の Commit アイコンをクリックします(3)。 +`Adding iis_simple role` (2) のようなコミットメッセージを入力し、上のチェックボックスをクリックします (3)。 ![Commit iis\_simple\_role](images/6-commit.png) -左下の青いバーにある`synchronize changes` ボタンをクリックします。これは問題なく終了することを確認します。 +左下の青いバーにある `synchronize changes` ボタンをクリックします。これも問題なく戻るはずです。 -## Role ベースの新しい Playbook の実行 +セクション 3: 新しい Playbook の実行 +=============================================== -元の Playbook をロールに正常に分離できたので、実行してどのように機能するかを見てみましょう。演習5と同じ site.yml を再利用しているため、新しいジョブテンプレートを作成する必要はありません。演習5で作成したジョブテンプレートを再度実行してみてください。GitLab から自動的に更新され、新しい Roles 含む Playbook が起動します。 +元の Playbook をロールに正常に分離したので、それを実行して、どのように機能するかを見てみましょう。演習 5 +のテンプレートを再利用しているため、新しいテンプレートを作成する必要はありません。このテンプレートを再度実行すると、git +から自動的に更新され、新しい役割が開始されます。 -### ステップ 1: +ステップ 1 +-------------- -上記で編集した内容は、ジョブテンプレート実行と共に自動的にプロジェクトの更新として実行されます。このため、改めてプロジェクトで同期をかける必要はないのですが、一応演習ですので、プロジェクトで更新作業を行っておきましょう。Automation Controller の左ペインでプロジェクトをクリックして、円形の更新アイコンをクリックします。 +ジョブテンプレートを変更する前に、まずプロジェクトを再同期する必要があります。これを行います。 -### ステップ 2: +ステップ 2 +-------------- -テンプレートを選択します。 +テンプレートを選択します -> **ヒント** +> **注意** > -> ジョブテンプレートの作成ページから移動していない場合は、下にスクロールして既存のすべてのジョブテンプレートを表示することも可能です - -### ステップ 3: +> あるいは、ジョブテンプレートから移動していない場合 +> 作成ページでは、下にスクロールして既存のすべてのジョブテンプレートを表示できます -**IIS Advanced** の右端にあるロケットのアイコン ![Add](images/at_launch_icon.png) をクリックし、ジョブテンプレートを起動します。 +ステップ 3 +-------------- -### ステップ 4: +**IIS Advanced** ジョブテンプレートのロケットアイコン![追加](images/at_launch_icon.png) +をクリックします。 -プロンプトが表示されたら、お好きなテストメッセージを入力してください。♬ +ステップ 4 +-------------- -成功すると、標準出力は次の図のようになります。 サーバーとサービスが既に実行されていることを以前に構成したため、ほとんどのタスクはOKを返します。 +プロンプトが表示されたら、目的のテストメッセージを入力します -![Job output](images/6-job-output.png) +成功すると、標準出力は次の図のようになります。以前にサーバーを設定し、サービスは既に実行中であるため、ほとんどのタスクは OK +を返すことに注意してください。 -ジョブが正常に完了すると、ジョブ出力の下部にWebサイトへの2つのURLが出力されます。 +![ジョブ出力](images/6-job-output.png) -## まとめ +ジョブが正常に完了すると、ジョブ出力の下部に Web サイトへの 2 つの URL が出力されます。それらがまだ機能していることを確認します。 -これで、 `iis_simple`と呼ばれる1つのロールを持つ Playbook ` site.yml`が完成しました。Playbook を Role 化することの利点は、Playbook を再利用しやすくするだけでなく、変数、タスク、テンプレートなどの変更を簡単にできることです。 +セクション 5: レビュー +=============================== -[Ansible Galaxy](https://galaxy.ansible.com) には沢山の Roles が置いてあります。是非ご確認ください。 +これで、`site.yml` という単一の役割を持つ完全な Playbook `iis_simple` ができました。Playbook +をロールに構造化する利点は、Playbook に再利用性を追加できるだけでなく、変数、タスク、テンプレートなどへの変更を簡素化できることです。 +[Ansible Galaxy](https://galaxy.ansible.com) は、使用または参照するための役割の優れたリポジトリーです。 -[ワークショップ一覧に戻る](../README.ja.md) +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/7-win-patch/README.ja.md b/exercises/ansible_windows/7-win-patch/README.ja.md index e1f95474a..47e86f430 100644 --- a/exercises/ansible_windows/7-win-patch/README.ja.md +++ b/exercises/ansible_windows/7-win-patch/README.ja.md @@ -1,35 +1,47 @@ -# 演習 7 - Windows パッチ管理 - -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md), ![france](../../../images/fr.png) [Français](README.fr.md).
-## Playbook の作成 +セクション 1 - Playbook の作成 +====================================== -Windwos のパッチ管理は、Ansible で Windows ホストを管理する際の大きなユースケースの一つです。Ansible では、`win_updates` モジュールを使って Windows Update の確認またはインストールが行われます。このモジュールは、Windows に元々組み込まれている、Window Update サービスを利用します。これは、各端末から更新をダウンロードするための WSUS やオンラインの Windows Update サーバーなどの パッチのリポジトリが引き続き必要ということを示しています。Windows Update の設定が自動的にダウンロードするがインストールはしないように構成されている場合は、更新を`検索`するよう指示することで、モジュールを使用して更新をステージングすることもできます。各パッチをホワイトリストまたはブラックリストに登録する機能もあります。たとえば、利用可能なすべての更新ではなく、1つの特定のセキュリティ更新のみをインストールするように指示することも可能です。 +`win_updates` モジュールは、Windows Update の確認またはインストールに使用されます。このモジュールは、組み込みの +Windows Update サービスを利用して機能します。つまり、更新プログラムをダウンロードするには、WSUS やオンラインの Windows +Update Server などのバックエンドシステムが必要です。サーバーの Windows Update +設定が自動的にダウンロードされてもインストールされないように設定されている場合は、このモジュールを利用して、更新を `search` +するように指示することで、更新をステージングすることもできます。更新を許可リストまたは拒否リストに登録する機能もあります。たとえば、利用可能なすべての更新プログラムではなく、特定のセキュリティ更新プログラムを +1 つだけインストールするように指示できます。 -最初に、新しい Playbook を作成します。 以前の演習で実行した手順を繰り返します。 +まず、新しい Playbook を作成します。前の演習で実行した手順を繰り返します。 -### ステップ 1: +ステップ 1 +-------------- -Visual Studio Code を使って、Git リポジトリに新しいフォルダーを作成し、新しい Playbook を作成します。 +Visual Studio Code 内で、git リポジトリーに新しいディレクトリーを作成し、新しい Playbook ファイルを作成します。 -以前に「iis_basic」ディレクトリを作成した WORKSHOP_PROJECT が存在していると思います。 +Explorer アコーディオンには、以前に iis\_basic を作成した *student\#* セクションが必要です。 -![Student Playbooks](images/7-vscode-existing-folders.png) +![学習者 Playbooks](images/7-vscode-existing-folders.png) -WORKSHOP_PROJECT セクションにカーソルを合わせ、*New Folder* ボタンをクリックします。`win_updates` と入力します。 +*WORKSHOP_PROJECT* セクションにカーソルを合わせ、*New Folder* ボタンをクリックします。`win_updates` +と入力し、Enter キーを押します。 -次に、`win_updates` フォルダーを右クリックして、*New File* を選択、`site.yml` と入力します。 +次に、`win_updates` フォルダーを右クリックし、*新規ファイル* ボタンをクリックします。`site.yml` と入力して Enter +キーを押します。 -Playbook 編集用のエディターが右ペインに開きます。 +これで、Playbook の作成に使用できるエディターが右側のペインで開いているはずです。 ![Empty site.yml](images/7-create-win_updates.png) -## Playbook の作成 +セクション 2: Playbook を書く +===================================== -作成した site.yml を編集し、Playbook にプレイの定義といくつかのタスクを追加します。これは、Windows Update を実行するための非常に基本的な Playbook です。一般的には、更新プロセスを実行するためにはさらに多くのタスク、例えば、サービスチケットの作成、バックアップの作成、または監視の無効化などが必要になる場合があります。そういった今回の演習では含まれていません。もちろん、別途他システムを Ansible と連携、または Ansible から操作することにより、全自動で行うことも可能です。 +site.yml を編集し、プレイ定義といくつかのタスクを Playbook に追加します。これは、Windows Update +をインストールするための非常に基本的な Playbook +を形成します。通常、更新プロセス全体を実行するには、さらに多くのタスクが必要になります。これには、サービスチケットの作成、スナップショットの作成、または監視の無効化が含まれる場合があります。 + ```yaml --- - hosts: windows @@ -40,137 +52,150 @@ Playbook 編集用のエディターが右ペインに開きます。 category_names: "{{ categories | default(omit) }}" reboot: '{{ reboot_server | default(true) }}' ``` + -> **ヒント** +> **注意* > -> **上記の説明** +> ***内容を説明します。** > -> - `win_updates:` このモジュールは、Windows 端末の新規パッチの確認またはインストールに使用されます。変数を使用して特定のカテゴリの更新のみをインストールするように指示しています。`reboot`属性は、必要に応じてリモートホストを自動的に再起動し再起動後も更新のインストールを続行します。 また、必要に応じて Survey を使って再起動を停止することも可能です。reboot_server 値が指定されていない場合、再起動属性を true に設定します。変数が二つありますが、こちらは、Automation Controller の Survey で入力します。 +> - - `win_updates:` このモジュールは、更新のチェックまたはインストールに +> 使用されます。変数を使用して、特定のカテゴリーからのアップデートのみをインストールするように +> 指示します。必要であれば `reboot` 属性はリモートホストを自動的に +> 再起動し、再起動後に更新をインストールします。 +> また、survey 変数を使用して、必要であっても +> 再起動しないようにすることができます。reboot\_server 値が +> 指定されていない場合は、再起動属性を yes に設定します。 -## 保存とコミット +セクション 3: 保存してコミット +=========================================== -改良された新しい Playbook の完成です♪ -早速、変更を保存し、GitLabにコミットしましょう。 +Playbook が完成しました。ただし、ソースコード管理への変更をコミットする必要があることを忘れないでください。 -`File` をクリックし、`Save` を選択。編集したファイルを保存します。 +`File` → `Save All` をクリックして、書き込んだファイルを保存します ![site.yml](images/7-win_update-playbook.png) -Source Control アイコンをクリックし (1)、変更内容例えば *Adding windows update playbook* を記述し (2)、上部の Commit ボタンをクリックします (3)。 +ソースコードアイコン (1) をクリックし、*Adding windows update playbook* (2) +などのコミットメッセージを入力して、上のチェックボックス (3) をクリックします。 -![Commit site.yml](images/7-win_update-commit.png) +![site.yml のコミット](images/7-win_update-commit.png) -左下の青いバーの矢印をクリックして、gitlab に同期します。 +左下の青いバーの矢印をクリックして、gitlab に同期します。 ![Push to Gitlab.yml](images/7-push.png) -コミットが完了するまでに5〜30秒かかります。 青いバーは回転を停止し、問題が0であることを確認します...  +コミットが完了するまで 5〜30 秒かかります。青いバーは回転を停止し、問題がないことを示しています...。 -## ジョブテンプレートの作成 +セクション 4: ジョブテンプレートの作成 +======================================================= -Automation Controller の GUI に戻ってプロジェクトの同期を行います。理由は・・・、もうお分かりですね? +ここで、Controller に戻り、新しいファイルが表示されるようにプロジェクトを再同期する必要があります。 -次に、この Playbook を実行する新しいジョブテンプレートを作成する必要があります。*テンプレート*に移動して*追加*をクリックし、`ジョブテンプレート`を選択して新しいジョブテンプレートを作成します。 +次に、この Playbook を実行するための新しいジョブテンプレートを作成する必要があります。したがって、*Template* に移動し、*Add* +をクリックして `Job Template` を選択し、新しいジョブテンプレートを作成します。 -### ステップ 1: +ステップ 1 +-------------- -次の値を使用してフォームに入力します。 +次の値を使用してフォームに記入します -| キー | 値 | 備考 | +| Key | Value | Note | |--------------------|----------------------------|------| -| 名前 | Windows Updates | | -| 説明 | | | -| ジョブタイプ | 実行 | | -| インベントリー | Workshop Inventory | | -| プロジェクト | Ansible Workshop Project | | -| PLAYBOOK | `win_updates/site.yml` | | -| 認証情報 | Student Account | | -| 制限 | windows | | -| オプション | [*] ファクトキャッシュの有効化にチェック | | +| NAME | Windows Updates | | +| DESCRIPTION | | | +| JOB TYPE | Run | | +| INVENTORY | Workshop Inventory | | +| PROJECT | Ansible Workshop Project | | +| Playbook | `win_updates/site.yml` | | +| MACHINE CREDENTIAL | Student Account | | +| LIMIT | windows | | +| OPTIONS | [\*] ENABLE FACT CACHE | | -![Create Job Template](images/7-win_update-template.ja.jpg) +![Create Job Template](images/7-win_update-template.png) -### ステップ 2: +ステップ 2 +-------------- -![Save](images/at_save.ja.jpg) をクリックし、ADD SURVEY ![Add](images/at_add_survey.ja.jpg) をクリックします。 +SAVE ![保存](images/at_save.png) をクリックして、ADD SURVEY +![追加](images/at_add_survey.png) を選択します。 -### ステップ 3: +ステップ 3 +-------------- -Survey画面に以下を入力します。 +次の値を使用して survey フォームに記入します -| キー | 値 | 備考 | +| Key | Value | Note | |-------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------| -| プロンプト | カテゴリー | | -| 説明 | どのカテゴリーのパッチをインストール? | | -| 回答の変数名 | categories | | -| 回答タイプ | 複数の選択 (複数の選択) | ***単一* 選択のオプションもあります** | -| 複数選択のオプション | Application
Connectors
CriticalUpdates
DefinitionUpdates
DeveloperKits
FeaturePacks Guidance
SecurityUpdates
ServicePacks
Tools
UpdateRollups
Updates | | -| デフォルトの応答 | CriticalUpdates
SecurityUpdates | | -| 必須 | チェック | | +| PROMPT | Categories | | +| DESCRIPTION | Which Categories to install? | | +| ANSWER VARIABLE NAME | categories | | +| ANSWER TYPE | Multiple Choice (multiple select) | **There's also a *single* selection option** | +| MULTIPLE CHOICE OPTIONS | Application
Connectors
CriticalUpdates
DefinitionUpdates
DeveloperKits
FeaturePacks Guidance
SecurityUpdates
ServicePacks
Tools
UpdateRollups
Updates | | +| DEFAULT ANSWER | CriticalUpdates
SecurityUpdates | | +| REQUIRED | Selected | | | | | | -![Category Survey Form](images/7-category-survey.ja.jpg) +![カテゴリー survey フォーム](images/7-category-survey.png) -入力が完了したら![Add](images/at_add.png) をクリックします。今作成した Survey 内容が右に追加されます。さらに、もう一つ Survey を追加します。 +完了したら、ADD ![追加](images/at_add.png) +ボタンをクリックします。新しいフィールドが右側に表示されます。次に、左側のフォームにもう一度入力して、別のフィールドを追加します。 -| キー | 値 | 備考 | +| Key | Value | Note | |-------------------------|---------------------------------------------------------|------| -| プロンプト | Reboot after install? | | -| 説明 | If the server needs to reboot, then do so after install | | -| 回答の変数名 | `reboot_server` | | -| 回答タイプ | 複数の選択 (単一の選択) | | -| 複数選択のオプション | Yes
No | | -| デフォルトの応答 | Yes | | -| 必須 | チェック | | +| PROMPT | Reboot after install? | | +| DESCRIPTION | If the server needs to reboot, then do so after install | | +| ANSWER VARIABLE NAME | `reboot_server` | | +| ANSWER TYPE | Multiple Choice (single select) | | +| MULTIPLE CHOICE OPTIONS | Yes
No | | +| DEFAULT ANSWER | Yes | | +| REQUIRED | Selected | | -![Reboot Survey Form](images/7-reboot-survey.ja.jpg) +![再起動 Survey フォーム](images/7-reboot-survey.png) -### ステップ 4: +ステップ 4 +-------------- -![Add](images/at_add.png)をクリックします。 +ADD を選択します ![追加](images/at_add.png) -### ステップ 5: +ステップ 5 +-------------- -![Add](images/at_save.ja.jpg)をクリックします。 +SAVE を選択します ![追加](images/at_save.png) -### ステップ 6: +ステップ 6 +-------------- -ジョブテンプレート画面に戻りますので、![Add](images/at_save.ja.jpg) をクリックします。 +メインのジョブテンプレートページに戻り、もう一度 SAVE ![追加](images/at_save.png) を選択します。 -### playbook の起動 +セクション 6: 新しいプレイブックの実行 +======================================================= -作成した Playbook を実行して、動くかどうか確認してみましょう♬ +それを実行して、どのように機能するかを見てみましょう。 -### ステップ 1: +ステップ 1 +-------------- -テンプレートを選択します。 +テンプレートを選択します -> **ヒント** +> **注意** > -> ジョブテンプレートの作成ページから移動していない場合は、下にスクロールして既存のすべてのジョブテンプレートを表示することも可能です - -### ステップ 2: - -**Windows Updates**の右端にあるロケットアイコン ![Add](images/at_launch_icon.png) をクリックします! - -### ステップ 3: +> あるいは、ジョブテンプレートから移動していない場合 +> 作成ページでは、下にスクロールして既存のすべてのジョブテンプレートを表示できます -プロンプトが表示されたらUpdateのカテゴリーを選択し、さらに、*reboot after install?* に `Yes` を選択して、**次へ**をクリックします。 +ステップ 2 +-------------- -ジョブが起動したら、リダイレクトされ、ジョブの出力をリアルタイムで見ることができます。 - -### オプション演習: - -Windows 環境にインストール済みのパッチ一覧は PowerShell の以下のコマンドで取得可能です。 - -``` -Get-WMIObject Win32_QuickFixEngineering -``` +**Windows Updates** ジョブテンプレートのロケットアイコン ![追加](images/at_launch_icon.png) +をクリックします。 -これをアドホックコマンドで実行してみましょう。やり方は・・・、もう大丈夫ですね?♬ +ステップ 3 +-------------- -これで全ての演習は終了です!! +プロンプトが表示されたら、更新カテゴリを選択して入力します。*Reboot after install?* プロンプトに `Yes` +と答えて、**Next** をクリックします。 -[ワークショップ一覧に戻る](../README.ja.md) +ジョブの起動後、リダイレクトされ、ジョブの出力をリアルタイムで監視できます。 +

+[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/8-chocolatey/README.ja.md b/exercises/ansible_windows/8-chocolatey/README.ja.md index 0ff535f33..da879d4ef 100644 --- a/exercises/ansible_windows/8-chocolatey/README.ja.md +++ b/exercises/ansible_windows/8-chocolatey/README.ja.md @@ -1,73 +1,91 @@ -# 演習 8 - Chocolatey - -**別の言語で読む**:![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png)[日本語](README.ja.md). +**他の言語でもお読みいただけます**: +
![uk](../../../images/uk.png) [English](README.md), ![japan](../../../images/japan.png) [日本語](README.ja.md).
-この演習では、Chocolateyを利用してどのようにWindows上のソフトウェアを簡単に管理するかについてご紹介します。インストール、アップデートとアンインストール、異なるソースの管理、chocolateyクライアントの構成やシステム管理者が行う一般的なタスクについて取り扱います。 +この演習は、Ansible が Chocolatey を使用した Windows +ソフトウェアの管理のすべての側面を簡単に制御できるようにする方法を紹介することを目的としています。パッケージのインストール、更新、アンインストール、さまざまなソースの管理、chocolatey +クライアントの構成、およびシステム管理者が実行するその他の一般的なタスクについて説明します。 -Chocolateyとは何でしょうか。簡単に説明すると、ChocolateyはWindows用のパッケージ管理システムです。Chocolateyは、シンプルかつ簡単にWindowsソフトウェアのライフサイクル全体を自動化します。 +Chocolatey とは何でしょうか。簡単に言えば、Chocolatey は Windows 用のパッケージ管理システムです。Chocolatey +は、ソフトウェア管理を簡素化し、Windows ソフトウェアライフサイクル全体の自動化を容易にすることを目的としています。 -オープンソース版のChocolateyクライアントは基本的なパッケージ管理が可能ですが、Chocolatey For Businessスイートでは先進的な管理を提供しています。以下にいくつかピックアップします。 +オープンソースの Chocolatey クライアントは基本的なパッケージ管理機能を提供し、Chocolatey For Business +スイートは高度な機能セットを提供します。いくつかのハイライトを次に示します。 -* Package Builder では、任意の EXE、MSI、ZIP、スクリプトを、わずか5秒でChocolatey パッケージに自動的に変換することができます (インストーラのサイレント引数も計算してくれます)。 -* Package Internalizer は、Chocolatey Community Repositoryでメンテナが既に構築した8000以上のパッケージを取得し、内部で使用するためのローカライズされたオフラインバージョンを作成します(依存関係を含む)。 -* Package Synchronizer は、プログラムと機能に掲載されているアプリケーションの Chocolatey パッケージを作成し、他のパッケージと同様に管理することができます。 -* Chocolatey Self-Service GUI では、エンドユーザが管理者権限や昇格権限を必要とせずにパッケージを管理することができます。 -* Chocolatey Central Management は Web ダッシュボードと API (Automation Controller に似ています) で、エンドポイント全体のハイレベルな概要とレポートを提供します。 +* Package Builder を使用すると、EXE、MSI、zip、またはスクリプトを取得して、わずか 5 秒で自動的に Chocolatey + パッケージに変換できます (インストーラーのサイレント引数を把握できます)。 +* Package Internalizer は、メンテナが Chocolatey Community Repository で既に構築した 8000 + 以上のパッケージを取得し、内部で使用するためのローカライズされたオフラインバージョンを作成します (依存関係を含む)。 +* Package Synchronizer を使用すると、Programs and Features + にリストされているアプリケーション用のChocolatey パッケージを作成し、他のパッケージと同じように管理できます。 +* Chocolatey セルフサービス GUI を使用すると、エンドユーザーは管理者権限や昇格された権限を必要とせずにパッケージを管理できます。 +* Chocolatey Central Management は、Web ダッシュボードと API (Automation Controller + に類似) であり、エンドポイントの資産全体の高レベルの概要とレポートを提供します。 ************************************************************************************************* # セクション 1: `win_chocolatey` モジュール -## ステップ 1 - アドホックコマンドでパッケージをインストールする +## ステップ 1: アドホックコマンドを使用してパッケージをインストールする -まず最初に、アドホックコマンドで `win_chocolatey` モジュールを利用して、`git` をインストールします。`win_chocolatey` モジュールは、Chocolateyを利用してWindows上のパッケージを管理します。 +まず、アドホックコマンドを使用して、`win_chocolatey` モジュールを使用して `git` をインストールします。`win_chocolatey` モジュールは、Chocolatey を使用して Windows システム上のパッケージを管理するために使用されます。
-まず、左側の「**インベントリー**」をクリックし、「**Workshop Inventory**」を選択します。インベントリの詳細ページに移動しますが、対象となるホストを選択する必要があります。ですので、まず「**ホスト**」をクリックします。 +まず、左側のパネルの **Inventories** をクリックしてから、インベントリー **Workshop Inventory** の名前をクリックします。Inventory Details ページが表示されたので、ホストを選択する必要があります。したがって、**HOSTS** をクリックします。 -各ホストの隣にチェックボックスがあります。アドホックコマンドを実行したいホストの隣のチェックボックスを選択します。 すると「**コマンドの実行**」ボタンが有効化されますので、クリックします。 +各ホストの横にはチェックボックスがあります。アドホックコマンドを実行する各ホストの横にあるチェックボックスをオンにします。次に、**RUN +COMMANDS** ボタンが有効になります。今すぐクリックしてください。 -![コマンドの実行](images/8-chocolatey-run-command.png) +![Run Command](images/8-chocolatey-run-command.png) -ボタンをクリックすると「**コマンドの実行**」ウィンドウが表示されます。ここで各ホストに対して単一のタスクを実行できます。 +これにより、**Execute Command** ウィンドウがポップアップ表示されます。ここから、ホストに対して単一のタスクを実行できます。 -以下の通りに入力します: +このフォームに次のように記入します。 | Key | Value | Note | |--------------------|--------------------------|-----------------------------------------------------------------| -| モジュール | `win_chocolatey` | | -| 引数 | `name=git state=present` | パッケージの名前と状態 | -| 制限 | | 選択したホストがあらかじめ入力されています | -| マシンの認証情報 | Student Account | | +| MODULE | `win_chocolatey` | | +| ARGUMENTS | `name=git state=present` | The name and state of the package | +| LIMIT | | This will be pre-filled out for you with the hosts you selected | +| MACHINE CREDENTIAL |Student Account | | -![win_chocolateyの実行](images/8-chocolatey-run-win_chocolatey.png) +![Run Win\_Chocolatey](images/8-chocolatey-run-win_chocolatey.png) -「**実行**」をクリックすると、ジョブの実行ログに遷移します。 +**LAUNCH** をクリックすると、ジョブログにリダイレクトされます。 -ジョブ出力では、以下のような実行結果を確認できます: +ジョブの出力には、次のような結果が表示されます。 -![win_chocolateyのジョブ出力](images/8-chocolatey-run-win_chocolatey-result.png) +![Win\_Chocolatey Job +Output](images/8-chocolatey-run-win_chocolatey-result.png) -Changedが表示されれば、`git` が正しくインストールされています。Chocolateyクライアントが存在しないという警告も表示されていますので、タスクの実行時にクライアントもインストールされています。以降のタスクでは `win_chocolatey` モジュールはクライアントを検知し、あらたにインストールせずに既存のクライアントを使用します。検証するために、「**詳細**」セクションのロケットアイコンをクリックして、ジョブを再実行します。すると、警告が表示されず、(多くのAnsibleモジュールと同様に) `win_chocolatey` モジュールはべき等性が担保されているため、変更は加えられずsuccessとして表示されます。また、前回は2つのパッケージをインストールしましたが、今回は何もインストールしていないため、タスクの実行時間もより短くなります。 +出力は、`git` がインストールされたことを示す CHANGED ステータスを報告していることがわかります。結果には、Chocolatey +クライアントがシステムにないという警告も表示されるため、このタスク実行の一部としてインストールされました。`win_chocolatey` +モジュールを使用する将来のタスクは、クライアントを検出し、何もインストールせずに使用する必要があります。確認するには、**DETAILS** +セクションのロケットアイコンをクリックしてジョブを再実行します。出力に警告が表示されず、変更も報告されません。ただし、`win_chocolatey` +(多くの Ansible モジュールと同様) モジュールが冪等 (以前の実行が 2 +つのパッケージをインストールしましたが、これはなにもインストールしないため、実行時間は短くなります) であるため、代わりに SUCCESS +ステータスが報告されます。 -![win_chocolatey ジョブの再実行](images/8-chocolatey-rerun-win_chocolatey-result.png) +![Win\_Chocolatey re run Job +Output](images/8-chocolatey-rerun-win_chocolatey-result.png) -このような感じで `git` がインストールされました。 +そのようにして、`git` がインストールされています。 -## ステップ 2 - 特定のバージョンの複数のパッケージをインストールする +## ステップ 2: 特定のバージョンの複数のパッケージをインストールする -前のステップではひとつのパッケージをアドホックにインストールしましたが、実際にはパッケージのインストールを複数のステップの中のひとつとして含めることの方が多いでしょう。また、複数のパッケージ(場合によっては特定のバージョンのパッケージも)をインストールしたい場合もあるでしょう。この演習では、まさにそれを行います。 +最後のステップでは、アドホックな方法で 1 つのパッケージをインストールしました。ただし、実際には、マルチステッププレイの 1 +つのステップとしてパッケージのインストールを含めることをお勧めします。また、複数のパッケージ (場合によってはそのパッケージの特定のバージョン) +をインストールすることも考えられます。この演習では、これを行います。 -まずは、Visual Studio Codeに戻ります。「*WORKSHOP_PROJECT*」セクションの下に 「**chocolatey**」という名前のディレクトリを作成して -「`install_packages.yml`」というファイルを作成します。 +まずは Visual StudioCode に戻ります。*WORKSHOP_PROJECT* セクションの下に **chocolatey** +というディレクトリーと `install_packages.yml` というファイルを作成します。 -これで、右ペインにPlaybookの作成に使用できるエディタが表示されます。 +これで、Playbook の作成に使用できるエディターが右側のペインで開いているはずです。 ![Empty install\_packages.yml](images/8-chocolatey-empty-install_packages-editor.png) -まずはプレイを定義します: +まず、プレイを定義します。 ```yaml --- @@ -80,13 +98,15 @@ Changedが表示されれば、`git` が正しくインストールされてい version: 13.0.0 - name: python version: 3.6.0 - ``` -Ansibleによって収集されるファクトは必要ないので、オーバーヘッドを減らすために、`gather_facts: false` と設定してファクト収集を無効にしました。また、`vars` ディレクティブで `choco_packages` という名前の辞書変数を定義し、Chocolateyを使ってインストールしたいパッケージの名前とバージョンを格納しました。 +Ansible によって収集されたファクトは必要ないか使用しないため、オーバーヘッドを減らすために `gather_facts: false` +を設定してファクト収集を無効にしました。また、Chocolatey を使用してインストールするパッケージの名前とバージョンを保持するために、`vars` +ディレクティブの下に `choco_packages` という名前の1つの辞書変数を定義しました。 -次にタスクを追加します: +次に、タスクを追加します。 +{% raw %} ```yaml tasks: @@ -107,22 +127,26 @@ Ansibleによって収集されるファクトは必要ないので、オーバ - debug: msg: Python Version is {{ check_python_version.stdout_lines[0] }} and NodeJS version is {{ check_node_version.stdout_lines[0] }} ``` +{% endraw %} -4つのタスクをtasksセクションに追加します: +タスクセクションに 4 つのタスクを追加しました。 -* 最初のタスクは、`win_chocolatey`モジュールを使用し、`choco_packages`変数をループして、指定されたバージョンの各製品をインストールします。 -* 2番目と3番目のタスクは、`win_command`モジュールを使用して、それぞれ `python` と `node` のバージョンをチェックするコマンドを実行し、それぞれの出力を登録します。 -* 最後の4つ目のタスクでは、`debug`モジュールを使用して、ステップ2と3で収集した情報を含むメッセージを表示します。 +* 最初のタスクは `win_chocolatey` モジュールを使用し、`choco_packages` + 変数をループして、指定されたバージョンの各製品をインストールします +* 2 番目と 3 番目のタスクは、`win_command` モジュールを使用してコマンドを実行し、それぞれ `python` と `node` + のバージョンをチェックして、それぞれの出力を登録します。 +* 4 番目の最後のタスクでは、`debug` モジュールを使用して、手順 2 と 3 で収集した情報を含むメッセージを表示しました。 -> **Tip** +> **ヒント** > -> `win_chocolatey`モジュールの`name`属性は、実際にはパッケージのリストを指定できますのでloopを使う必要はありません。しかし、loopを使用することで各パッケージのバージョンを指定し、順序が関連する場合は、それらを順番にインストールすることができます。`win_chocolatey`モジュールの詳細については、[ドキュメント](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_module.html)を参照してください。. +> `win_chocolatey` モジュールの `name` 属性は、実際にはループの必要性を回避してパッケージのリストを取得できますが、ループを使用すると、各パッケージのバージョンを指定し、順序が適切な場合はそれらを順番にインストールできます。`win_chocolatey` モジュールの詳細は、[docs](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_module.html を参照してください。 -`install_packages.yml` プレイブック全体はこのようになります: +完成した Playbook `install_packages.yml` は次のようになります。 +{% raw %} ```yaml --- -- name: Install Specific versoins of packages using Chocolatey +- name: Install Specific versions of packages using Chocolatey hosts: all gather_facts: false vars: @@ -150,62 +174,73 @@ Ansibleによって収集されるファクトは必要ないので、オーバ - debug: msg: Python Version is {{ check_python_version.stdout_lines[0] }} and NodeJS version is {{ check_node_version.stdout_lines[0] }} ``` +{% endraw %} -これでPlaybookは準備完了です: - -* メニューから `File > Save` をクリックしてファイルを保存します(もしくはCtrl+Sを押します)。 -* gitに変更をCommitします - *Adding install\_packages.yml* のような関連性のあるコミットメッセージを使用します。 -* 丸い矢印をクリックして、Commitされた変更をリポジトリにPushします。 -* (任意) コードがgitに追加されていることを確認するには、「**GitLab Access**」の情報を使ってGitLabにアクセスします。 +これで Playbook の準備ができました。 -次に、Automation Controllerに戻り、プロジェクトを同期してController が新しいプレイブックをピックアップするようにします。「**プロジェクト**」をクリックし、プロジェクトの横にある「同期」アイコンをクリックします。 +* メニューから `File > Save` をクリックして (または Ctrl+S で) 作業内容を保存します。 +* 変更を git にコミットします。*Adding install\_packages.yml* などの関連するコミットメッセージを使用します。 +* 円形の矢印をクリックして、コミットされた変更をリポジトリにプッシュします。 +* (オプション) **GitLab Access** の下の情報を使用して GitLab に移動し、コードが git であることを確認します。 +次に、Automation Controller に戻り、プロジェクトを同期して、Controller が新しい Playbook +を使うようにします。**Projects** をクリックしてから、プロジェクトの横にある同期アイコンをクリックします。 ![プロジェクトの同期](images/8-project-sync.png) -これが完了したら、新しいジョブテンプレートを作成します。**テンプレート**を選択し、![追加](images/add.png)アイコンをクリックし、ジョブテンプレートを選択します。新しいジョブテンプレートには、以下の値を使用します: - -| Key | Value | Note | -|----------------|--------------------------------------------------|------| -| 名前 | Chocolatey - Install Packages | | -| 説明 | Template for the install_packages playbook | | -| ジョブタイプ | 実行 | | -| インベントリー | Workshop Inventory | | -| プロジェクト | Ansible Workshop Project | | -| PLAYBOOK | `chocolatey/install_packages.yml` | | -| 認証情報 | タイプ: **マシン**. 名前: **Student Account** | | -| 制限 | windows | | -| オプション | | | +これが完了したら、新しいジョブテンプレートを作成します。**Templates** を選択し、![追加](images/add.png) +アイコンをクリックして、ジョブテンプレートを選択します。新しいテンプレートには次の値を使用します。 + +| Key | Value | Note | +|-------------|--------------------------------------------------|------| +| Name | Chocolatey - Install Packages | | +| Description | Template for the install_packages playbook | | +| JOB TYPE | Run | | +| INVENTORY | Workshop Inventory | | +| PROJECT | Ansible Workshop Project | | +| PLAYBOOK | `chocolatey/install_packages.yml` | | +| CREDENTIAL | Type: **Machine**. Name: **Student Account** | | +| LIMIT | windows | | +| OPTIONS | | |
![ジョブテンプレートの作成](images/8-create-install-packages-job-template.png) -「保存」をクリックした後に、「実行」をクリックしてジョブを実行します。 ジョブが正常に完了し、ループ処理で変数に指定したパッケージがインストールされているはずです。 +SAVE、LAUNCH の順にクリックして、ジョブを実行します。ジョブは正常に実行され、変数で指定されたパッケージの Ansible +ループとインストールを確認できるはずです。 ![ジョブテンプレートの実行](images/8-install-packages-job-run-successful.png) -> **Tip** +> **ヒント** > -> ここまでくると、プレイブックの作成や編集、変更のコミット、gitへのプッシュといった流れに慣れてきたはずです。また、プロジェクトを更新したり、Automation Controller でジョブテンプレートを作成して実行したりすることにも慣れているはずです。以降の手順では、それらの各ステップのリストはなくなります。 +> これで、Playbook の作成または編集、変更のコミット、および git へのプッシュのフローが理解できたと思います。また、プロジェクトの更新、Automation Controller でのジョブテンプレートの作成と実行にも慣れたことでしょう。後のステップでは、各ステップを省略します。 -## ステップ 3 - インストールされているパッケージをすべてアップデートする +## ステップ 3: インストールされているすべてのパッケージを更新する -`win_chocolatey` モジュールは、単にパッケージをインストールするだけではなく、パッケージをアンインストールしたり、アップデートしたりするのにも使われます。モジュールが行うアクションは、`state` パラメータに渡す値に基づいています。渡せるオプションには次のようなものがあります: +`win_chocolatey` +モジュールは、パッケージをインストールするだけでなく、パッケージのアンインストールおよび更新にも使用されます。モジュールが実行するアクションは、`state` +パラメーターに渡す値に基づいています。渡すことができるオプションには、次のものがあります。 -* `present`: パッケージがインストールされていることを保証する。 -* `absent` : パッケージがインストールされていないことを保証する。 -* `latest`: 最新のバージョンのパッケージがインストールされていることを保証する。 +* `present`: パッケージがインストールされていることを確認します。 +* `absent`: パッケージがインストールされていないことを確認します。 +* `latest`: パッケージが利用可能な最新バージョンにインストールされていることを確認します。 -前回のプレイブックでは、`state` の値を明示的に定義していなかったため、パッケージをインストールする際のstateパラメータの設定値としてデフォルトの `present` が使用されていました。意図的に古いバージョンのパッケージをインストールしてしまったため、今度はそれらのパッケージをアップデートします。 +前回のプレイブックでは `state` の値を明示的に定義および設定していなかったため、パッケージをインストールするための state +パラメーターの設定値としてデフォルト値の `present` +が使用されました。ただし、意図的に古いバージョンのパッケージをインストールしたため、それらのパッケージを更新する必要があります。 -Visual Studio Codeで、`chocolatey` フォルダの下に、「`update_packages.yml`」という名前で新しいファイルを作成します。このプレイブックでは、`win_chocolatey`モジュールを使用して、`state`パラメータの値として「`latest`」を指定したプレイを作成します。Chocolateyによって以前にインストールされたすべてのパッケージを更新したいので、`name`パラメータには特定のパッケージ名を指定せず、代わりに「`all`」という値を使用します。 +Visual Studio Code で、`chocolatey` フォルダーの下に `update_packages.yml` +という名前の新しいファイルを作成します。この Playbook では、`latest` パラメータに値として渡された `state` を使用して +`win_chocolatey` モジュールを使用するプレイを作成します。Chocolatey +によって以前にインストールされたすべてのパッケージを更新するため、`name` パラメーターには特定のパッケージ名を指定せずに、値 `all` +を使用します。 -> **Tip** +> **ヒント** > -> `name` 属性にセットされる値として `all` を使用する情報は、`win_chocolatey` のモジュール[ドキュメント](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_module.html)にあります。初めて使うモジュールのドキュメントは必ずチェックしてください。多くの場合、作業の手間を省く有益な情報があります。 +> `name` 属性に設定される値として `all` を使用する方法に関する情報は、`win_chocolatey` のモジュール [docs](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_module.html) にあります。初めて使用するモジュールのドキュメントを常に確認してください。多くの場合、多くの作業を節約するのに役立つ情報があります。 -`update_packages.yml` の内容は以下のようになります: +`update_packages.yml` の内容は次のとおりです。 ```yaml --- @@ -231,45 +266,54 @@ Visual Studio Codeで、`chocolatey` フォルダの下に、「`update_packages msg: Python Version is {{ check_python_version.stdout_lines[0] }} and NodeJS version is {{ check_node_version.stdout_lines[0] }} ``` +他のタスクは、更新タスクの実行後に `nodejs` と `python` のバージョンを確認できるようにするためにあります。簡単です。 -他のタスクは、アップデートタスクが実行された後に、`nodejs`と`python`のバージョンを確認するためにあります。それだけです、簡単ですね。 - -次に、新しいプレイブックがGitに登録され、Automation Controllerに表示されていることを確認してから、以下の値で新しいジョブテンプレートを作成して実行します: +次に、新しい Playbook が Git にあり、Automation Controller +がそれを認識できることを確認してから、次の値を使用して新しいジョブテンプレートを作成して実行します。 -> **Tip** +> **ヒント** > -> ほぼすべてがパッケージをインストールするために作成した最初のジョブテンプレートと同じですので、`テンプレート` のページで「`Chocolatey - Install Packages`」テンプレートの隣にある ![ジョブテンプレートのコピー](images/8-copy.png) アイコンをクリックすることでコピーすることができます。 これでテンプレートのコピーが作成されるので、テンプレートの名前をクリックして編集し、名前、説明、実行するプレイブックを変更することができます。また、プレイブックを1から作成することもできますので、お好みでお選びください。 - -| Key | Value | Note | -|-----------------|--------------------------------------------------|------| -| 名前 | Chocolatey - Update Packages | | -| 説明 | Template for the update_packages playbook | | -| ジョブタイプ | 実行 | | -| インベントリー | Workshop Inventory | | -| プロジェクト | Ansible Workshop Project | | -| PLAYBOOK | `chocolatey/update_packages.yml` | | -| 認証情報 | タイプ: **マシン**. 名前: **Student Account** | | -| 制限 | windows | | -| オプション | | | - -新しいテンプレートを実行した後、`debug` タスクメッセージを調べて、`install_packages` ジョブの出力から得られたバージョンと比較してください。これらのパッケージはアップデートされているので、バージョンは新しくなっているはずです(アドホックコマンドでインストールした `git` パッケージもアップデートがあるかどうかチェックされますが、インストールして数分後にアップデートがあるとは思えません)。 +> ほぼすべてが、パッケージをインストールするために作成した最初のジョブテンプレートと同様です。`Tempates` に移動し、`Chocolatey - Install Packages` テンプレートの隣の ![コピー](images/8-copy.png) アイコンをクリックすると、そのジョブテンプレートを `copy` できます。これにより、そのテンプレートのコピーが作成されます。その名前をクリックして編集し、実行する名前、説明、および Playbook に変更を加えることができます。Playbook は最初から作成することもできます。 + +| Key | Value | Note | +|-------------|--------------------------------------------------|------| +| Name | Chocolatey - Update Packages | | +| Description | Template for the update_packages playbook | | +| JOB TYPE | Run | | +| INVENTORY | Workshop Inventory | | +| PROJECT | Ansible Workshop Project | | +| PLAYBOOK | `chocolatey/update_packages.yml` | | +| CREDENTIAL | Type: **Machine**. Name: **Student Account** | | +| LIMIT | windows | | +| OPTIONS | | | + +新しいテンプレートを実行した後、`debug` タスクメッセージを調べて、バージョンを `install_packages` +ジョブ出力からのものと比較します。これらのパッケージは更新であるため、バージョンは高くなるはずです (アドホックコマンドを使用してインストールした +`git` パッケージも更新がチェックされます。インストールの数分後に更新される可能性はほとんどありません)。 + ![ジョブテンプレートの実行](images/8-update-packages-job-run-successful.png) -# セクション 2: Chocolateyのファクトと設定 +# セクション 2: Chocolatey のファクトと設定 -Chocolatey でパッケージを管理するために実際に使用されるのは `win_chocolatey` モジュールですが、Ansible で使用できる唯一の Chocolatey モジュールではありません。この演習では、そのうちの2つを見てみましょう。「`win_chocolatey_facts`」と「`win_chocolatey_config`」です。 +`win_chocolatey` モジュールは Chocolatey でパッケージを管理するために実際に使用されるものですが、Ansible +で使用できる Chocolatey モジュールはこれだけではなく、Windows ターゲットで Chocolatey +を管理および構成するのに役立つ他のモジュールがあります。この演習では、`win_chocolatey_facts` と +`win_chocolatey_config` の 2 つを見ていきます。 -## ステップ 1 - Chocolateyのファクトの収集 +## ステップ 1: Chocolatey ファクトの収集 -最初に使用するモジュールは、「`win_chocolatey_facts`」モジュールです。このモジュールは、Chocolateyからインストールされたパッケージ、設定、機能、ソースなどの情報を収集するために使用します。これらの情報は、レポート生成などのタスクや、他のタスクで定義された条件分岐などに役立ちます。 +最初に使用するモジュールは `win_chocolatey_facts` +モジュールです。このモジュールは、インストールされたパッケージ、設定、機能、ソースなどの情報を Chocolatey +から収集するために使用されます。これは、レポート生成としてのタスク、または他のタスクで定義された条件に役立ちます。 -> **Tip** -> -> 「`win_chocolatey_facts`」モジュールの詳細については、[ドキュメント](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_facts_module.html)を参照してください。 +> **ヒント** > + +> 詳細は、[docs](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_facts_module.html). の `win_chocolatey_facts` を参照してください。 -それでは、収集した情報を表示する簡単なプレイブックを作成し、収集した情報を詳しく見てみましょう。 +それでは、収集した情報を収集して表示するための簡単な Playbook を作成して、このモジュールによって収集された情報を詳しく見ていきましょう。 -Visual Studio Codeで、`chocolatey`フォルダの下に、「`chocolatey_configuration.yml`」という新しいファイルを作成します。そのファイルの内容は以下のようにします。 +Visual Studio Code の `chocolatey` フォルダーの下に、`chocolatey_configuration.yml` +という名前の新しいファイルを作成します。そのファイルの内容は次のようになります。 ```yaml --- @@ -286,63 +330,76 @@ Visual Studio Codeで、`chocolatey`フォルダの下に、「`chocolatey_confi var: ansible_chocolatey ``` -最初のタスクでは、`win_chocolatey_facts` を使用して、対象となる Windows マシン上の Chocolatey から利用可能なすべての情報を収集し、この情報を `ansible_chocolatey` という変数に格納し、`debug` モジュールを使用してその内容を表示して詳しく調べます。 - -新しいプレイブックをソースコントロールのリポジトリに追加し、Automation Controllerでプロジェクトを同期してから、以下の値で新しいジョブテンプレートを作成して実行します。 - -| Key | Value | Note | -|----------------|----------------------------------------------------|------| -| 名前 | Chocolatey - Facts and configuration | | -| 説明 | Template for the chocolatey_configuration playbook | | -| ジョブタイプ | 実行 | | -| インベントリー | Workshop Inventory | | -| プロジェクト | Ansible Workshop Project | | -| PLAYBOOK | `chocolatey/chocolatey_conguration.yml` | | -| 認証情報 | タイプ: **Machine**. 名前: **Student Account** | | -| 制限 | windows | | -| オプション | | | +最初のタスクは、`win_chocolatey_facts` を使用してターゲット Windows マシン上の Chocolatey +から利用可能なすべての情報を収集し、この情報を `ansible_chocolatey` という名前の変数に格納します。この変数は、`debug` +モジュールを使用して内容を出力して詳細を調べます。 + +新しい Playbook をソース管理リポジトリに追加し、Automation Controller で +プロジェクトを同期してから、次の値を使用して新しいジョブテンプレートを作成して実行します。 + +| Key | Value | Note | +|-------------|--------------------------------------------------|------| +| Name | Chocolatey - Facts and configuration | | +| Description | Template for the chocolatey_configuration playbook | | +| JOB TYPE | Run | | +| INVENTORY | Workshop Inventory | | +| PROJECT | Ansible Workshop Project | | +| PLAYBOOK | `chocolatey/chocolatey_conguration.yml` | | +| CREDENTIAL | Type: **Machine**. Name: **Student Account** | | +| LIMIT | windows | | +| OPTIONS | | |
-ジョブの出力には、最初のタスクで収集した `ansible_chocolatey` 変数の内容が表示されます。 +ジョブの出力には、最初のタスクで収集された `ansible_chocolatey` 変数の内容が表示されます。 ![ジョブテンプレートの実行](images/8-chocolatey-configuration-job-run-1-successful.png) -出力をスクロールして値を確認すると、Windows ターゲット上の Chocolatey クライアントの構成、有効な機能と無効な機能、インストールされているパッケージ (以前の演習でインストールしたパッケージが確認できますか?)、およびパッケージをインストールしているソース (これについては後で詳しく説明します) がわかります。これらの情報はJSON形式なので、オブジェクトツリーをたどって個々の値にアクセスできることに注意してください。例えば、インストールされたパッケージのレポートを作成するために、インストールされたパッケージの情報だけに興味がある場合は、`ansible_chocolatey.packages`キーを使ってこれらの値にアクセスできます。 +出力をスクロールして値を確認すると、Windows ターゲットでの Chocolatey +クライアントの設定、有効および無効な機能、インストールされているパッケージ +(前の演習でインストールしたパッケージが表示されているでしょうか)、およびソースが表示されます。そこからパッケージをインストールします +(これについては後で詳しく説明します)。この情報は JSON +形式であるため、オブジェクトツリーをトラバースすることで個々の値にアクセスできることに注意してください。たとえば、インストールされたパッケージに関する情報のみに関心があり、たとえばインストールされたパッケージのレポートを生成する場合は、`ansible_chocolatey.packages` +キーを使用してそれらの値にアクセスできます。
-> **Tip** +> **ヒント** > -> `win_chocolatey_facts` モジュールが収集した情報を見るために、`debug` タスクを使う必要は本当にありませんでした。 -代わりに、Automation Controller のジョブ出力ペインで、Windows ターゲットでタスクを実行した結果をクリックすると、その特定のホストのホストイベントダイアログが開き、選択したイベントの影響を受けるホストに関する情報と、そのイベントの出力が表示されます(この場合、`win_chocolatey_facts` モジュールの実行によって返された JSON オブジェクトです)。 +> `win_chocolatey_facts` モジュールによって収集された情報を表示するためだけに `debug` タスクを使用する必要はありませんでした。代わりに、Ansible Tower のジョブ出力ペインで、Windows ターゲットでタスクを実行した結果をクリックします。これにより、その特定のホストのホストイベントダイアログが開きます。選択したイベントの影響を受けるホストとそのイベントの出力に関する情報が表示されます (この場合、`win_chocolatey_facts` モジュールによって返される JSON オブジェクトが実行されます)
-## ステップ 2 - Chocolateyの設定 +## ステップ 2: Chocolatey を構成する -前のステップでは、Windows ターゲット上の Chocolatey クライアントの設定を `win_chocolatey_facts` モジュールを使って収集できることを確認しましたが、これらの設定を変更したい場合はどうすればよいでしょうか。そのためのモジュールが用意されています。 +前の手順で、`win_chocolatey_facts` モジュールを使用して Windows ターゲット上の Chocolatey +クライアントの構成を収集できることを確認しました。では、これらの構成を変更する場合はどうでしょうか。そのためのモジュールが存在します。 -`win_chocolatey_config`モジュールは、設定オプションの値を変更したり、すべての設定を解除したりして、Chocolateyの設定を管理することができます。 +`win_chocolatey_config` +モジュールを使用して、設定オプションの値を変更するか、それらをすべてまとめて設定解除することにより、Chocolatey 設定を管理できます。
-> **Tip** -> -> `win_chocolatey_config` モジュールの詳細については、[ドキュメント](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_config_module.html)を参照してください。 +> **ヒント** > + +> 詳細は、[docs](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_config_module.html の `win_chocolatey_config` を参照してください。
-> **Tip** +> **ヒント** > -> Chocolateyの設定については [こちら](https://docs.chocolatey.org/en-us/configuration)を参照してください。 +> 詳細は、 Chocolatey の設定 [こちら](https://docs.chocolatey.org/en-us/configurationを参照してください。 -ここでは、2つの設定オプションの値を変更します。`cacheLocation` と `commandExecutionTimeoutSeconds` です。前のステップの出力では、`cacheLocation` が設定されていないか、デフォルトの設定である値が設定されていないことがわかりました。また、`commandExecutionTimeoutSeconds` の値はデフォルトの 2700 に設定されていました。これらの設定オプションを次のように修正します: +`cacheLocation` と `commandExecutionTimeoutSeconds` の 2 +つの設定オプションの値を変更します。前の手順の出力では、`cacheLocation` +が設定されていないか、値が構成されていないことがわかりました。これはデフォルト設定であり、`commandExecutionTimeoutSeconds` +の値がデフォルト値の 2700 に設定されています。これらの設定オプションを変更します。 -* `cacheLocation` を `C:\ChocoCache`に設定 -* `commandExecutionTimeoutSeconds` を1時間もしくは `3600` 秒に設定 +* `cacheLocation` を `C:\ChocoCache` に設定します。 +* `commandExecutionTimeoutSeconds` を 1 時間または `3600` 秒に設定します。 -Visual Studio Codeで、`chocolatey_configuration.yml` プレイブックを編集し以下のタスクを追加します: +Visual Studio Codeで、`chocolatey_configuration.yml` Playbook +を編集して、次のタスクを追加します。 ```yaml - name: Create a directory for the new Chocolatey caching directory @@ -370,15 +427,15 @@ Visual Studio Codeで、`chocolatey_configuration.yml` プレイブックを編 var: ansible_chocolatey.config ``` -これらの新しいタスクは以下を実行します: +これらの新しいタスクは、以下を実行します。 -* `win_file` モジュールを使用し `C:\ChocoCache` ディレクトリを作成 -* 新しく作成した `win_chocolatey_config` ディレクトリを使用するように `cacheLocation` の値を変更 -* `commandExecutionTimeoutSeconds` を `3600`に変更 -* 設定値を変更した後にChocolateyファクトを再収集 -* 最後に更新したChocolateyファクトの`config` セクションを表示 +* `win_file` モジュールを使用してディレクトリー `C:\ChocoCache` を作成します。 +* `cacheLocation` を使用して、`win_chocolatey_config` の値を新たに作成されたディレクトリーに変更します。 +* `commandExecutionTimeoutSeconds` の値を `3600` に変更します。 +* 設定値を変更した後、Chocolatey ファクトを再収集します。 +* そして最後に、刷新された Chocolatey ファクトの`config`の部分を出力します。 -これで、`chocolatey_configuration.yml` プレイブックの内容は以下のようになります: +`chocolatey_configuration.yml` Playbook の内容は以下のようになります。 ```yaml --- @@ -419,18 +476,25 @@ Visual Studio Codeで、`chocolatey_configuration.yml` プレイブックを編 var: ansible_chocolatey.config ``` -変更をコミットしてソースコントロールにプッシュし、Automation Controllerでプロジェクトを同期させ、「`Chocolatey - Facts and Configuration`」ジョブテンプレートを実行します。 -> **Tip** +変更をコミットしてソース管理にプッシュし、Automation Controller でプロジェクトを同期して、`Chocolatey - Facts and Configuration` ジョブテンプレートを実行します。 +> **ヒント** > -> [演習 1](../1-tower)で、 Automation Controllerでプロジェクトを作成した際に「`起動時のリビジョン更新`」にチェックをいれました。ですので、プロジェクトを更新する必要はありません。しかし、もしこのチェックを忘れていた場合は……。 +> [演習 1](../1-tower) で Automation Controller でプロジェクトを作成したときに、`UPDATE REVISION ON LAUNCH` のオプションをチェックしたので、Controller でプロジェクトを更新する必要はありませんでした。しかし、そのオプションをチェックしていない場合を想定しています。 -プレイブックが実行されて設定が変更され、最後の `debug` タスクの出力である `ansible_chocolatey.config` セクションの値に変更が反映され、`cacheLocation` と `commandExecutionTimeoutSeconds` の新しい値が表示されるはずです。 +Playbook を実行して設定を変更し、`ansible_chocolatey.config` セクションの値を示す最後の `debug` +タスクからの出力にそれらの変更を反映し、`cacheLocation` と `commandExecutionTimeoutSeconds` +の新しい値を表示する必要があります。 ![ジョブテンプレートの実行](images/8-chocolatey-configuration-job-run-2-successful.png)

-これで演習は完了です。 この演習では、利用可能なChocolatey関連のAnsibleモジュールのほとんどをカバーしました(ただし、`win_chocolatey_source` と `win_chocolatey_feature` については [こちら](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_feature_module.html) と [こちら](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_source_module.html) を参照してください)。 Windowsパッケージの管理にAnsibleとChocolateyを併用することで、その可能性を感じていただけたのではないでしょうか。 +これで終わりです。今回の演習では、Chocolatey に関連する Ansible モジュールの多くをカバーしました +(ただし、`win_chocolatey_source`と`win_chocolatey_feature` については +[こちら](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_feature_module.htmlと +[こちら](https://docs.ansible.com/ansible/latest/collections/chocolatey/chocolatey/win_chocolatey_source_module.html) +を参照してください) 願わくば、Ansible と Chocolatey を組み合わせて Windows +パッケージを管理することで、その可能性を味わっていただきたいと思います。

-[ワークショップ一覧に戻る](../README.ja.md) \ No newline at end of file +[Click here to return to the Ansible for Windows Workshop](../README.md) diff --git a/exercises/ansible_windows/9-win-workflow/README.ja.md b/exercises/ansible_windows/9-win-workflow/README.ja.md new file mode 100644 index 000000000..11d16387a --- /dev/null +++ b/exercises/ansible_windows/9-win-workflow/README.ja.md @@ -0,0 +1,148 @@ +この手順は、すでにまとめたものをすべてワークフローと呼ばれるもので使用するように設計されています。 + +ワークフローはエンドツーエンドの自動化オーケストレーションプロセスと考えることができます。これにより、自動化プレイおよびロールを論理フローにリンクして何かを行うことができます。 + +今回のケースでは、以下のような流れになります。選択された最新の Windows アップデートをインストールします。 IIS のインストール (アドバンス +ロール) を行います。追加パッケージをインストール (chocolatey を使用) します。最後に chocolatey ファクトと設定を確認します。 + +また、基本的な条件付きロジックを設定し、うまくいかない場合にはロールバック機能などを利用することもできます。 + +セクション 1 - ワークフローの作成 +=============================================== + +新しいワークフローテンプレートを作成し、そこに既存のオートメーションを追加していきます。 + +終了時には、以下のようになります。 + +![ワークフローの例](images/9-win-workflow-0.png) + +ステップ 1: +--------------- + +*Template* に移動し、*Add* をクリックして `Workflow Template` +を選択し、新しいワークフローテンプレートを作成します。 + +次の値を使用してフォームに記入します + +| Key | Value | Note | +|--------------------|----------------------------|------| +| NAME | Example Workflow | | +| DESCRIPTION | End-to-end process | | +| ORGANIZATION | Default | | +| INVENTORY | Windows Workshop Inventory | | +| LIMIT | windows | | + +![ワークフローテンプレートの作成](images/9-win-workflow-1.png) + +SAVE ![保存](images/at_save.png) をクリックすると、ワークフロービジュアライザーに入ります。 + +ステップ 2: +--------------- + +スタートボックスをクリックし、右側の選択項目から**Windows Update**を選びます。 + +以下のプロパティーを選択します。 + +| Key | Value | Note | +|--------------------|----------------------------|------| +| RUN | Always | | +| CONVERGENCE | Any | | + +![最初のノードの追加](images/9-win-workflow-2.png) + +ポップアップで Prompt、Next、および Confirm をクリックします。 + +メインビジュアライザー画面に戻り、Select をクリックします。 + +![Workflow Visualizer1](images/9-win-workflow-3.png) + +ワークフローの第一段階を追加しました。 + +**Windows Update** ボックスにカーソルを合わせ、緑色の + をクリックします。 + +次のステップで、**IIS Advanced** テンプレートを選択します。 + +以下のプロパティーを選択します。 + +| Key | Value | Note | +|--------------------|----------------------------|------| +| RUN | Always | | +| CONVERGENCE | Any | | + +![Workflow Visualizer2](images/9-win-workflow-4.png) + +プロンプトをクリックします。 + +メッセージを Created in our workflow example (または同様の表現) に変更し、ポップアップで Next と +Confirm を押します。 + +メインビジュアライザー画面に戻り、Select をクリックします。 + +![Workflow Visualizer3](images/9-win-workflow-5.png) + +現在、2 段階のプロセスを採用しています。まず、Windows のアップデートを行い、その後、アップデートがうまくいくか **どうかにかかわらず** +IIS +の詳細インストールを行います。更新がうまくいくかどうかはこの時点では気にしないかもしれませんが、誰かに警告するために失敗したときに通知が発せられるように設定できます。 + +その他にもアプリケーションデプロイメントの一部を表現してみましょう。 + +**IIS Advanced** ボックスにカーソルを合わせ、緑色の + をクリックします。 + +次のステップで、**Chocolatey - Install Packages** テンプレートを選択します。 + +以下のプロパティーを選択します。 + +| Key | Value | Note | +|--------------------|----------------------------|------| +| RUN | On Success | | +| CONVERGENCE | Any | | + +![Workflow Visualizer4](images/9-win-workflow-6.png) + +メインビジュアライザー画面に戻り、Select をクリックします。 + +**Chocolatey - Install Packages** ボックスにカーソルを合わせ、緑色の + をクリックします。 + +次のボックスで、**Chocolatey - Facts and configuration** テンプレートを選択します。 + +以下のプロパティーを選択します。 + +| Key | Value | Note | +|--------------------|----------------------------|------| +| RUN | On Success | | +| CONVERGENCE | Any | | + +**選択** をクリックします。 + +![Workflow Visualizer5](images/9-win-workflow-7.png) + +**保存** をクリックします。 + +テンプレート画面に戻ります。ここで **保存** をクリックします。 + +セクション 2: 新しいワークフローの実行 +======================================================= + +それを実行して、どのように機能するかを見てみましょう。 + +ステップ 1: +--------------- + +テンプレートを選択します + +> **注意** +> +> あるいは、テンプレートから移動していない場合 +> 作成ページでは、下にスクロールして既存のすべてのテンプレートを表示できます + +ステップ 2: +--------------- + +ワークフローテンプレート **Example Workflow** のロケットシップアイコン +![Add](images/at_launch_icon.png) をクリックします。 + +ワークフローの起動後は、ワークフローの出力をリアルタイムで確認できます。 + +すべてが正常に終了すると、以下のような出力が表示されるはずです。 + +![Workflow Visualizer6](images/9-win-workflow-8.png) diff --git a/exercises/ansible_windows/README.ja.md b/exercises/ansible_windows/README.ja.md index d87108363..e0a82adcb 100644 --- a/exercises/ansible_windows/README.ja.md +++ b/exercises/ansible_windows/README.ja.md @@ -1,40 +1,42 @@ -# Ansible ワークショップ - Windows の自動化 +# Ansible Workshop - Ansible for Windows Automation -**別の言語で読む**:![uk](../../images/uk.png) [English](README.md), ![japan](../../images/japan.png)[日本語](README.ja.md), ![france](../../images/fr.png) [Français](README.fr.md). +**他の言語でもお読みいただけます**: +
![uk](../../images/uk.png) [English](README.md), ![japan](../../images/japan.png)[日本語](README.ja.md), ![france](../../images/fr.png) [Français](README.fr.md).
-Ansibleは構成管理、アプリケーションの展開、オーケストレーションなど、非常に幅広く利用可能なシンプルで強力な IT 自動化のツールです。yaml というわかりやすい言語を利用していますので、学習も容易です。 +**これは Ansible Automation Platform 2 のドキュメントです** -Automation Controller は、Red Hat Ansible Automation Platform を構成するコンポーネントの1つであり、単なる Playbook の実行だけではなく、Web UI、API、各種認証情報の管理など、複数管理者での多岐にわたるIT機器の管理に有用な、様々な機能を提供します。 +このワークショップでは、さまざまな運用タスクを自動化するために、Windows Server インスタンスに接続するための Ansible +オートメーションコントローラーの設定方法をご紹介します。Ansible +自動化コントローラーの設定が完了したら、簡単なタスクの自動化から始めて、パッチ適用や自動化を強化するためのサードパーティー製ソリューションの活用など、より高度なユースケースへと進んでいきます(Chocolatey)。このワークショップに参加するために必要なクライアントの条件は、互換性のある +Web ブラウザーだけなので最小限です。このワークショップでは、Linux の知識やその他のコマンドラインツールの必要性が軽減されています。 -このワークショップでは、Automation Controller を構成して、Windows インスタンスを管理する方法を学びます。一旦 Automation Controller が構成されると、より複雑な操作であっても、Ansible を使ってシンプルに管理できることを演習を通して学んでいきます。 +## プレゼンテーション -このワークショップは全て Automation Controller を使って行います。Automation Controller と互換性のあるブラウザがあれば演習を進める事が出来ます。 +レポーターデックは [Ansible Windows Automation](../../decks/ansible_windows.pdf) +から入手できます。 -## プレゼンテーション資料 +## ワークショップの平均時間 -学習用の資料はこちらからダウンロード可能です。(英語版のみ): -[Ansible Windows Automation](../../decks/ansible_windows.pdf) +ワークショップに必要な時間は、参加者の数と、ワークショップの間にどれだけのディスカッションを行うかという、いくつかの要素に大きく左右されます。 -## タイムスケジュール +とはいえ、演習自体はだいたい 4~5 時間で終わります。付属のプレゼンテーションにはさらに 1 時間かかります。 -ワークショップ完了までの時間は、様々ですが、おおよそ以下を想定しています。 - -・座学:1時間 -・演習:4~5時間 - -## Lab ダイアグラム +これらのワークショップのスケジュールで経験が異なる場合があります。 +## ラボダイアグラム + ![ansible windows lab diagram](../../images/ansible_windows_diagram.png) -## 演習内容 - -- [演習 1 - Automation Controllerの概要と構成](1-controller/README.ja.md) -- [演習 2 - アドホックコマンド](2-adhoc/README.ja.md) -- [演習 3 - playbook 概要](3-playbook/README.ja.md) -- [演習 4 - Automation Controller プロジェクト](4-projects/README.ja.md) -- [演習 5 - 高度な playbook](5-adv-playbook/README.ja.md) -- [演習 6 - Ansible Roles](6-roles/README.ja.md) -- [演習 7 - Windows パッチ管理 (Optional)](7-win-patch/README.ja.md) -- [演習 8 - Chocolatey (Optional)](8-chocolatey/README.ja.md) - +## 演習 + +* [演習 1 - 自動コントローラーの導入および設定](1-controller) +* [演習 2 - アドホックコマンド](2-adhoc) +* [演習 3 - Playbook の概要](3-playbook) +* [演習 4 - Automation Controller プロジェクト](4-projects) +* [演習 5 - 高度な Playbook](5-adv-playbook) +* [Exercise 6 - Ansible roles](6-roles) + + + + diff --git a/exercises/example_template/1-example/README.ja.md b/exercises/example_template/1-example/README.ja.md new file mode 100644 index 000000000..6f41fe232 --- /dev/null +++ b/exercises/example_template/1-example/README.ja.md @@ -0,0 +1,136 @@ +# Exercise 1: Using the debug module + +## Table of Contents + +- [Objective](#objective) - [Guide](#guide) - [Playbook +Output](#playbook-output) - [Solution](#solution) + +# Objective + +Demonstrate the use of the [debug +module](https://docs.ansible.com/ansible/latest/modules/debug_module.html) +to display a variable to the terminal window. + +# Guide + +## Step 1: + +Using your text editor of choice create a new file called `debug.yml`. + +``` +[student1@ansible ~]$ nano debug.yml +``` + +>`vim` and `nano` are available on the control node, as well as Visual Studio and Atom via RDP + +## Step 2: + +Ansible playbooks are **YAML** files. YAML is a structured encoding format +that is also extremely human readable (unlike it's subset - the JSON +format). + +Enter the following play definition into `debug.yml`: + +``` yaml +--- +- name: SIMPLE DEBUG PLAYBOOK + hosts: localhost + connection: local + gather_facts: no +``` + +- The `---` at the top of the file indicates that this is a YAML file. - +Always give your playbooks and tasks good, descriptive names. These names +form part of the playbook output. - The `hosts: localhost`, indicates the +play is run only on the Ansible control node - `connection: local` tells the +Playbook to run locally (rather than SSHing to itself) - `gather_facts: no` +disables facts gathering. We are not using any fact variables for this +playbook. + +> One of the most common errors in YAML files is caused by incorrect spacing. See [Yaml Files in a Nutshell]https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/getting_started_with_kubernetes/yaml_in_a_nutshell for a good overview of YAML files. + +## Step 3 + +Next, add the variables section `vars`. There will be one variable called +`test_variable`. The variable will have a string `"my test variable"`. + +```yaml +--- +- name: SIMPLE DEBUG PLAYBOOK + hosts: localhost + gather_facts: no + + vars: + test_variable: "my test variable" +``` + +## Step 4 + +Next, add the first `task`. This task will use the `debug` module to print +out the variable `test_variable`. + +``` yaml +--- +- name: SIMPLE DEBUG PLAYBOOK + hosts: localhost + connection: local + gather_facts: no + + vars: + test_variable: "my test variable" + + tasks: + - name: DISPLAY TEST_VARIABLE + debug: + var: test_variable +``` + +>A play is a list of tasks. Tasks and modules have a 1:1 correlation. Ansible modules are reusable, standalone scripts that can be used by the Ansible API, or by the ansible or ansible-playbook programs. They return information to ansible by printing a JSON string to stdout before exiting. + +## Step 5 + +Run the playbook - exit back into the command line of the control host and +execute the following: + +``` +[student1@ansible ~]$ ansible-playbook debug.yml +``` +# Playbook Output + +The output will look as follows. + +```yaml +[student1@ansible ~]$ ansible-playbook debug.yml + +PLAY [SIMPLE DEBUG PLAYBOOK] ******************************************************************************* + +TASK [DISPLAY TEST_VARIABLE] ******************************************************************************* +ok: [localhost] => { + "test_variable": "my test variable" +} + +PLAY RECAP ************************************************************************************************* +localhost : ok=1 changed=0 unreachable=0 failed=0 +``` +> Notice that the names you gave the play and task appear in this output. This is especially important when you have longer playbooks that include multiple tasks. + +# Solution +The finished Ansible Playbook is provided here for an Answer key. + +```yaml +--- +- name: SIMPLE DEBUG PLAYBOOK + hosts: localhost + gather_facts: no + + vars: + test_variable: "my test variable" + + tasks: + - name: DISPLAY TEST_VARIABLE + debug: + var: test_variable +``` + +You have finished this exercise. [Click here to return to the lab +guide](../README.md)