ファイル群とDBのエクスポートデータを .tar.gz
で固めて FTP で別マシンに退避するバックアップ用のシェルスクリプトを Ansible で設定できないか、と考えました。
前提
- 環境:
- Web・DBサーバ(1台):
192.0.2.1
- バックアップ用サーバ(1台):
192.0.2.2
- Web・DBサーバ(1台):
環境としては同一ネットワーク上に上記の2つのサーバがいるものとします。
処理フロー
今回のスクリプトのフローです。
- Web・DBサーバ内で cron から毎日決められた時刻に「特定ディレクトリ
/etc/cms_backup_script/
直下にある.sh
(Webサイトごとに存在、例えばwww.example.jp_backup.sh
) を実行 www.example.jp_backup.sh
で以下の処理を実行- MySQLのサイトで使用しているデータベースをエクスポートし、
.gz
で固めて/home/cms_bkup/www.example.jp/content/
に設置 - Webサイトの仮想サイトのドキュメントルート配下のファイル・ディレクトリを
.tar.gz
で固めて/home/cms_bkup/www.example.jp/mysql/
に設置 - 1.,2.のファイルを含む
/home/cms_bkup/www.example.jp/
ディレクトリを.tar
で固めて/tmp/
ディレクトリに設置 - FTPクライアントで
www.example.jp_backup.ftp
を処理- バックアップ用サーバにFTPログイン
- 指定ディレクトリへ移動
- 上記3.で固めた
.tar
ファイルの過去分がディレクトリに存在する場合は削除 - 今回上記3.で固めた
.tar
ファイルをアップロード
/tmp/
,/home/cms_bkup/www.example.jp/content/
,/home/cms_bkup/www.example.jp/mysql/
の3つのディレクトリのファイルを削除
- MySQLのサイトで使用しているデータベースをエクスポートし、
以上のようなフローになっています。
スクリプト設置手順 (これまで)
これらのスクリプトを設置する際に、今までは以下のような手順を実施していました。
- ベース:
mkdir /home/cms_bkup
mkdir /etc/cms_backup_script
vi /etc/crontab
ii hh * * * ADMIN_USER run-parts /etc/cms_backup_script
のような形で毎日決められた時刻に/etc/cms_backup_script/
下に存在するシェルスクリプトを実行するように cron に登録
- サイト毎:
mkdir /home/cms_bkup/www.example.jp/
mkdir /home/cms_bkup/www.example.jp/content/
mkdir /home/cms_bkup/www.example.jp/mysql/
vi /etc/cms_backup_script/www.example.jp_backup.sh
- サイト毎にスクリプトの内容を修正
vi /etc/cms_backup_script/www.example.jp_backup.ftp
- サイト毎にスクリプトの内容を修正
流石にサイト毎のスクリプト修正は面倒過ぎるので、途中からWebフォームで必要な情報を入力するとスクリプトを自動生成してくれるようなフォーム・ジェネレータを作りました。
が、それすらも面倒臭くなってきたので、 Ansible でできないか、と。
Ansible プレイブック
ということで作りました。
ディレクトリ構造
PROJECT_ROOT/
├ workspace/ // データ永続化領域
│ ├ entrypoint.sh // Dockerコンテナ起動時に実行するシェルスクリプト
│ └ ansible/ // Ansible 用ディレクトリ
│ ├ targets/ // リモートホストの情報を収めるディレクトリ
│ │ └ hosts // リモートサーバの一覧 (今回は1つのみ)
│ │
│ ├ tasks/ // Ansible のタスクを収めるディレクトリ
│ │ ├ add_backup_ftp.yml // FTPスクリプトの設置
│ │ ├ add_backup_shell.yml // シェルスクリプトの設置
│ │ ├ init_backup.yml // バックアップ領域のディレクトリを掘る (ディレクトリが存在しない場合のみ)
│ │ ├ init_cron.yml // /etc/crontab を加筆
│ │ ├ init_script.yml // バックアップスクリプト用のディレクトリを掘る (ディレクトリが存在しない場合のみ)
│ │ └ mkdir_backup.yml // サイトごとのバックアップ領域のディレクトリを掘る
│ │
│ ├ templates/ // バックアップスクリプトのテンプレートを収めるディレクトリ
│ │ ├ backup.ftp.j2 // FTPスクリプトのテンプレート
│ │ └ backup.sh.j2 // シェルスクリプトのテンプレート
│ │
│ ├ vars/ // 各種パラメータ変数の設定を収めるディレクトリ
│ │ └ param_vars.yml // 各種パラメータ変数
│ │
│ └ main.yml // Ansible の playbook
│
├ docker-compose.yml // Docker Compose 設定ファイル
└ Dockerfile // Dockerfile
Dockerfile, docker-compose.yml, entrypoint.sh. ansible/targets/hosts
この辺りはそのまま。
ansible/vars/param_vars.yml
commons:
scriptrootpath: /etc/cms_backup_script/
bkuprootpath: /home/cms_bkup/
site:
domain: www.sample.jp
rootdirectory: sample_site
subdirectory:
cmstools:
toolname: wp
usedb: true
db:
dbname: exampledb
dbuser: johndoe
dbpassword: DBDummyPassword1234
ftp:
ftpserver: 192.0.2.2
ftppath: /ftp/backup/
ftpuser: johndoe
ftppassword: FtpDummyPassword1234
必要そうなパラメータを入れました。今回はパラメータが多いのでネストした配列の形式です。
特に cmstools.usedb
でツールがDBを使っているかどうかのフラグを持たせており、これによりバックアップスクリプトにDBのエクスポートを含めるか否かをテンプレートの中で条件分岐させています。
ansible/main.yml
- name: Settings cms tools backup
become: yes
become_user: ADMIN_USER
become_method: su
hosts:
- add_vhost_servers
vars_files: ./vars/param_vars.yml
tasks:
- name: check and mkdir script root
include_tasks: ./tasks/init_script.yml
vars:
commonsparam: "{{ commons }}"
- name: Settings crontab
include_tasks: ./tasks/init_cron.yml
vars:
commonsparam: "{{ commons }}"
- name: check and mkdir bkuproot
include_tasks: ./tasks/init_backup.yml
vars:
commonsparam: "{{ commons }}"
- name: mkdir backup for a site
include_tasks: ./tasks/mkdir_backup.yml
vars:
commonsparam: "{{ commons }}"
siteparam: "{{ site }}"
cmstoolsparam: "{{ cmstools }}"
- name: Deploy backup Shellscript
include_tasks: ./tasks/add_backup_shell.yml
vars:
commonsparam: "{{ commons }}"
siteparam: "{{ site }}"
cmstoolsparam: "{{ cmstools }}"
dbparam: "{{ db }}"
- name: Deploy backup FTP command
include_tasks: ./tasks/add_backup_ftp.yml
vars:
siteparam: "{{ site }}"
cmstoolsparam: "{{ cmstools }}"
ftpparam: "{{ ftp }}"
ansible/tasks/add_backup_ftp.yml
- name: Deploy backup FTP command
template:
src: ../templates/backup.ftp.j2
dest: "{{ commons.scriptrootpath }}{{ site.domain }}_backup.ftp"
mode: '0400'
FTPスクリプトをテンプレートから生成するタスク。
ansible/tasks/add_backup_shell.yml
- name: Deploy backup Shellscript
template:
src: ../templates/backup.sh.j2
dest: "{{ commons.scriptrootpath }}{{ site.domain }}_backup.sh"
mode: '0700'
シェルスクリプトをテンプレートから生成するタスク。
ansible/tasks/init_backup.yml
- name: bkuproot directory check
stat:
path: "{{ commons.bkuprootpath }}"
register: chk_dir
- name: mkdir bkuproot
file:
path: "{{ commons.bkuprootpath }}"
state: directory
owner: ADMIN_USER
group: ADMIN_USER
mode: 0755
recurse: no
when: chk_dir.stat.exists == false
バックアップ領域のディレクトリを掘るタスク。
今回の新しい部分はディレクトリが存在しない場合のみ実施するように when
で条件分岐しているところ。また、ディレクトリの存在チェックのために、 register: chk_dir
を利用しています。
ansible/tasks/init_cron.yml
- name: Settings crontab
blockinfile:
path: /etc/crontab
create: no
insertafter: EOF
marker: "# {mark} ANSIBLE basic setup: cms tools backup"
block: "ii hh * * * ADMIN_USER run-parts {{ commons.scriptrootpath }}"
/etc/crontab
のファイル末尾にジョブを加筆するタスク。前回は marker
をユニークにしましたが、今回は逆に意図的に marker
を固定にすることで、ジョブが重複して登録されないようにしました。
ansible/tasks/init_script.yml
- name: scriptroot directory check
stat:
path: "{{ commons.scriptrootpath }}"
register: chk_dir
- name: mkdir script root
file:
path: "{{ commons.scriptrootpath }}"
state: directory
owner: ADMIN_USER
group: ADMIN_USER
mode: 0755
recurse: no
when: chk_dir.stat.exists == false
ansible/tasks/init_backup.yml
と内容は同じです。
ansible/tasks/mkdir_backup.yml
- name: mkdir backup for a site
file:
path: "{{ commons.bkuprootpath }}{{ site.rootdirectory }}"
state: directory
owner: ADMIN_USER
group: ADMIN_USER
mode: 0755
recurse: no
- name: mkdir backup for a site contents
file:
path: "{{ commons.bkuprootpath }}{{ site.rootdirectory }}/content/"
state: directory
owner: ADMIN_USER
group: ADMIN_USER
mode: 0755
recurse: no
- name: mkdir backup for a site db
file:
path: "{{ commons.bkuprootpath }}{{ site.rootdirectory }}/mysql/"
state: directory
owner: ADMIN_USER
group: ADMIN_USER
mode: 0755
recurse: no
when: cmstools.usedb | bool
サイトごとのバックアップ領域のディレクトリを掘るタスク。ここでは cmstools.usedb
の値によってDB用のディレクトリを掘るか否かを when
で条件分岐しています。
準備
検証のため、以下の2つのサイトを作成します。
- WordPress
- ファイル群・DB(SQLエクスポート)含めて WordPress 全体をバックアップ
- 自前ツールで JSON の新着情報を管理するサイト
- JSON ファイル配置フォルダをバックアップ
準備には折角なので以前作ったプレイブックを使います。
A. サイト作成
5.A.1. WordPress
param_vars.yml
username: johndoe
password: DummyPassword1234
rootdirectory: example
domain: www.example.jp
ipaddress: 192.0.2.1
portnum: 80
まずはこうして……
プレイブック実行
# ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/main.yml -u SSH_REMOTEUSER --private-key="/root/.ssh/PRIVATE_KEY" -K
BECOME password:
PLAY [Settings vsftpd and httpd] **********************************************************************************
TASK [Gathering Facts] ********************************************************************************************ok: [192.0.2.1]
TASK [Add Linux User] *********************************************************************************************included: /workspace/ansible/tasks/add_user.yml for 192.0.2.1
TASK [Add user, setting password and groups] **********************************************************************changed: [192.0.2.1]
TASK [Settings vsftpd user_list and user_conf] ********************************************************************included: /workspace/ansible/tasks/vsftpd_user_settings.yml for 192.0.2.1
TASK [Settings vsftpd user_list] **********************************************************************************changed: [192.0.2.1]
TASK [Settings vsftpd user_conf] **********************************************************************************changed: [192.0.2.1]
TASK [Restart vsftpd] *********************************************************************************************changed: [192.0.2.1]
TASK [Setup Apache conffile] **************************************************************************************included: /workspace/ansible/tasks/apache_settings.yml for 192.0.2.1
TASK [mkdir root] *************************************************************************************************changed: [192.0.2.1]
TASK [mkdir web] **************************************************************************************************changed: [192.0.2.1]
TASK [Setup Apache conffile] **************************************************************************************changed: [192.0.2.1]
TASK [Restart httpd] **********************************************************************************************changed: [192.0.2.1]
PLAY RECAP ********************************************************************************************************192.0.2.1 : ok=12 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
OK。
5.A.2. 自前ツールサイト
param_vars.yml
username: janedoe
password: DummyPassword5678
rootdirectory: json_example
domain: json.example.jp
ipaddress: 192.0.2.1
portnum: 80
同様にパラメータを設定。
プレイブック実行
# ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/main.yml -u SSH_REMOTEUSER --private-key="/root/.ssh/PRIVATE_KEY" -K
BECOME password:
PLAY [Settings vsftpd and httpd] **********************************************************************************
TASK [Gathering Facts] ********************************************************************************************ok: [192.0.2.1]
TASK [Add Linux User] *********************************************************************************************included: /workspace/ansible/tasks/add_user.yml for 192.0.2.1
TASK [Add user, setting password and groups] **********************************************************************changed: [192.0.2.1]
TASK [Settings vsftpd user_list and user_conf] ********************************************************************included: /workspace/ansible/tasks/vsftpd_user_settings.yml for 192.0.2.1
TASK [Settings vsftpd user_list] **********************************************************************************changed: [192.0.2.1]
TASK [Settings vsftpd user_conf] **********************************************************************************changed: [192.0.2.1]
TASK [Restart vsftpd] *********************************************************************************************changed: [192.0.2.1]
TASK [Setup Apache conffile] **************************************************************************************included: /workspace/ansible/tasks/apache_settings.yml for 192.0.2.1
TASK [mkdir root] *************************************************************************************************changed: [192.0.2.1]
TASK [mkdir web] **************************************************************************************************changed: [192.0.2.1]
TASK [Setup Apache conffile] **************************************************************************************changed: [192.0.2.1]
TASK [Restart httpd] **********************************************************************************************changed: [192.0.2.1]
PLAY RECAP ********************************************************************************************************192.0.2.1 : ok=12 changed=8 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
こちらもOK。
B. サイト作成
5.B.1. WordPress
DB作成
WordPress 用にDB作成。
- DB名:
exampledb
- ユーザ:
johndoe
- パスワード:
DBDummyPassword1234
DB権限設定
- 対象DB:
exampledb
- ユーザ:
johndoe
- ホスト、権限
以上 Webmin から設定。
WordPress インストール
普通にインストール・ログインして以下を実施。
- テーマ変更
- プラグインインストール
- 設定変更
- サンプルコンテンツ・画像など投入

