generated at
Ansible

構成管理ツール
エージェントレス
シンプルな文法

公式
英語を読むのが無難
日本語ドキュメントはバージョンが古い上に、どこにまとまっているかわからない
翻訳はこの辺りみたいだけど明らかに少ない
ググって出てくる2.9のドキュメントは
古い
ブランチに.poが存在しない

解説

Ansible moduleというサーバのあるべき状態を定義したリソースモデル(プログラム)をリモートで実行する
moduleはJSONを返す言語ならなんでも開発できる
authorized_keyモジュールを使うとホストへのアクセス管理が楽
マネージ対象のサーバをINIファイルに書く
OpenStackやEC2にあるinventoryのなど情報からinventoryを動的に構成することもできる
Playbooksにインフラ構成を書いて実行する
文法は簡単
いろいろできる
ロードバランサやモニタリングウィンドウにサーバを追加/削除する
サーバに関する情報を集めて、あるサーバに他の全てのサーバのIPを教えて、動的に設定ファイルをビルドするのに使う
とか

ansible-playbookで実行する



2022/6/17 前に見た時と動画が変わっていると思う
moduleは実行されるコード片
pluginで拡張できる
Ad-hoc commands
ansibleでmanageされているhostを確認
ansible all -m ping
web group(inventoryで事前に定義する)の全てのhostにupdtimeコマンドを実行
ansible web -m command -a "uptime"
-m でモジュールを指定できる。デフォルト command なのでこの場合は省略することができる
ansible web -m yum -a "name=httpd state=installed"
setupモジュールをlocalhostで実行して情報を表示
ansible localhost -m setup
playbookはdeploymentのconfiguration
orchestration multi TTR roleout
他のhostにdeligationしたりもできるらしい
yaml
- name: install and start apache hosts: web # target host vars: http_port: 80 max_clients: 200 remote_user: root # このユーザーで実行する tasks: - name: yum: pkg=httpd state=latest - name: write the apache config file template: src=/srv/httpd.j2 dest=/etc/httpd.conf - name: service: name=httpd state=started
task (Ansible)が定義できる
上から実行される
varsはいろんなところで指定できる
playbook, vars file, inventory, inline, commandline, previous playの結果を使う, tower(?)で管理
handler (Ansible)を設定できる
タスクの一種
globalにユニークな名前が必要
notify (Ansible)によって呼ばれる
playbookので実行されたplayが全て終わったら最後に呼ばれる
何回書いても最後の一回しか呼ばれない
Best practices
Keep it simple
これが一番大事
これは読みやすさも含むみたい
Naming example
Dynamic Inventories
メジャーなプロバイダのテンプレ(?)を提供している
YAMLのsyntax
long lineは改行を使って読みやすく
ansible-playbook playbook.yml --syntax-check
関連するものを名前付きのディレクトリでまとめたplaybook
role (Ansible)間の相互依存はやめろ(疎結合にすること)
role自体は依存できる(実行時に他のroleを実行できる)
configとdeploymentは分ける
variable
同じ変数は上書きされる
これは避けるべき
command moduleを使うこと
これは脱出ハッチであり、極力使わない
escape文字列とかで壊れやすい
複雑なタスク
sorce controlを使わないこと
content collections
Ansible galaxyやAutomation Hubで使えるやつ
ansible-galaxy collection install collection -p / path



一部のホストにだけ流す
-l でgroup中の特定hostにだけ流すことができる