タスク実行、オーケストレーションとスコープのチェックと制御
Ansibleは、あなたのインフラストラクチャを偉大な制御を与える強力なツールです.私が自宅で私の基盤をインストールして、維持する可用性のあるコードを開発したとき、私は最初にほとんどのスクリプトを最初のファイルとして書きました.これはいくつかの時間に適していました-あなたが構造が複雑になっていることに気づくまで、あなたはかなりの時間のためにあなたが必要とするスクリプトを探しているとわかります.それから私は適切なレイアウトにコードベースをリファクタリングしました
この記事では、どのタスクを実行するか、どのホストをターゲットにしてもタスクのカスタムオーケストレーションを制御するために、ansibleコマンドラインを使用する方法を示します.あなたが不可解な概念の上でRefresherを必要とするならば、脚注を読んでください1 .
この記事はもとでmy blog .
ホームプロジェクトの私の基盤のディレクトリレイアウト
実行中の例として、ホームプロジェクトのホームレイアウトからファイルのレイアウトとファイルを表示します.
一番上のレベルでは、以下のディレクトリとファイルがあります.
では、どのようにしてタスクの小さなセットを実行できますか
実行前にチェックブック
タスクの長いリストを実行する前に、それはあなたの脚本が動作し、それが起こるかどうかを確認する良いアイデアです.スクリプトを実行する前に、私が強く推奨する4種類のチェックがあります.
構文チェック
まず、フラグで構文をチェックしてください
リストホスト
第二に、影響を受けるホストを見てください.
リストのすべてのタスク
第三に、フラグで実行されるタスクに詳細な外観を取る
すべての変更を詳細に実行する
最後に、ドライランを行うことができますし、各ステップの各結果を参照してノードに適用される
タスク実行の制御
一度、タスクが正確に何をすべきかを確認し、正しいホストをターゲットにして実行します.例えば、私の中に
特定演劇の実施
最良のオプションは、タグを適用し、使用することです.タグは、あなたがロール内のロールやタスクに適用される任意の、よくタグです.上に示したように、私は「タグへのタグ」宣言を使います.特定のタグで再生を実行するには
今、私はDNSプレイを実行したいだけなら
プレイの中で特定のタスクを実行する
あなたがスタートしたいプレイがいくつかのサブタスクを持っている場合、それらをすべて実行する必要はありませんか?ちょうど旗を加える
特定のホストだけでタスクを実行する
テストをライブしたい場合は、完全なインベントリに変更する前に、1つのホストを変更するだけで便利です.役に立つ
タスクの編成
あなたが脚本を実行するとき、各々の遊びで、すべての役割は最初に実行されます.場合は、別の方法でそれらを調整するには、タグもあなたを助けることができます.任意のタスクと任意の役割に複数のタグを適用することができます.例えば、ソフトウェアをインストールするすべてのタスクは
結論
この記事では、より複雑に複雑なプレイブックをどのように効果的に動作するかを示しました.まず、実行前にプレイブックをチェックする方法.構文チェック、どのようにタスクと影響を受けたホストのリストを見るか、どのようにドライランを行うかを学ぶ方法を学びました.ドライランは特に重要なシステム構成ファイルに影響するときに重要です.健康的な習慣を適用する
脚注
詳細はこちら↩ 脚本:劇集 Play :一連のホスト上で動作する一連のタスク タスク:ホストに適用される具体的なアクション ロール:自己定義責任を果たすためにホストを提供する一連のタスク
site.yml
それはすべての演劇や役割が含まれます.しかし、私は特定のノードの特定の仕事だけを走らせる方法に苦労していました.この記事では、どのタスクを実行するか、どのホストをターゲットにしてもタスクのカスタムオーケストレーションを制御するために、ansibleコマンドラインを使用する方法を示します.あなたが不可解な概念の上でRefresherを必要とするならば、脚注を読んでください1 .
この記事はもとでmy blog .
ホームプロジェクトの私の基盤のディレクトリレイアウト
実行中の例として、ホームプロジェクトのホームレイアウトからファイルのレイアウトとファイルを表示します.
一番上のレベルでは、以下のディレクトリとファイルがあります.
├── group_vars
├── host_vars
├── roles
├── scripts
├── site.yml
The roles
各ノードにインストールされる基本的なソフトウェアを定義します.├── roles
│ ├── consul
│ └── nomad
│ └── dns
│ ├── docker-arch
│ ├── docker-arm
│ ├── nfs-client
│ ├── nfs-server
├── site.yml
And scripts
ノードの選択された数で実行する小さなタスクを含みます.例えば、ノードのnomadジョブやシステムメンテナンスタスクを展開します.├── scripts
│ ├── consul
│ ├── nomad
│ ├── tutorial
│ └── uninstall
│ ├── system
│ │ ├── clean_docker.yml
│ │ ├── connection_test.yml
│ │ ├── install_package_on_arch.yml
│ │ ├── install_package_on_debian.yml
│ │ ├── reboot.yml
│ │ ├── rotate_ssh_key.yaml
│ │ ├── shutdown.yml
│ │ └── update_packages.yml
すべてのロールといくつかのスクリプトが定義されますsite.yml
. これは、Docker、NOMAD、consul、DNSとNFSサービスを持つすべてのノードを設定するiDemanceプレイブックです.では、どのようにしてタスクの小さなセットを実行できますか
site.yml
PlayBook、完全にそれを実行せずに?…を読む.実行前にチェックブック
タスクの長いリストを実行する前に、それはあなたの脚本が動作し、それが起こるかどうかを確認する良いアイデアです.スクリプトを実行する前に、私が強く推奨する4種類のチェックがあります.
構文チェック
まず、フラグで構文をチェックしてください
--check-syntax
脚本を実行するときに使われるすべてのスクリプトならば.>> ansible-playbook site.yml --syntax-check
OK playbook: site.yml
何らかのエラーが発生した場合は、例えば、役割については、有用な情報を取得します.>> ansible-playbook site.yml --syntax-check
ERROR! Syntax Error while loading YAML.
mapping values are not allowed in this context
The error appears to be in '[...]/roles/dns/tasks/main.yml': line 7, column 15, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
- name: Configure dnsmasq
template:
^ here
リストホスト
第二に、影響を受けるホストを見てください.
>> ansible-playbook site.yml --list-hosts
playbook: site.yml
play #1 (all): Install consul TAGS: [consul]
pattern: ['all']
hosts (6):
raspi-3-1
raspi-0
raspi-4-1
minas
raspi-4-2
raspi-3-2
リストのすべてのタスク
第三に、フラグで実行されるタスクに詳細な外観を取る
--list-tasks
.>> ansible-playbook site.yml --list-tasks
playbook: site.yml
play #1 (all): Install consul TAGS: [consul]
tasks:
command TAGS: [consul]
consul : Check if current consul version is installed TAGS: [consul]
consul : Set vars when architecture is armv7l TAGS: [consul]
consul : Set vars when architecture is armv6l TAGS: [consul]
consul : Set vars when architecture is x86_64 TAGS: [consul]
consul : Create consul group TAGS: [consul]
consul : Create consul user TAGS: [consul]
consul : Create consul dir TAGS: [consul]
consul : Get consul binary TAGS: [consul]
consul : Unzip consul binary TAGS: [consul]
consul : Create symlink TAGS: [consul]
すべての変更を詳細に実行する
最後に、ドライランを行うことができますし、各ステップの各結果を参照してノードに適用される
--check --diff
. このチェックは特に重要です!重要なシステムファイルを変更するたびに、それを実行します.例えば、新しい行を/etc/fstab
ファイル.>> ansible-playbook site.yml --check --diff
TASK [nfs-server : Install software] ****************************************
The following NEW packages will be installed:
nfs-kernel-server
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
changed: [minas]
TASK [nfs-server : Create mount dir] ****************************************
--- before
+++ after
@@ -1,4 +1,4 @@
{
"path": "/mnt/nfs",
- "state": "absent"
+ "state": "directory"
}
changed: [minas]
TASK [nfs-server : Create fstab entry] ****************************************
--- before: /etc/fstab (content)
+++ after: /etc/fstab (content)
@@ -8,3 +8,4 @@
UUID=BB43-B9B6 /boot/efi vfat defaults,noatime 0 2
UUID=1ece07a6-5072-4f25-aed0-27e01b0ded17 / ext4 defaults,noatime 0 1
192.168.2.203:/mnt/nfs /mnt/nfs nfs defaults,soft,bg,noauto,rsize=32768,wsize=32768,noatime 0 0
+/dev/sda1 /mnt/nfs ext3 defaults,user 0 1
changed: [minas]
TASK [nfs-server : Configure nfs access] ****************************************
--- before: /etc/exports (content)
+++ after: /etc/exports (content)
@@ -0,0 +1 @@
+/mnt/nfs 192.168.2.0/24(rw,sync,no_subtree_check,no_root_squash)
changed: [minas]
OK!この時点で、あなたの脚本が変更されるものの良い理解を持っています.レッツ続く.タスク実行の制御
一度、タスクが正確に何をすべきかを確認し、正しいホストをターゲットにして実行します.例えば、私の中に
site.yml
, 私はすべてのノードでDNS解決を構成するためにプレーをします.- name: Configure DNS
hosts:
- all
tags:
- dns
become: true
roles:
- dns
ただし、この演奏はファイルの途中に置かれる.どのように、私はちょうどこの特定の遊びを実行することができますか?特定演劇の実施
最良のオプションは、タグを適用し、使用することです.タグは、あなたがロール内のロールやタスクに適用される任意の、よくタグです.上に示したように、私は「タグへのタグ」宣言を使います.特定のタグで再生を実行するには
--tags
フラグ.このフラグにタグのリストを1つまたは渡すことができます.今、私はDNSプレイを実行したいだけなら
ansible-playbook site.yml --tags consul
. もう一つのオプションは、その名前を使用することですansible-playbook site.yml --start-at-task="Install consul"
, しかし、タグが好ましい.プレイの中で特定のタスクを実行する
あなたがスタートしたいプレイがいくつかのサブタスクを持っている場合、それらをすべて実行する必要はありませんか?ちょうど旗を加える
--step
. 任意のタスクが実行される前に、プロンプトが開かれ、続行する場合はお問い合わせします.質問に答えたり、いつでも脚本の実行を停止してctrl-c
.ansible-playbook -i hosts site.yml --tags "dns" --step
PLAY [Install consul]
****************************************
PLAY [Install nomad]
****************************************
PLAY [Configure DNS]
****************************************
Perform task: TASK: dns : Install dnsmasq on raspi-3-1 (N)o/(y)es/(c)ontinue:
特定のホストだけでタスクを実行する
テストをライブしたい場合は、完全なインベントリに変更する前に、1つのホストを変更するだけで便利です.役に立つ
--limit
あなたが何を使用する必要があります.>> ansible-playbook -i hosts site.yml --tags "dns" --limit minas
TASK [dns : Install dnsmasq]
****************************************
ok: [minas]
TASK [dns : Configure dnsmasq]
ok: [minas]
今、あなたは中央の脚本からタスクのセットを選ぶことについてのすべてを学んだ.残っていることは一つだけです.タスクの編成
あなたが脚本を実行するとき、各々の遊びで、すべての役割は最初に実行されます.場合は、別の方法でそれらを調整するには、タグもあなたを助けることができます.任意のタスクと任意の役割に複数のタグを適用することができます.例えば、ソフトウェアをインストールするすべてのタスクは
install
, そして、設定ファイルをコピーするすべてのタスクをタグ付けすることができますconfig
. 次に、これらのタグを使用して脚本を実行します.ansible-playbook site.yml --tags "install, config"
.結論
この記事では、より複雑に複雑なプレイブックをどのように効果的に動作するかを示しました.まず、実行前にプレイブックをチェックする方法.構文チェック、どのようにタスクと影響を受けたホストのリストを見るか、どのようにドライランを行うかを学ぶ方法を学びました.ドライランは特に重要なシステム構成ファイルに影響するときに重要です.健康的な習慣を適用する
--check
しばしば旗.第二に、どのように実行中の特定の再生とタスクの再生を学んだ.タグはあなたに大きな柔軟性を与える.同様に、タスクとロールとして、あなたの脚本の中に名前を付けて適用します.そして、上記の1つのレベルを考えて、設定ファイルを変更するタスク、ソフトウェアをインストールするタスクを識別し、グループ化されたタグを与えます.一度タグを持つと、特にそれらを実行できます.また、これを組み合わせて--step
実行されるタスクについてプロンプトを表示するフラグ.そして、あなたが一貫してタグを定義するとき、あなたは好きなように脚本実行を調整することができます.脚注
詳細はこちら↩
Reference
この問題について(タスク実行、オーケストレーションとスコープのチェックと制御), 我々は、より多くの情報をここで見つけました https://dev.to/admantium/ansible-checking-and-controlling-task-execution-orchestration-and-scope-32eiテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol