【Ansible×NW 자동화】template 모듈로 NW 기기의 설정을 만들고 싶다

소개



<버전>
ansible 2.9.1

template 모듈에서는 jinja2라는 템플릿 엔진을 사용하여 파일을 생성할 수 있습니다.
이번에는이 모듈을 사용하여 junos 장비의 구성 파일을 만듭니다.

필요한 파일



(1) 변수 파일(yml)

sample.yml
---
hostname: router1
intfs:
  - name: et-0/0/0
    vlan: 10
    address: 10.0.0.1
    mask: 30
  - name: et-0/0/2
    vlan: 20
    address: 10.0.0.5
    mask: 30
static:
  route: 10.1.1.0/24
  next_hop: 172.16.0.254

(2)template 파일(j2)

sample.j2
set system host-name {{ hostname }}
{% for intf in intfs %}
set interfaces {{ intf.name }} vlan-tagging
set interfaces {{ intf.name }} unit 0 vlan-id {{ intf.vlan }}
set interfaces {{ intf.name }} unit 0 family inet address {{ intf.address }}/{{ intf.mask }}
{% endfor %}
set routing-options static route {{ static.route }} next-hop {{ static.next_hop }}

<주의>
{%- for intf in intfs -%}와 같이 {} 안에 하이픈을 넣을 수 있지만,
이렇게 쓰면 행끼리가 연결되어 버리므로 주의해 주세요.
참고 기사 - 【Ansible】하이픈의 위치에 의한 개행의 변화~template 모듈편~

(3) Playbook
실제로는, 읽어들이는 변수 파일(sample.yml)을 기기마다 준비하는 것이 좋다고 생각합니다만
이번은 생략하고 있습니다.

template_test.yml
---
- name: template TEST
  hosts: localhost
  gather_facts: no
  tasks:
    - name: 'include vars'      # task1 - 変数ファイルを読み込む
      include_vars: sample.yml  # 機器ごとに用意するなら、{{ inventory_hostname }}.ymlとかにする

    - name: 'template'          # task2 - 変数ファイルを元に設定ファイルを作成する
      template:
        src: sample.j2   # j2はなるべ複数の機器で共通にした方管理がしやすい
        dest: result.txt # 機器ごとに作成するなら、{{ inventory_hostname }}.confとかにする

실행 결과



모듈을 사용해 작성하고 있으므로, 기재 미스가 일어나지 않는 것이 편리한 곳이군요.

출력 1
set system host-name router1
set interfaces et-0/0/0 vlan-tagging
set interfaces et-0/0/0 unit 0 vlan-id 10
set interfaces et-0/0/0 unit 0 family inet address 10.0.0.1/30
set interfaces et-0/0/2 vlan-tagging
set interfaces et-0/0/2 unit 0 vlan-id 20
set interfaces et-0/0/2 unit 0 family inet address 10.0.0.5/30
set routing-options static route 10.1.1.0/24 next-hop 172.16.0.254

설정 내용의 수정이 있었을 경우의 차이 비교



「(1) 변수 파일(yml)로 차분 비교한 경우」와 「(2) 설정 파일로 차분 비교한 경우」에서,
WinMerge의 결과를 올렸습니다.
수정이 있었을 때, (1)에서는 수정이 2곳에서 끝납니다만, (2)를 그대로 수정하려고 하면(자)
4개소 수정이 필요합니다. 수정 부분의 차이는 설정 내용이 복잡해질수록 넓어지기 때문에
(1)의 장점이 전해진다고 생각합니다.

・(1) 변수 파일(yml)로 차분 비교했을 경우


・(2) 설정 파일 파일로 차분 비교한 경우
interface의 변경(et-0/0/2 → et-0/0/3)의 변경은 3행에 걸쳐 필요하므로, 수정 미스가 발생하기 쉽다.


요약



template 모듈에서 NW 기기의 config를 설정하는 이점은 다음과 같습니다.
・NW 기기의 설정을 모르더라도 설정 파일을 작성할 수 있다
・변수 파일이 yml 형식이므로 변경시의 차분 비교가 하기 쉽다
・설정이 변경된 경우, 변수 파일(yml)이나 template 파일(j2)만을 변경하면
좋기 때문에 기재 실수가 줄어든다 & 변경에 시간이 걸리지 않는다
· 변수 파일 (yml)과 template 파일 (j2)이 같으면 매번 동일한 결과를 얻을 수 있습니다.

관련 기사



【Ansible】하이픈의 위치에 의한 개행의 변화~template 모듈편~

좋은 웹페이지 즐겨찾기