J'ai un fichier texte brut routers
dans le système de versioning qui contient les noms d'hôte séparés par des sauts de ligne:Comment préparer un inventaire, un playbook et un fichier de configuration utilisables par Ansible module en utilisant Ansible/Jinja2?
$ cat routers
r1
r2
r3
$
J'ai aussi des modèles de configuration des routeurs dans le système versioning comme fichiers texte. Par exemple:
$ cat system:syslog
system {
syslog {
host 10.10.10.153 {
any notice;
daemon info;
}
}
}
$
Je ne peux pas modifier le format de ces deux types de fichiers car ils sont utilisés par d'autres systèmes. Maintenant, ce dont j'ai besoin, est de créer un fichier d'inventaire Ansible à partir de ce fichier routers
, fichier de configuration pour le module Ansible junos_config du modèle de configuration des routeurs et enfin playbook Ansible dans YAML. En ce moment j'utilise un script bash pour ça. Simplifié, il faut quatre arguments:
- fichier
routers
fichier modèle de configuration
- (par exemple
system:syslog
décrit ci-dessus) - nombre de billets dans le système de billetterie (entier)
- chaîne de commentaire (ceci est utilisé dans routeur pour décrire le changement)
Basé sur les exemples ci-dessus, le fichier routers
est converti en inv suivant fichier entory:
junipers ansible_connection=local
[junipers]
r1
r2
r3
fichier system:syslog
est converti en un nom de fichier <ticket_nr>.cfg
avec le contenu suivant:
groups {
replace: system:syslog {
system {
syslog {
host 10.10.10.153 {
any notice;
daemon info;
}
}
}
}
}
Fondamentalement, le script bash fait quelque chose comme ceci:
cat << EOF
groups {
replace: ${templatefile##*/} {
EOF
sed 's/^/ /' "$templatefile"
cat << EOF
}
}
EOF
Et PlayBook enfin fichier est généré:
- hosts: junipers
remote_user: admin
tasks:
- name: Change routers conf.
ignore_errors: yes
junos_config:
comment: "<comment>"
timeout: 60
port: 22
src: <ticket_nr>.cfg
src_format: text
replace: yes
<comment>
et <ticket_nr>
sont des arguments donnés au script bash. En outre, ce script bash vérifie la dernière révision des fichiers et modèles de configuration routers
mentionnés.
Maintenant, est-il une meilleure façon de faire tout cela sans bash? Bien que cela fonctionne, je pense que je me trompe et je compte beaucoup sur bash. Est-il possible de faire tout cela dans Ansible/Jinja2?