criação automatizada de um arquivo de configuração com ansible (ou outra coisa)

criação automatizada de um arquivo de configuração com ansible (ou outra coisa)

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') }}"

> 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

informação relacionada