スタイル・エッジ技術ブログ

士業集客支援/コンサルティングのスタイル・エッジのエンジニアによるブログです。

私のAnsibleのTips

こんにちは、システム事業部のTMです。
普段はシステムの開発・保守やサイトの運用保守をしています。

弊社では、Ansibleでサーバーやシステムの設定管理をしています。
管理している中で見つけたAnsibleのTipsを紹介したいと思います。

変数名

変数名にハイフンを使っていて失敗することがよくありませんか?

FILE-OWNERというハイフンを使った変数を使ったPlaybookの実行例が下記です。 FILE-OWNER という変数名なのにFILEとなっています。変数名のハイフン以降が認識されていません。

fatal: [web]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: 'FILE' is undefined\n\nThe error appears to be in 以下省略}

Ansibleでは変数名は英字、数字、アンダースコアのみで構成されている必要があります。また変数名は英字から始めなければいけません。
またPythonやPlaybookの予約語は使えません。 https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_variables.html#creating-valid-variable-names

cronの削除

Ansibleでは、cronモジュールを使用してcronジョブを設定することができます。

cron: 
   name: "upload log file to s3"
   minute: 45 
   hour: 8
   job: /usr/local/bin/aws s3 cp /var/log/httpd/access.log s3://log/access.log --no-progress

cronを設定する方法についての紹介記事はよく見かけますが、削除する場合についての記事は見かけません。
削除する必要が出てきた場合、どのようにしたら良いのでしょうか?
削除の場合だけ、crontabコマンドで削除しないといけないのでしょうか?

削除の場合はstateパラメータにabsentを指定します。

cron: 
   name: "upload log file to s3"
   state: absent

stateパラメーターのデフォルト値はpresentなので削除以外の場合は指定しなくても大丈夫です。
これで安全にcronを削除できますね。

暗号化したファイルを見るだけのコマンド

AnsibleのPlaybookはGitでバージョン管理されると思います。
その際、パスワードなどの機密情報を平文のままリポジトリにプッシュするのではなく、
Ansible Vault で暗号化してプッシュできます。

暗号化されたファイルを作成

ansible-vault create 暗号化するファイル

暗号化されていないファイルの暗号化

ansible-vault encrypt 暗号化するファイル

暗号化したファイルの編集

ansible-vault edit 暗号化したファイル

暗号化した内容を見たいだけというシチュエーションはよくあるのではないでしょうか?
ansible-vault editコマンドで確認もできるのですが、内容を確認するだけのコマンドもちゃんとあります。

暗号化されたファイルの中身を内容を確認

ansible-vault view 暗号化したファイル

ドライラン

Ansibleにもドライランがあります。
公式サイトではチェックモードと呼ばれています。

実行方法

ansible-playbook -i inventories/production.ini site.yml --check

--checkをつけて実行すると、リモートへの変更は行わずにPlaybookが正しく実行されるかどうかが確認できます。

おわりに

今回はAnsibleのTipsを紹介しました。
Ansibleを使うときの助けになれば幸いです。

スタイル・エッジ・グループでは一緒に働く仲間を募集しております。 興味をお持ちいただけましたら是非とも下記を覗いてみてください! recruit.styleedge-labo.co.jp