無能な脚本
ansibleはコードとしてインフラストラクチャを有効にします.それは私のための貴重なツールでしたinfrastructure@homeプロジェクトConsulとNomadをセットアップするのを手伝って、ノードとサービスのためにDNSを提供するために、そして、NGinx終点.このインフラストラクチャは完全にKubernetesに置き換えられましたが、Ansibleは、システムメンテナンスタスクの継続的なサポートを維持し、提供するツールです.
より長い時間のためにansibleで働いたので、私のスクリプトは現在よく構造化されたディレクトリに存在します.ここから、私は完全な実行と同様に個々の仕事を走らせることができます
効果的ディレクトリレイアウト
すべての可用性のあるコードは1つのディレクトリ内に含まれます.この記事を書くとき、このディレクトリは次のようになります.
ディレクトリルートのグローバル設定ファイル グローバル・プレイブック グローバルVars 役割とスクリプトの分離
アンインストーラ
Ansibleは、システムのための返済可能な、一貫した構成を提供することに関係しています.しかし、時々これらの変更を取り消す必要があります.それがちょうど各々のパッケージ管理ソフトウェアでソフトウェアをアンインストールするならば、これは簡単な仕事です.しかし、他の設定については:カスタムサービスファイル、設定ファイル、などの中央システムファイルに設定行を追加
アンインストーラはありませんが、すべての変更を元に戻すことができます.このアンインストーラ自身を書いてください!あなたの心に新鮮なので、あなたのシステムでそれをテストすることができますので、インストールの部分で完了したらすぐにそれを書いてください.
脚本を作る
ここでインストールするための簡単な例です
演劇
脚本がシステムを構成するために実行されるとき、システムは常に同じ、よく定義された状態を持つべきです.脚本が10のステップから成る、そして、システムが望ましい状態からステップ4で逸脱するならば、この特定のステップだけは適用されなければなりません.
その性質によって、何かすることがあるならば、不可解な仕事はシステムを変えるだけです.最も可能なモジュールはこの潜在性を提供します.しかし、いくつかのモジュールをこのパターンを破る方法で使用できます.私はすべてのモジュールをカバーできませんが、この点を1つの例で強調したいLine in File .
NFSボリュームを取り付けるセットアップを考えましょう.クライアントでは、エントリを追加する必要があります
このファイルのNFS株式のエントリは1つだけです.そして、このために
結論
Ansibleの連続使用の間、個々のスクリプトの私のコレクションは1つの有効なディレクトリ構造に発展しました.正確にどこにどの脚本、変数や設定ファイルを置くことを知って不可欠です.また、脚本を書くときは、アンインストーラを追加してシステムを変更することもできます.最後に、繰り返しプレイブックの実行は常に1つのよく定義された、一貫したシステムの状態になるように、iDemanceの脚本を書くようにしてください.
より長い時間のためにansibleで働いたので、私のスクリプトは現在よく構造化されたディレクトリに存在します.ここから、私は完全な実行と同様に個々の仕事を走らせることができます
site.yml
一貫した設定状態をすべてのシステムに適用します.また、不要な設定やソフトウェアを削除するアンインストーラを考慮することも有用です.そして、あなたの脚本の譲歩を達成するために、それは本当にあなたが使用している可能性の高いモジュールを理解することが重要です.これらのすべてはこの記事で詳細です.効果的ディレクトリレイアウト
すべての可用性のあるコードは1つのディレクトリ内に含まれます.この記事を書くとき、このディレクトリは次のようになります.
├── ansible.cfg
├── host_vars
│ ├── raspi-3-1.yml
│ ├── ...
├── group_vars
├── roles
│ ├── consul
│ ├── docker-arch
│ ├── docker-arm
│ ├── nfs-client
│ ├── nfs-server
│ └── nomad
├── scripts
│ ├── consul
│ ├── nomad
│ ├── configs
│ ├── jobs
│ ├── system
│ ├── update_packages.yaml
│ ├── tutorial
│ └── uninstall
├── hosts
└── site.yml
ディレクトリはこれらの原理に従って構造化されます:ansible.cfg
とインベントリhosts
. site.yml
実行されるとき、私が持っているすべてのインフラストラクチャシステムですべてのノードを設定します.効果的にすべてのノードにすべてのロールをインストールし、ノードを最新のOSパッケージにパッチします.group_vars
ディレクトリにはグローバル変数、特にNOMAD、Consul、NFSサーバのIPアドレスが含まれます.にhost_vars
ディレクトリには、ノードまたはエージェントとしてNOMAD/consul/NFSの役割を決定する各ノードのファイルが含まれます.roles
ディレクトリには、インフラシステムをインストールする脚本が含まれます.これらは以前の記事で説明したもっともらしい役割です.インscripts
は定期的に実行されるコマンドです.ノードの更新やノードの再起動のようなものです.また、スクリプトディレクトリ内のプログラム用の設定ファイルも含め、nomadジョブの展開も含みます.アンインストーラ
Ansibleは、システムのための返済可能な、一貫した構成を提供することに関係しています.しかし、時々これらの変更を取り消す必要があります.それがちょうど各々のパッケージ管理ソフトウェアでソフトウェアをアンインストールするならば、これは簡単な仕事です.しかし、他の設定については:カスタムサービスファイル、設定ファイル、などの中央システムファイルに設定行を追加
/etc/mount
or /etc/ssh/sshs_config
?アンインストーラはありませんが、すべての変更を元に戻すことができます.このアンインストーラ自身を書いてください!あなたの心に新鮮なので、あなたのシステムでそれをテストすることができますので、インストールの部分で完了したらすぐにそれを書いてください.
脚本を作る
install
and uninstall
ブロック.これらのブロックはuninstall=true
パラメータを実行します.ここでインストールするための簡単な例です
dnsmasq
.- block:
- name: Install dnsmasq
apt:
name: dnsmasq
state: present
- name: Configure dnsmasq
lineinfile:
path: /etc/dnsmasq.d/10_consul
create: true
line: server=/consul/192.168.2.201#8600
regexp: consul
state: present
when: uninstall is not defined
- block:
- name: Uninstall
apt:
name: dnsmasq
state: absent
- file:
path: /etc/dnsmasq.d
state: absent
when: uninstall is defined and uninstall
この脚本がansible-playbook ... -e "{uninstall: true}
, 出力は以下の通りです.ansible-playbook site.yml --limit=raspi-3-1 --tags dns -e "{uninstall: true}"
PLAY [Configure DNS] ***********************************************************************************************************************
TASK [dns : Install dnsmasq] ***************************************************************************************************************
skipping: [raspi-3-1]
TASK [dns : Configure dnsmasq] *************************************************************************************************************
skipping: [raspi-3-1]
TASK [dns : Restart dnsmasq] ***************************************************************************************************************
skipping: [raspi-3-1]
TASK [dns : Uninstall] *********************************************************************************************************************
changed: [raspi-3-1]
TASK [dns : file] **************************************************************************************************************************
changed: [raspi-3-1]
演劇
脚本がシステムを構成するために実行されるとき、システムは常に同じ、よく定義された状態を持つべきです.脚本が10のステップから成る、そして、システムが望ましい状態からステップ4で逸脱するならば、この特定のステップだけは適用されなければなりません.
その性質によって、何かすることがあるならば、不可解な仕事はシステムを変えるだけです.最も可能なモジュールはこの潜在性を提供します.しかし、いくつかのモジュールをこのパターンを破る方法で使用できます.私はすべてのモジュールをカバーできませんが、この点を1つの例で強調したいLine in File .
NFSボリュームを取り付けるセットアップを考えましょう.クライアントでは、エントリを追加する必要があります
etc/fstab
NFSサーバがあるシステムを伝えるために.この変更の最初のバージョンは以下の通りです.- name: Create fstab entry
lineinfile:
path: /etc/fstab
line: '{{ nfs_dir_server_ip }}:{{ nfs_dir_mnt_path }} {{ nfs_dir_mnt_path }} nfs defaults,soft,bg,noauto,rsize=32768,wsize=32768,noatime 0 0'
state: present
特定の出力は3つの変数に依存します.変数の1つが変更され、脚本が再び実行されると、新しいエントリが作成されます/etc/fstab
. マウントは動作しません!このファイルのNFS株式のエントリは1つだけです.そして、このために
regexp
パラメータこの脚本の第2版はregexp
1つの行だけを追加する/etc/fstab
. この単純な変更は、プレイブックを可能にする.- name: Create fstab entry
lineinfile:
path: /etc/fstab
line: '{{ nfs_dir_server_ip }}:{{ nfs_dir_mnt_path }} {{ nfs_dir_mnt_path }} nfs defaults,soft,bg,noauto,rsize=32768,wsize=32768,noatime 0 0'
regex: 'nfs defaults,soft,bg,noauto'
state: present
モジュールを使用するときはいつでも、それを使うように注意してください.結論
Ansibleの連続使用の間、個々のスクリプトの私のコレクションは1つの有効なディレクトリ構造に発展しました.正確にどこにどの脚本、変数や設定ファイルを置くことを知って不可欠です.また、脚本を書くときは、アンインストーラを追加してシステムを変更することもできます.最後に、繰り返しプレイブックの実行は常に1つのよく定義された、一貫したシステムの状態になるように、iDemanceの脚本を書くようにしてください.
Reference
この問題について(無能な脚本), 我々は、より多くの情報をここで見つけました https://dev.to/admantium/ansible-idempotent-playbooks-4e67テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol