Table of Contents

Использование shell для автоматизации задач на Juniper SRX cluster

Введение.

Обновление баз IDP на Juniper SRX cluster представляло из себя набор ручных процедур (До выхода версии Junos 12.1).
См. статью 1 и статью 2. Встала проблема автоматизации.

Платформы на базе JUNOS предоставляют большое количество возможностей по автоматизации используя: - shell
- perl
- python
- JUISE
- и т.д

Полный список тут. В данной статье будет показан пример автоматизации задачи с использование shell.

Решение.

Решение состоит из одного скрипта на каждом из узлов, запускаемого по cron :
В скрипте на каждом из узлов не забудьте поставить соответсвующие X и Y.

di.sh (для редактирования есть vi)

#!/bin/sh
#download and install DB script
#check primary node
act_node=`/usr/sbin/cli show chassis cluster status | /usr/bin/grep nodeX | /usr/bin/awk '{print $3}'`
#where X node number that start script. For node0 set X=0 for node1 set X=1
     count=0
     #check for redundancy group 0
     for x in $act_node 
     do active_node=$x
     count=`expr $count + 1`
     if [ $count -eq 1 ]
         then
          break 1
     fi
     done
     if [ "$active_node" = "primary" ]
        then
        #check new version of IDP DB 
        chk_lver=`/usr/sbin/cli show security idp security-package-version node X | /usr/bin/grep Attack | /usr/bin/awk '{print $3}' | sed -e 's/version://g'` 
        #where X node number that start script. For node0 set X=0 for node1 set X=1
        chk_sver=`/usr/sbin/cli request security idp security-package download check-server | /usr/bin/grep "Version" | /usr/bin/awk '{print $2}' | sed -e 's/info://g'`
        if [ "$ch_lver" != "$chk_sver" ]        
        then
        /usr/sbin/cli request security idp security-package download
        /bin/sleep 3600
        chk_dstatus=`/usr/sbin/cli request security idp security-package download status | /usr/bin/grep "Successfully downloaded"`
          if [  ! -z "$chk_dsatus" ]        
          then
          /usr/sbin/cli request security idp security-package install node X 
          /usr/sbin/cli request security idp security-package install policy-templates node X 
          #where X node number that starts script. For node0 set X=0 for node1 set X=1
          /bin/rm -rf nodeY:/var/db/idpd/sec-download/*
          /bin/sleep 180
          /bin/rcp -r -T /var/db/idpd/sec-download/* node1:/var/db/idpd/sec-download/
          /bin/sleep 180
          /usr/sbin/cli request security idp security-package install node Y 
          /usr/sbin/cli request security idp security-package install policy-templates node Y                       
          #where Y second node number. For node0 that starts script set Y=1 for node1 set Y=0
          fi
        fi
     fi

Скрипт необходимо положить на каждый и двух узлов кластера в директорию /var/tmp

Запустить на каждом узле кластера cron.
При работе с primary узла (в нашем случае primary - node0):

%chmod +x /var/tmp/di.sh
%crontab -e
1 3 * * * sh /var/tmp/di.sh

Заходим на второй узел:

%rlogin -Jk -T node1
%chmod +x /var/tmp/di.sh
%crontab -e
1 3 * * * sh /var/tmp/di.sh

PS.

Если перед вами стоит задача автоматизации с необходимостью редактирования конфигурации на клаcтере, помните, что все команды по замене конфигурации и commit должны проходить в рамках одной команды (сесии).

Пример синтаксиса скрипта:

#!/bin/sh
echo "configure
delete routing-instances EXT_ROUTER protocols bgp group ISP1 export ASPREPAND
set routing-instances EXT_ROUTER protocols bgp group ISP1 export ISP-out-deny
commit" | /usr/sbin/cli
  

Об авторе

Profile автора