.png)
Eu tenho que criar um pipeline para automatizar a criação-implantação e atualizar o arquivo de configuração para dispositivos de rede (switch-roteadores-firewall, principalmente Cisco). Penso em fazer o trabalho de muitas maneiras, mas hesito. O processo seria ler um arquivo de dados, pesquisar uma string (exemplo:hostname contém "NR") e se estiver OK, escolher o modelo adequado em uma biblioteca para criar o arquivo de configuração.
Eu tentei com ansible, mas as coisas não estão claras para mim. A outra maneira é a biblioteca jinja e eu tentei algo assim
#! /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))
Nesse caso, como eu poderia carregar um arquivo de modelo de uma biblioteca (e em relação à string que desejo encontrar no meu arquivo de dados)?
Responder1
P:"Leia um arquivo de dados, pesquise uma string (exemplo:hostname contém "NR") ... escolha o modelo adequado em uma biblioteca para criar o arquivo de configuração."
Por exemplo, dados os arquivos de dados
> 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
e os modelos
> 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
a peça abaixo
- 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') }}"
dá
> 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