シリアル番号が2015040500のDNSゾーンがあります。
今日はそこにいくつかのCNAMEレコードを追加する予定なので、シリアル番号を増やす方法に興味があります。つまり、今日の日付を基準に変更しなければならないという意味です。たとえば、2015042200、または1ずつ増やす必要があります。 2015040501でしょ?
答え1
あなたが望むものは何でもすることができます〜しなければならない新しいシリアル番号が古いシリアル番号より大きいことを確認してください。
しかし、私は次のスキームに従ってタイムスタンプベースのアプローチをお勧めします。
YYYYMMDDxx
ここでは、特定の日付のすべての編集内容xx
から始めて増やします(他の日付で編集した場合にリセットされます)。00
xx
00
このスキームの最大の利点は、ゾーンファイルが最後に変更された日付を一目で確認できることです。
また、シーケンス番号の増加をより強力にします。
1
もう一つの方法は、ファイルの編集中に開始して増やすことです。
シーケンス番号がすでにタイムスタンプベースである場合(そして2015040500
非常に似ているように見える場合)、その決定に固執し(あなたが決めていない場合でも)、以下を使用する必要があります。論理的後継2015042200
答え2
シリアルにUnixタイムを使用することにしました
- name: "{{ role_path|basename }} | get unix time"
shell: echo $(date +%s)
register: unix_time_stamp
delegate_to: localhost
run_once: true
become: no
#
- name: "{{ role_path|basename }} setting execution facts"
set_fact:
__bind9_zone_serial: "{{ unix_time_stamp.stdout }}"
run_once: true
become: no
答え3
その他の回答を参照アンシプール。このアプローチは完全に有効です。ゾーン構成はテンプレートから生成され、単純な式を使用してシーケンスが更新されます。振り子2金型。私が使用する方法は、現在のゾーンファイルに現在の値があることです。抽出して増やしてみてください。
- name: get current bind9 serial
block:
- ansible.builtin.slurp:
path: "/etc/bind/zones/db.{{ vw_tld }}"
register: bind9_current
- ansible.builtin.set_fact:
bind9_serial_concat: "{{ (bind9_current.content | b64decode | regex_search('[0-9]+[ ]+; Serial'))[0:10] }}"
rescue:
- ansible.builtin.set_fact:
bind9_serial_concat: "1970010100"
- ansible.builtin.set_fact:
bind9_serial_date: "{{ bind9_serial_concat[0:8] }}"
bind9_serial_counter: "{{ bind9_serial_concat[8:10] }}"
- ansible.builtin.set_fact:
bind9_serial_new: "{{ now(fmt= '%Y%m%d') }}{{ '%02d' | format(bind9_serial_counter | int + 1) }}"
when: bind9_serial_date == now(fmt= "%Y%m%d")
- ansible.builtin.set_fact:
bind9_serial_new: "{{ now(fmt= '%Y%m%d') }}00"
when: bind9_serial_date != now(fmt= "%Y%m%d")
- name: bind9 database
ansible.builtin.template:
src: bind9.db.j2
dest: "/etc/bind/zones/db.{{ vw_tld }}"
- name: bind9 reverse database
ansible.builtin.template:
src: bind9.db.reverse.j2
dest: /etc/bind/zones/db.192.168
答え4
@tombartの回答が機能し、ソース管理ではなくすべての領域が更新される小規模の研究室環境では、よりシンプルで簡単です。
#!/usr/bin/env bash
set -euo pipefail
: ${1?"Usage: $0 <zone file>"}
IFILE=$1
if [ ! -w "${IFILE}" ]; then
echo "Error cannot write to ${IFILE}"
exit
fi
if [ ! -w $(pwd) ]; then
echo "Error, sed needs write permission for temp file, add w to current directory"
exit
fi
PREV_SERIAL=$(grep -i Serial "${IFILE}" | awk '{print $1}')
TODAY=$(date +%Y%m%d00)
if [ "$PREV_SERIAL" -ge "${TODAY}" ]; then
NEW_SERIAL=$((PREV_SERIAL+1))
else
NEW_SERIAL=${TODAY}
fi
sed -i "s/${PREV_SERIAL}/${NEW_SERIAL}/" "${IFILE}"
printf "Zone: %s [%d -> %d]\n" "${IFILE}" "${PREV_SERIAL}" "${NEW_SERIAL}"