Ansibleでよく使ってるタスクとかちょっとしたTips
Ansibleで少し調べないとわかんない事とか、普段よく使うのとかをなんとなく書いてみる。
Ansibleは入門程度の知識でも、かなり効果あると思うのでおすすめです。大規模の場合でもロールや冪等性、Gathering Factsの内容活用するとか少し気にするだけじゃないでしょうか。
タスク
Ansibleのタスクはたくさんあり、サーバ構築に関わる大半の作業が網羅されているが、ミドルウェアのインストールまではインフラ担当が行う事が多いので、自分が実際良く使うのは数種類。
テンプレートからファイルを生成する
設定ファイルの生成とか。srcに指定したファイルに変数埋め込むと、タスク実行に展開してくれる。backupをyesにすると、バックアップを取ってくれる。
# Example from Ansible Playbooks - template: src=/mytemplates/foo.j2 dest=/etc/file.conf owner=bin group=wheel mode=0644
template - Templates a file out to a remote server. — Ansible Documentation
ディレクトリやシンボリックンクを作成する
stateをdirectoryやlinkにすることで、作成するものを変えられる。
- file: src=/file/to/link/to dest=/path/to/symlink owner=foo group=foo state=link
file - Sets attributes of files — Ansible Documentation
シェルやコマンドを実行する
シェルやコマンド実行は、commandやscriptでもできるが挙動やできることが微妙に違う。私はshellを使うことが多い。
# You can also use the 'args' form to provide the options. This command # will change the working directory to somedir/ and will only run when # somedir/somelog.txt doesn't exist. - shell: somescript.sh >> somelog.txt args: chdir: somedir/
shell - Execute commands in nodes. — Ansible Documentation
圧縮ファイルを解凍する
これはタイトルのまま。.tar.gzの解凍とか。
# Example from Ansible Playbooks - unarchive: src=foo.tgz dest=/var/lib/foo
unarchive - Copies an archive to a remote location and unpack it — Ansible Documentation
実行オプション
Ansibleではplaybook実行時、オプションを指定することで実行内容が変わる。
タスクを部分的に実行する
タスクにタグを付け、オプションでタグを指定する。タスクのまとまり毎に同じタグを付ける感じ。
タスク
tasks: - yum: name={{ item }} state=installed with_items: - httpd - memcached tags: - packages - template: src=templates/src.j2 dest=/etc/foo.conf tags: - configuration
タグを指定して実行
ansible-playbook example.yml --tags "configuration,packages"
パスワードを聞く
sshのパスワード聞かない設定できない時とか。playbook実行直後にパスワードを入力する。
ansible-playbook example.yml --ask-pass
Getting Started — Ansible Documentation
チェック
playbookを実行せずに、実行したとしたらどんな変更が行われるかチェックする。いわゆるドライラン。playbookの文法チェックとしても使える。
ansible-playbook example.yml --check
Check Mode (“Dry Run”) — Ansible Documentation
変数
Ansibleでは変数を使うことで、playbookのコーディング量を減らせる。Tips的に思いつくのを書く。
itemをハッシュ風に使う
値をセットでループさせたいときに便利
- name: add several users user: name={{ item.name }} state=present groups={{ item.groups }} with_items: - { name: 'testuser1', groups: 'wheel' } - { name: 'testuser2', groups: 'root' }
対象サーバのホスト名を変数にセットする
inventory_hostnameを使うことで、playbookのhostを変数として使える。
{{ inventory_hostname }}