%EC%9D%84%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EA%B5%AC%EC%84%B1%20%ED%8C%8C%EC%9D%BC%20%EC%9E%90%EB%8F%99%20%EC%83%9D%EC%84%B1.png)
네트워크 장치(스위치-라우터-방화벽, 대부분 cisco)에 대한 생성-배포 및 구성 파일 업데이트를 자동화하기 위해 파이프라인을 생성해야 합니다. 일을 하는 방법에는 여러 가지가 있다고 생각하지만 주저합니다. 프로세스는 데이터 파일을 읽고, 문자열(예: 호스트 이름에 "NR"이 포함되어 있음)을 검색하고, 괜찮으면 구성 파일을 생성하기 위해 라이브러리에서 좋은 템플릿을 선택하는 것입니다.
나는 ansible로 시도했지만 상황이 명확하지 않습니다. 다른 방법은 jinja library이고 나는 이와 같은 것을 시도했습니다.
#! /usr/bin/python
import sys
from jinja2 import Template
template = """ hostname {{hostname}}
no ip domain lookup
ip domain name local.lab
ip name-server {{name_server_pri}}
ip name-server {{name_server_sec}}
ntp server {{ntp_server_pri}} prefer
ntp server {{ntp_server_sec}} """
data= {
"hostname": "core-test-01",
"name_server_pri": "1.1.1.1",
"name_server_sec": "8.8.8.8",
"ntp_server_pri": "0.pool.ntp.org",
"ntp_server_sec": "1.pool.ntp.org",
}
j2_template = Template(template)
print(j2_template.render(data))
이 경우 라이브러리에서 템플릿 파일을 어떻게 로드할 수 있습니까(그리고 내 데이터 파일에서 찾고 싶은 문자열과 관련하여)?
답변1
큐:"데이터 파일을 읽고, 문자열을 검색합니다(예: 호스트 이름에 "NR"이 포함되어 있음). 구성 파일을 생성하려면 라이브러리에서 좋은 템플릿을 선택하세요."
예를 들어, 데이터 파일이 주어지면
> ssh admin@test_11 cat /tmp/hostname
hostname-NR
> ssh admin@test_12 cat /tmp/hostname
hostname-NS
> ssh admin@test_13 cat /tmp/hostname
hostname-NX
그리고 템플릿
> cat templates/nr.j2
# template nr.j2
> cat templates/ns.j2
# template ns.j2
> cat templates/nt.j2
# template nt.j2
> cat templates/default.j2
# template default.j2
아래 연극
- hosts: test_11,test_12,test_13
vars:
templates_lib:
- {contains: "{{ my_hostname is search('NR') }}", template: nr.j2}
- {contains: "{{ my_hostname is search('NS') }}", template: ns.j2}
- {contains: "{{ my_hostname is search('NT') }}", template: nt.j2}
tasks:
- command: cat /tmp/hostname
register: result
- template:
src: "{{ my_template) }}"
dest: /tmp/test.conf
vars:
my_hostname: "{{ result.stdout }}"
my_template: "{{ templates_lib|
selectattr('contains')|
map(attribute='template')|
first|default('default.j2') }}"
준다
> ssh admin@test_11 cat /tmp/test.conf
# template nr.j2
> ssh admin@test_12 cat /tmp/test.conf
# template ns.j2
> ssh admin@test_13 cat /tmp/test.conf
# template default.j2