.png)
Tengo que crear una canalización para automatizar la creación, implementación y actualización del archivo de configuración para dispositivos de red (switch-routers-firewall, principalmente cisco). Hay muchas maneras en que pienso hacer el trabajo pero dudo. El proceso sería leer un archivo de datos, buscar una cadena (ejemplo: el nombre de host contiene "NR") y, si está bien, elegir la plantilla adecuada en una biblioteca para crear el archivo de configuración.
Lo he intentado con ansible pero las cosas no me quedan claras. La otra forma es la biblioteca jinja y he probado algo como esto.
#! /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))
En este caso, ¿cómo podría cargar un archivo de plantilla desde una biblioteca (y con respecto a la cadena que quiero encontrar en mi archivo de datos)?
Respuesta1
P:"Lea un archivo de datos, busque una cadena (ejemplo: el nombre de host contiene "NR")... elija la plantilla adecuada en una biblioteca para crear el archivo de configuración."
Por ejemplo, dados los archivos de datos
> 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
y las plantillas
> 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
la obra de abajo
- 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') }}"
da
> 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