Ansible
https://gyazo.com/0a2d124318fe05ac9b5e098e6c50c24f
構成管理ツール
エージェントレス
シンプルな文法
公式
英語を読むのが無難
日本語ドキュメントはバージョンが古い上に、どこにまとまっているかわからない
翻訳はこの辺りみたいだけど明らかに少ない
ググって出てくる2.9のドキュメントは
古い
ブランチに.poが存在しない
解説
Ansible moduleというサーバのあるべき状態を定義したリソースモデル(プログラム)をリモートで実行する
authorized_keyモジュールを使うとホストへのアクセス管理が楽
マネージ対象のサーバをINIファイルに書く
OpenStackやEC2にあるinventoryのなど情報からinventoryを動的に構成することもできる 文法は簡単
いろいろできる
ロードバランサやモニタリングウィンドウにサーバを追加/削除する
サーバに関する情報を集めて、あるサーバに他の全てのサーバのIPを教えて、動的に設定ファイルをビルドするのに使う
とか
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
orchestration multi TTR roleout
他のhostにdeligationしたりもできるらしい
code: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
上から実行される
varsはいろんなところで指定できる
playbook, vars file, inventory, inline, commandline, previous playの結果を使う, tower(?)で管理
タスクの一種
globalにユニークな名前が必要
playbookので実行されたplayが全て終わったら最後に呼ばれる
何回書いても最後の一回しか呼ばれない
Best practices
Keep it simple
これが一番大事
これは読みやすさも含むみたい
Naming example
Dynamic Inventories
メジャーなプロバイダのテンプレ(?)を提供している
YAMLのsyntax
long lineは改行を使って読みやすく
ansible-playbook playbook.yml --syntax-check
role自体は依存できる(実行時に他のroleを実行できる)
configとdeploymentは分ける
variable
同じ変数は上書きされる
https://gyazo.com/b5213903085573d2a77a006e8a396a6c
これは避けるべき
command moduleを使うこと
これは脱出ハッチであり、極力使わない
escape文字列とかで壊れやすい
複雑なタスク
sorce controlを使わないこと
content collections
ansible-galaxy collection install collection -p / path
一部のホストにだけ流す
-lでgroup中の特定hostにだけ流すことができる