2. 自前ツールサイト
自前ツール設定し、 news.json
作成。
data/news.json
[
{
"title": "Scarsick",
"date": "2020/07/08",
"description": "His skin against this dirty floor.",
"link": ""
},
{
"title": "Spitfall",
"date": "2020/07/17",
"description": "Introducing Star, Thus Quote The Craving, Redefining Vomatorium, Man Of The Masses, YO",
"link": ""
},
{
"title": "Cribcaged",
"date": "2020/05/06",
"description": "",
"link": ""
},
// 略
]
これで必要なファイル群を準備2.の情報でデプロイ。

JSON からリストが生成されていることを確認。
検証
ようやく本題です。
冒頭で取り上げたバックアップスクリプトの設定をしてみようと思います。
6.1. WordPress
cmstools.usedb
の値によってバックアップスクリプトの内容が変化することを確認しておきます。
param_vars.yml
commons:
scriptrootpath: /etc/cms_backup_script/
bkuprootpath: /home/cms_bkup/
site:
domain: www.sample.jp
rootdirectory: sample_site
subdirectory:
cmstools:
toolname: wp
usedb: true
db:
dbname: exampledb
dbuser: johndoe
dbpassword: DBDummyPassword1234
ftp:
ftpserver: 192.0.2.2
ftppath: /ftp/backup/
ftpuser: johndoe
ftppassword: FtpDummyPassword1234
まずはこうして……
プレイブック実行
# ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/main.yml -u SSH_REMOTEUSER --private-key="/root/.ssh/PRIVATE_KEY" -K
BECOME password:
PLAY [Settings cms tools backup] **********************************************************************************
TASK [Gathering Facts] ********************************************************************************************ok: [192.0.2.1]
TASK [check and mkdir script root] ********************************************************************************included: /workspace/ansible/tasks/init_script.yml for 192.0.2.1
TASK [scriptroot directory check] *********************************************************************************ok: [192.0.2.1]
TASK [mkdir script root] ******************************************************************************************changed: [192.0.2.1]
TASK [Settings crontab] *******************************************************************************************included: /workspace/ansible/tasks/init_cron.yml for 192.0.2.1
TASK [Settings crontab] *******************************************************************************************changed: [192.0.2.1]
TASK [check and mkdir bkuproot] ***********************************************************************************included: /workspace/ansible/tasks/init_backup.yml for 192.0.2.1
TASK [bkuproot directory check] ***********************************************************************************ok: [192.0.2.1]
TASK [mkdir bkuproot] *********************************************************************************************changed: [192.0.2.1]
TASK [mkdir backup for a site] ************************************************************************************included: /workspace/ansible/tasks/mkdir_backup.yml for 192.0.2.1
TASK [mkdir backup for a site] ************************************************************************************changed: [192.0.2.1]
TASK [mkdir backup for a site contents] ***************************************************************************changed: [192.0.2.1]
TASK [mkdir backup for a site db] *********************************************************************************changed: [192.0.2.1]
TASK [Deploy backup Shellscript] **********************************************************************************included: /workspace/ansible/tasks/add_backup_shell.yml for 192.0.2.1
TASK [Deploy backup Shellscript] **********************************************************************************changed: [192.0.2.1]
TASK [Deploy backup FTP command] **********************************************************************************included: /workspace/ansible/tasks/add_backup_ftp.yml for 192.0.2.1
TASK [Deploy backup FTP command] **********************************************************************************changed: [192.0.2.1]
PLAY RECAP ********************************************************************************************************192.0.2.1 : ok=17 changed=8 unreachable=0 failed=0 skipped=2 rescued=0 ignored=0
OK。
結果確認
cron
# less /etc/crontab
## 略
# BEGIN ANSIBLE basic setup: cms tools backup
ii hh * * * ADMIN_USER run-parts /etc/cms_backup_script/
# END ANSIBLE basic setup: cms tools backup
ジョブが登録されていることを確認。
sh, ftp
# ls -al /etc/cms_backup_script/
-r-------- 1 ADMIN_USER ADMIN_USER YYYY mm dd hh:ii www.example.jp_backup.ftp
-rwx------ 1 ADMIN_USER ADMIN_USER ZZZZ mm dd hh:ii www.example.jp_backup.sh
きちんと生成されていますね、OKです。
中身も問題ないことを確認。
バックアップディレクトリ
# ls -al /home/cms_bkup/
drwxr-xr-x 4 ADMIN_USER ADMIN_USER AAAA mm dd hh:ii example
# ls -al /home/cms_bkup/example/
drwxr-xr-x 2 ADMIN_USER ADMIN_USER BBBB mm dd hh:ii content
drwxr-xr-x 2 ADMIN_USER ADMIN_USER BBBB mm dd hh:ii mysql
ディレクトリも作成されています。
6.2. 自前ツールサイト
今度はDBを使用しない自前ツールサイトの方を試します。 cmstools.usedb
の値に応じて .sh
が変化することや、既存ディレクトリの中身がクリーンされない、といった点を確認したいと思います。
param_vars.yml
commons:
scriptrootpath: /etc/cms_backup_script/
bkuprootpath: /home/cms_bkup/
site:
domain: json.example.jp
rootdirectory: json_example
subdirectory: jsontools/data/
cmstools:
toolname: jsontools
usedb: false
db:
dbname: exampledb
dbuser: johndoe
dbpassword: DBDummyPassword1234
ftp:
ftpserver: 192.0.2.2
ftppath: /ftp/backup/
ftpuser: johndoe
ftppassword: FtpDummyPassword1234
usedb: false
としてDB使用しないことを宣言。なので db:
以下の値はダミーです。
プレイブック実行
# ansible-playbook -i /workspace/ansible/targets/hosts /workspace/ansible/main.yml -u SSH_REMOTEUSER --private-key="/root/.ssh/PRIVATE_KEY" -K
BECOME password:
PLAY [Settings cms tools backup] **********************************************************************************
TASK [Gathering Facts] ********************************************************************************************ok: [192.0.2.1]
TASK [check and mkdir script root] ********************************************************************************included: /workspace/ansible/tasks/init_script.yml for 192.0.2.1
TASK [scriptroot directory check] *********************************************************************************ok: [192.0.2.1]
TASK [mkdir script root] ******************************************************************************************skipping: [192.0.2.1]
TASK [Settings crontab] *******************************************************************************************included: /workspace/ansible/tasks/init_cron.yml for 192.0.2.1
TASK [Settings crontab] *******************************************************************************************ok: [192.0.2.1]
TASK [check and mkdir bkuproot] ***********************************************************************************included: /workspace/ansible/tasks/init_backup.yml for 192.0.2.1
TASK [bkuproot directory check] ***********************************************************************************ok: [192.0.2.1]
TASK [mkdir bkuproot] *********************************************************************************************skipping: [192.0.2.1]
TASK [mkdir backup for a site] ************************************************************************************included: /workspace/ansible/tasks/mkdir_backup.yml for 192.0.2.1
TASK [mkdir backup for a site] ************************************************************************************changed: [192.0.2.1]
TASK [mkdir backup for a site contents] ***************************************************************************changed: [192.0.2.1]
TASK [mkdir backup for a site db] *********************************************************************************skipping: [192.0.2.1]
TASK [Deploy backup Shellscript] **********************************************************************************included: /workspace/ansible/tasks/add_backup_shell.yml for 192.0.2.1
TASK [Deploy backup Shellscript] **********************************************************************************changed: [192.0.2.1]
TASK [Deploy backup FTP command] **********************************************************************************included: /workspace/ansible/tasks/add_backup_ftp.yml for 192.0.2.1
TASK [Deploy backup FTP command] **********************************************************************************changed: [192.0.2.1]
PLAY RECAP ********************************************************************************************************192.0.2.1 : ok=14 changed=4 unreachable=0 failed=0 skipped=3 rescued=0 ignored=0
OK。
結果確認
cron
# less /etc/crontab
## 略
# BEGIN ANSIBLE basic setup: cms tools backup
ii hh * * * ADMIN_USER run-parts /etc/cms_backup_script/
# END ANSIBLE basic setup: cms tools backup
marker
を意図的に重複するようにしたので、同じジョブが二重登録されていないことを確認。
sh, ftp
# ls -al /etc/cms_backup_script/
-r-------- 1 ADMIN_USER ADMIN_USER WWWW mm dd hh:ii json.example.jp_backup.ftp
-rwx------ 1 ADMIN_USER ADMIN_USER XXXX mm dd hh:ii json.example.jp_backup.sh
-r-------- 1 ADMIN_USER ADMIN_USER YYYY mm dd hh:ii www.example.jp_backup.ftp
-rwx------ 1 ADMIN_USER ADMIN_USER ZZZZ mm dd hh:ii www.example.jp_backup.sh
ディレクトリはクリーニングされず、既存設定は生きています。OKです。
json.example.jp_backup.sh
の中身もDB部分が削れていることを確認。
バックアップディレクトリ
# ls -al /home/cms_bkup/
drwxr-xr-x 3 ADMIN_USER ADMIN_USER AAAA mm dd hh:ii json_example
drwxr-xr-x 4 ADMIN_USER ADMIN_USER AAAA mm dd hh:ii example
# ls -al /home/cms_bkup/json_example/
drwxr-xr-x 2 ADMIN_USER ADMIN_USER BBBB mm dd hh:ii content
こちらもOKです。DB用のディレクトリは作成されていません。
ジョブ試験
さて、ここまでで設定的には大丈夫そうな感じですが、本当に意図通りに動くのかどうか cronジョブ で確かめます。
vi /etc/crontab
でジョブの実行時間をずらして処理させてみます。
結果
192.0.2.2
のバックアップサーバにファイルが転送されたことを確認した後、それらのファイルをローカルにコピーしてきて解凍してみます。
8.1. WordPress

