我有一个 dns 区域,其序列号:2015040500
今天我要在那里添加一些 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}"