ansible 標準搭載の cron 設定で使用できるパラメーター

# はじめに
ansible で cron 設定するときに使えるパラメーターが気になったので調べてみたのを簡単にまとめてみました。
(大体は name, job, 時間系 だけ使えていればいいかなと言う甘い認識ですが)

# パラメーター表
| パラメーター | 値 (**デフォルト値**)           | 説明                                                                                           | 
| ------------ | ------------------------------- | ---------------------------------------------------------------------------------------------- | 
| name         | string: 必須                    | 説明や識別用。必須パラメーター                                                       | 
| job          | string                          | 実行するコマンド。改行を含めてはいけない。                                           | 
| minute       | string (**"*"**)                | 実行する分指定。形式は cron で使うもの。                                                | 
| hour         | string (**"*"**)                | 実行する時間指定。形式は cron で使うもの。                                              | 
| day          | string (**"*"**)                | 実行する日付指定。形式は cron で使うもの。                                              | 
| month        | string (**"*"**)                | 実行する月指定。形式は cron で使うもの。                                                | 
| weekday      | string (**"*"**)                | 実行する曜日指定。形式は cron で使うもの。                                               | 
| special_time | string                          | 事前に定義されている時間指定。(reboot / yearly / annually / monthly / weekly / daily / hourly) | 
| user         | string                          | 実行ユーザーを指定。デフォルトでは ansible 実行ユーザーになる。                    | 
| state        | string (**present** / absent) | cron の登録ステータス。absent にすると削除される。                                             | 
| disabled     | bool (**false**)                | job の無効化 (コメントアウト) するかどうか。                                                   | 
| backup       | bool (**false**)                | 変更前の crontab ファイルをバックアップするかどうか。パスの指定は `backup_file` に記載する。   | 
| env          | bool (**false**)                | 環境変数を設定するかどうか。                                                                   | 
| cron_file    | string                          | `/etc/cron.d/` 内に作成するファイル名。指定しない場合はユーザーの crontab に書き込まれる。     | 
| insertafter  | string                          | 環境変数は指定された環境変数の宣言の後に挿入される。                                           | 
| insertbefore | string                          | 環境変数は指定された環境変数の宣言の前に挿入される。                                           |

# サンプル
サンプルで playbook と crontab 対応みたいなの少し出してみます

## 基本的なやつ
```yml
# Playbook
- name: Setup daily backup
  ansible.builtin.cron:
    name: "Daily backup"
    job: "/usr/local/bin/backup.sh"
    hour: "1"
    minute: "30"
    user: root

# 生成される crontab
# Daily backup
30 1 * * * /usr/local/bin/backup.sh
```

## env 設定してみるやつ
```yml
# Playbook
- name: Run script with custom environment
  ansible.builtin.cron:
    name: "Custom environment job"
    job: "/usr/local/bin/script.sh"
    minute: "*/15"
    user: webuser
    env: yes
    insertbefore: "# END SCRIPTS"
    environment:
      - PATH: "/usr/local/bin:/usr/bin:/bin"
      - JAVA_HOME: "/usr/lib/jvm/java-11"

# 生成される crontab
PATH=/usr/local/bin:/usr/bin:/bin
JAVA_HOME=/usr/lib/jvm/java-11
# Custom environment job
*/15 * * * * /usr/local/bin/script.sh
# END SCRIPTS
```

## disabled true にしてみる
```yml
- name: Disable Specific Cron Job
  ansible.builtin.cron:
    name: "Temporarily Disabled Job"
    user: root
    minute: "0"
    hour: "5"
    job: "/path/to/script.sh"
    disabled: true

# 生成される crontab
# Temporarily Disabled Job
#0 5 * * * root /path/to/script.sh
```

## 複数同時設定
AI くんに聞いたらこんなこともできるらしい
```yml
# Playbook
- name: Setup multiple monitoring jobs
  ansible.builtin.cron:
    name: "{{ item.name }}"
    job: "{{ item.cmd }}"
    minute: "{{ item.minute }}"
    hour: "{{ item.hour }}"
    user: monitoring
  loop:
    - { name: "Check disk space", cmd: "/usr/local/bin/check-disk.sh", minute: "*/30", hour: "*" }
    - { name: "Check memory usage", cmd: "/usr/local/bin/check-memory.sh", minute: "*/15", hour: "*" }
    - { name: "Check service status", cmd: "/usr/local/bin/check-service.sh", minute: "*/5", hour: "*" }

# 生成される crontab
# Check disk space
*/30 * * * * /usr/local/bin/check-disk.sh
# Check memory usage
*/15 * * * * /usr/local/bin/check-memory.sh
# Check service status
*/5 * * * * /usr/local/bin/check-service.sh
```

# 参考
https://docs.ansible.com/ansible/latest/collections/ansible/builtin/cron_module.html