www.example.jp
のバックアップファイルを解凍したフォルダ。 content
と mysql
の2つのフォルダができています。

ダンプされたSQL文に先ほど入力したサンプル記事が入っていることを確認。

WordPress のファイル群がそのままバックアップできていることを確認。

wp-content/uploads
の中身も問題ありません。OKです。
8.2. 自前ツールサイト

こちらも問題なさそうです。

用意した JSONデータ が入っていることを確認。OKです。
検証結果
検証した結果、意図した通りの挙動になることが確認できました。
今まではジェネレータで生成していたとはいえ、生成したものを vi
で流すなど、まだ多少の人間によるオペレーションが残っていました。
今回の Ansibleプレイブック により、それらすらも param_vars.yml
にパラメータを記述すれば後は全て自動化できるようになりました。
IaC、良いですね。
参考
Ansible
ファイル・ディレクトリの存在チェック
when
jinja2
三項演算子
- DD開発ROOM: 2015
- python – Jinja2 shorthand conditional – Stack Overflow
- Template Designer Documentation — Jinja Documentation (2.11.x)
正確には三項演算子ではなく inline if-expressions 。
Dry run
- [Ansible][ACI] モジュールの冪等性と check モード(dry-run)の対応について – てくなべ (tekunabe)
- ansibleのdry-run時のエラーでdry-runがストップすることを回避 – Qiita
--check
をオプションに指定すると可。
Error: the connection plugin ‘heck’ was not found
check
オプションはハイフン2つ。
Warning: conditional statements should not include jinja2 templating delimiters such as {{ }} or {% %}
自分の場合は when: "{{ cmstools.usedb | bool }}"
と書いていたのを when: cmstools.usedb | bool
に修正して警告を回避した。
(未使用) cron
- Ansibleでcronを設定する – Qiita
- Ansibleモジュールをplaybookで試す【初級編】 | Developers.IO
- Ansible で cron を管理する – IT curry blog