Como incrementar o número de série na zona bind9 dns

6

Eu tenho uma zona de DNS, que tem um número de série: 2015040500

Hoje vou adicionar alguns registros CNAME lá, então estou interessado em como incrementar o número de série, quero dizer, devo alterá-lo com base na data de hoje, por exemplo, será: 2015042200 ou apenas incrementá-lo com um, então será 2015040501?

    
por Shota 22.04.2015 / 22:09

3 respostas

8

Você pode fazer o que quiser, a única coisa que você deve ter certeza é que o novo número de série é maior que o antigo.

Dito isso, eu recomendaria uma abordagem baseada em timestamp seguindo um esquema como:

 YYYYMMDDxx

em que xx começa em 00 e é incrementado para todas as edições nesse dia específico (ao editar em outro dia, você redefinir xx para 00 )

A principal vantagem deste esquema é que você também sabe a data da última modificação do seu arquivo de zona à primeira vista.

Também torna o número de série incrementado mais robusto.

A alternativa é começar com 1 e apenas incrementar sempre que você editar o arquivo.

Se o número de série já é baseado no timestamp (e 2015040500 parece muito com isso), você provavelmente deve ficar com essa decisão (mesmo que não seja feita por você), e usar o lógico sucessor 2015042200

    
por 22.04.2015 / 22:17
1

eu decidi usar o tempo unix para serial

- 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
    
por 13.02.2018 / 13:30
0

Um script bash procurando:

   12345 ; Serial

no diretório /etc/bind/zones . Deve corresponder a qualquer número antes de ; Serial (sensível a maiúsculas e minúsculas). E substitua-o pelo formato YYYYMMDDxx .

#!/bin/bash

ZONES_PATH="/etc/bind/zones"
DATE=$(date +%Y%m%d)
# we're searching for line containing this comment
NEEDLE="Serial"
for ZONE in $(ls -1 $ZONES_PATH) ; do
    curr=$(/bin/grep -e "${NEEDLE}$" $ZONES_PATH/${ZONE} | /bin/sed -n "s/^\s*\([0-9]*\)\s*;\s*${NEEDLE}\s*//p")
    # replace if current date is shorter (possibly using different format)
    if [ ${#curr} -lt ${#DATE} ]; then
      serial="${DATE}00"
    else
      prefix=${curr::-2}
      if [ "$DATE" -eq "$prefix" ]; then # same day
        num=${curr: -2} # last two digits from serial number
        num=$((10#$num + 1)) # force decimal representation, increment
        serial="${DATE}$(printf '%02d' $num )" # format for 2 digits
      else
        serial="${DATE}00" # just update date
      fi
    fi
    /bin/sed -i -e "s/^\(\s*\)[0-9]\{0,\}\(\s*;\s*${NEEDLE}\)$/${serial}/" ${ZONES_PATH}/${ZONE}
    echo "${ZONE}: "
    grep "; ${NEEDLE}$" $ZONES_PATH/${ZONE}
done

Versão modificada para configuração de ligação gerenciada em um repositório git , que é atualizada somente para o arquivo de zona modificado:

#!/bin/bash
ZONES_PATH="$(pwd)/zones"
REPO_PATH="$(git rev-parse --show-toplevel)"
DATE=$(date +%Y%m%d)
NEEDLE="Serial"
for ZONE in $(git diff --name-only --diff-filter=AM 'git merge-base origin/master HEAD' $ZONES_PATH) ; do
    curr=$(/bin/grep -e "${NEEDLE}$" ${REPO_PATH}/${ZONE} | /bin/sed -n "s/^\s*\([0-9]*\)\s*;\s*${NEEDLE}\s*//p")
    if [ ${#curr} -lt ${#DATE} ]; then
      serial="${DATE}00"
    else
      prefix=${curr::-2}
      if [ "$DATE" -eq "$prefix" ]; then # same day
        num=${curr: -2} # last two digits from serial number
        num=$((10#$num + 1)) # force decimal representation, increment
        serial="${DATE}$(printf '%02d' $num )" # format for 2 digits
      else
        serial="${DATE}00" # just update date
      fi
    fi
    /bin/sed -i -e "s/^\(\s*\)[0-9]\{0,\}\(\s*;\s*${NEEDLE}\)$/${serial}/" ${REPO_PATH}/${ZONE}
    echo "${ZONE}: "
    grep "; ${NEEDLE}$" ${REPO_PATH}/${ZONE}
done

Nota: você não deve fazer mais de 99 modificações durante um único dia:)

    
por 22.01.2016 / 19:15

Tags