- name: "Clear existing cron"
become_user: perforce
command: "crontab -r"
ignore_errors: yes
- name: Tasks for all servers
block:
- name: "INSTANCE environment variable"
cronvar:
name: INSTANCE
value: 1
- name: "Mailto environment variable"
cronvar:
name: MAILTO
value: "{{ perforce_mailto_email }}"
- name: "Mailfrom environment variable"
cronvar:
name: MAILFROM
value: "{{ perforce_mailfrom_email }}"
- name: "Path environment variable"
cronvar:
name: PATH
value: "/p4/common/bin:/p4/1/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:"
- name: "Shell environment variable"
cronvar:
name: SHELL
value: /bin/bash
- name: "Prometheus monitor metrics cleanup"
cron:
name: "Prometheus monitor metrics cleanup"
minute: "0"
hour: "1"
job: "rm -f /p4/metrics/p4_errors-*.prom.* > /dev/null 2>&1 ||:"
become_user: perforce
- name: Broker tasks
block:
- name: "Log cleanup"
cron:
name: "Daily log rotate"
minute: "0"
hour: "17"
job: "/p4/common/bin/replica_cleanup.sh ${INSTANCE}"
when: perforce_server_type == "p4d_broker"
become_user: perforce
- name: Master tasks
block:
- name: "Weekly maintenance"
cron:
name: "Weekly maintenance on the master. Be sure to set up the maintenance.cfg file."
minute: "0"
hour: "6"
weekday: "6"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/sdp/Maintenance/maintenance ${INSTANCE}"
- name: "Unlock"
cron:
name: "Unlock Master"
minute: "0"
hour: "*/6"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} p4 unlock -x > /dev/null 2>&1"
- name: "Update limits"
cron:
name: "Update limits"
minute: "*/10"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/update_limits.py ${INSTANCE}"
- name: "Verify Shelves"
cron:
name: "Verify Shelves"
minute: "*/15"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/verify_shelves.sh ${INSTANCE} 100"
# Journal Rotations
- name: "00:00"
cron:
name: "00:00 Journal Rotation"
minute: "5"
hour: "0"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "02:00"
cron:
name: "02:00 Journal Rotation"
minute: "5"
hour: "2"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "04:00"
cron:
name: "04:00 Journal Rotation"
minute: "5"
hour: "4"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "06:00"
cron:
name: "06:00 Journal Rotation"
minute: "5"
hour: "6"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "08:00"
cron:
name: "08:00 Journal Rotation"
minute: "5"
hour: "8"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "10:00"
cron:
name: "10:00 Journal Rotation"
minute: "5"
hour: "10"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "12:00"
cron:
name: "12:00 Journal Rotation"
minute: "5"
hour: "12"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "14:00"
cron:
name: "14:00 Journal Rotation"
minute: "5"
hour: "14"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "16:00"
cron:
name: "16:00 Journal Rotation"
minute: "5"
hour: "16"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "18:00"
cron:
name: "18:00 Journal Rotation"
minute: "5"
hour: "18"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "20:00"
cron:
name: "20:00 Journal Rotation"
minute: "5"
hour: "20"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
- name: "22:00"
cron:
name: "22:00 Journal Rotation"
minute: "5"
hour: "22"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/rotate_journal.sh ${INSTANCE}"
# End Journal Rotations
- name: "Daily Checkpoint"
cron:
name: "Daily Checkpoint"
minute: "5"
hour: "5"
job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/daily_checkpoint.sh ${INSTANCE}"
# job: "/p4/common/bin/run_if_master.sh ${INSTANCE} /p4/common/bin/recreate_db_checkpoint.sh ${INSTANCE}"
when: perforce_server_type == "p4d_master"
become_user: perforce
- name: Edge tasks
block:
- name: "Weekly maintenance"
cron:
name: "Weekly maintenance on the edge. Be sure to set up the maintenance.cfg file."
minute: "0"
hour: "6"
weekday: "6"
job: "/p4/common/bin/run_if_edge.sh ${INSTANCE} /p4/sdp/Maintenance/edge_maintenance ${INSTANCE}"
- name: "Unlock"
cron:
name: "Unlock edge."
minute: "0"
hour: "*/6"
job: "/p4/common/bin/run_if_edge.sh ${INSTANCE} p4 unlock -x > /dev/null 2>&1"
- name: "Daily Checkpoint"
cron:
name: "Daily Checkpoint"
minute: "5"
hour: "6"
job: "/p4/common/bin/run_if_edge.sh ${INSTANCE} /p4/common/bin/daily_checkpoint.sh ${INSTANCE}"
# job: "/p4/common/bin/run_if_edge.sh ${INSTANCE} /p4/common/bin/recreate_db_checkpoint.sh ${INSTANCE}"
- name: "Replica Status"
cron:
name: "Replica Status"
minute: "*/6"
job: "/p4/common/bin/run_if_edge.sh ${INSTANCE} /p4/common/bin/replica_status.sh ${INSTANCE} > /dev/null"
- name: "Cache Clean"
cron:
name: "Cache Clean"
minute: "0"
job: "/p4/common/bin/run_if_edge.sh ${INSTANCE} /p4/common/bin/cacheclean.sh ${INSTANCE}"
when: perforce_server_type == "p4d_edge"
become_user: perforce
- name: Replica tasks
block:
- name: "Sync replica"
cron:
name: "Sync replica"
minute: "0"
hour: "12"
job: "/p4/common/bin/run_if_replica.sh ${INSTANCE} /p4/common/bin/sync_replica.sh ${INSTANCE}"
- name: "Recreate DB Sync replica"
cron:
name: "Recreate DB Sync replica"
minute: "5"
hour: "22"
weekday: "6"
job: "[ $(date +\\%d) -le 07 ] && /p4/common/bin/run_if_replica.sh ${INSTANCE} /p4/common/bin/recreate_db_sync_replica.sh ${INSTANCE}"
- name: "Replica Status"
cron:
name: "Replica Status"
minute: "*/6"
job: "/p4/common/bin/run_if_replica.sh ${INSTANCE} /p4/common/bin/replica_status.sh ${INSTANCE} > /dev/null"
- name: "Clear structured logs since the replica doesn't rotate them and Perforce won't fix the bug."
cron:
name: "Clear structured logs"
minute: "0"
hour: "1"
job: "/p4/common/bin/run_if_replica.sh ${INSTANCE} rm -f /p4/${INSTANCE}/logs/*.csv > /dev/null"
when: (perforce_server_type == "p4d_edgerep") or (perforce_server_type == "p4d_standby") or (perforce_server_type == "p4d_replica")
become_user: perforce
- name: "P4Verify standby servers"
cron:
user: perforce
name: "P4Verify on standby servers"
minute: "5"
hour: "21"
weekday: "6"
job: "/p4/common/bin/run_if_replica.sh ${INSTANCE} /p4/common/bin/p4verify.py ${INSTANCE} "
when: perforce_server_type == "p4d_standby"
| # | Change | User | Description | Committed | |
|---|---|---|---|---|---|
| #2 | 32492 | Russell C. Jackson (Rusty) |
Fix bugs, remove orphaned files, and apply best practices to ansible-sdp - Fix broken Jinja2 filter syntax (|bool|) in main-playbook.yml - Fix target_server logic comparing string literals instead of variables - Fix package install failing on RedHat due to missing OS family guard - Split packages into OS-agnostic and Debian-specific lists, remove duplicates - Switch all binary downloads from HTTP to HTTPS - Remove 7 orphaned files (unused templates, scripts, configs) - Replace hardcoded emails in cron with template variables - Fix inconsistent journal rotations (06:00/08:00) to use rotate_journal.sh - Parameterize admin sudoers and perforce user password - Fix ansible.cfg malformed vars block - Fix ansibleuser sudo group for RedHat (wheel) vs Debian (sudo) - Remove redundant triple broker start/restart in install.yml - Replace shell sed with ansible.builtin.replace in monitoring role - Fix duplicate handler and undefined variable in monitoring handlers - Use notify handlers instead of inline commands for sysctl/THP - Add idempotency (creates:) to pyenv install |
||
| #1 | 32488 | Russell C. Jackson (Rusty) | Ansible scaffolding for the sdp - Needs work. |