Network/Juniper/Survival guide

De MonPtitSite
Révision datée du 24 novembre 2022 à 18:08 par Admin (discussion | contributions) (Page créée avec « {{MediaWiki}} <br> {{FOND_BLEU|Juniper- '''Petit guide de survie''' pour un newbie ...}} = Sites Références = * [https://www.juniper.net/documentation/us/en/software/j… »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Sauter à la navigation Sauter à la recherche
Accueil SysAdmin Hobbies                  


Juniper- Petit guide de survie pour un newbie ...


Sites Références

Notes

There are several acronyms for interface types and components:

  * IFD – Interface Physical Device
  * IFL – Interface Logical Device
  * IFF – Address Family
  * IFA – Address Entry

Common interface names are:

   * ge – Gigabit ethernet
   * xe – 10G ethernet
   * et – 100G ethernet
   * ae – aggregated ethernet (LAG/etherchannel)
   * vlan or irb – Logical interface based on VLAN


SFP’s can be of different speeds (eg, one may be 1G, and another may be 10G). So be aware that the interface names may change based on the SFP used.

The interface naming convention is type-x/y/z

   Type is ge, xe, etc
   x – FPC (aka linecard)
   y – module or slot
   z – port number

There are several names for management interfaces. Each platform may use different names. These include fxp0, em0, me0, and vme0. Some of these are physical, and others are virtual.

Some interfaces, such as pimd, pime, dsc, ipip, and gre, are special interfaces that are used for special purposes.

An unnumbered interface does not have an IP address. This helps conserve IP addresses.

All interfaces are configured with a unit. This contains logical interface information, like addressing. Sometimes this is used to create sub-interfaces. Physical properties (duplex, link speed, etc) are not configured in the unit.

Each unit may have one or more family. This is where the address is applied. For example, the inet family is for IPv4 addressing.

Addresses can be primary, preferred, or secondary. Primary addresses are used for locally sourced (broadcast or multicast) traffic, destined to a remote subnet. Preferred addresses are for locally sourced traffic to the local subnet.

Configuring voice ports means three main steps:

  * Configuring a voice VLAN
  * Configuring PoE
  * Configuring LLDP-MED

Junos supports regex during configuration.


[user@demo project2]$ tree -F group_vars
group_vars/
├── db_servers/
│ ├── 3.yml
│ ├── a.yml
│ └── myvars.yml
├── lb_servers/
│ ├── 2.yml
│ ├── b.yml
│ └── something.yml
└── web_servers/
└── nothing.yml


Command Summary

Juniper OS Command summary
Command Mode Description
show interfaces terse operational Get a simplified view of all interfaces on the system
show interfaces [extensive] operational Get interface statistics
ansible_port Port utilisé par Ansible pour se connecter à l'hôte géré. Pour le plug-in de connexion par SSH (par défaut), la valeur par défaut est 22.
ansible_user Utilisateur dont se sert Ansible pour se connecter à l'hôte géré. Le comportement par défaut d'Ansible est de se connecter à l'hôte géré à l'aide du même nom d'utilisateur que celui qui exécute le playbook Ansible sur le noeud de contrôle.
ansible_become_user Une fois qu'Ansible s'est connecté à l'hôte géré, il bascule vers cet utilisateur en utilisant absible_become_method (qui est sudo par défaut). Il se peut que vous deviez vous procurer des informations d'identification d'authentification de quelque façon que ce soit.
ansible_python_interpreter Chemin d'accès à l'exécutable Python qu'Ansible doit utiliser sur l'hôte géré. Sur Ansible 2.8 et versions ultérieures, cette valeur par défaut est auto, qui sélectionne automatiquement un interpréteur Python sur l'hôte exécutant le playbook en fonction du système d'exploitation qu'il exécute. Ainsi, il n'est plus autant nécessaire d'utiliser ce paramètre que dans les versions antérieures d'Ansible.


Variables utilisées lors d'exécution de playbooks

Lorsqu'un play est en cours d'exécution, un certain nombre de variables et de faits peuvent être utilisés pour identifier le nom de l'hôte géré actuel qui exécute une tâche :

Variables Ansible spécifiques à l'exécution
Variable Description
inventory_hostname Nom de l'hôte géré en cours de traitement, extrait de l'inventaire.
ansible_host Adresse IP ou nom d'hôte réel qui a été utilisé pour se connecter à l'hôte géré, comme indiqué

précédemment.

ansible_facts ['nom d'hôte'] Nom court (non qualifié) de l'hôte collecté comme un fait de l'hôte géré.
ansible_facts ['fqdn'] Nom de domaine complet de l'hôte collecté comme un fait de l'hôte géré.
ansible_play_hosts liste de tous les hôtes qui n'ont pas encore échoué au cours du play actuel (et qui, par conséquent, sera utilisée

pour les tâches restantes du play).|}

Penser ré-utilisabilité !

Les rôles permettent de créer des playbooks simples et de réutiliser du code commun à plusieurs projets. Un role doit porter sur un objectif ou une fonction spécifique. Idéalement, il est préférable de créer des rôles génériques configurables par le biais de variables. Ces variables sont le plus souvent définies par défaut dans le fichier YAML roles/[nom_role]/default/main.yml De cette façon, un rôle disposant de son propre paramétrage et ensemble de tâches peut facillement être intégré dans un autre playbook.

Si un playbook doit modifier le contenu d'une variable définie par un rôle, il suffit :

Exemple


- hosts: webservers
  vars:
    apache2_config: true
    apache2_default_port: 8000
  roles:
    ansible-apache2

Ce playbook utilise le rôle ansible-apache2 en modifiant 2 variables utilisées par ce rôle : apache2_config & apache2_default_port.

A l'éxécution de ce playbook, le service apache2 sera installé sur les serveurs webservers pour écouter sur le port 8000/tcp.

Exécution centralisée des playbooks

Pour contrôler l'accès aux systèmes et auditer l'activité d'Ansible, il est nécessaire d'envisagez l'utilsiation d'un serveur de contrôle dédié à partir duquel tous les playbooks Ansible sont exécutés. Les administrateurs système doivent toujours disposer de leurs propres comptes sur le système, ainsi que des informations d'identification permettant de se connecter aux hôtes gérés et d'augmenter les privilèges, si nécessaire. Lorsqu'un administrateur système cesse de travailler sur le projet, sa clé SSH peut être supprimée du fichier authorized_keys de l'hôte géré et ses privilèges de commande sudo peuvent être révoqués, sans répercussion sur les autres administrateurs.

Ce serveur central peut avantageusement héberger les services awx ou la version supportée par Red Hat Ansible Tower

Tester régulièrement

Il est bien évident qu'il faut tester les playbooks aussi bien au cours de la phase de développement que pendant l'exécution des playbooks eux-même. En effet, Ansible offre cette possibilité de s'auto-valider en définissant des tâches spécifiques permettant de vérifier une étape précédente d'un playbook.

Test des résultats des tâches

Si on a besoin de confirmer la réussite d'une tâche, vérifiez le résultat de la tâche au lieu de faire confiance au code de retour du module. Il existe plusieurs moyens de valider une tâche, en fonction du module concerné.


Exemple :

- Start web server
  service:
    name: httpd
    status: started
- name: Check web site from web server
  uri:
    url: http://{{ ansible_fqdn }}
    return_content: yes
  register: example_webpage
  failed_when: example_webpage.status != 200


Utilisation de block/rescue pour effectuer une récupération ou une restauration

La directive block est utile pour regrouper des tâches ; lorsqu'elle est associée à la directive rescue, elle est utile lorsqu'il s'agit d'effectuer une récupération après des erreurs ou des pannes.

Exemple :


- block:
  - name: Check web site from web server
    uri:
      url: http://{{ ansible_fqdn }}
      return_content: yes
    register: example_webpage
    failed_when: example_webpage.status != 200
  rescue:
    - name: Restart web server
      service:
        name: httpd
        status: restarted



Outils de test

  • ansible-playbook --syntax-check : pour vérifier la syntaxe d'un playbook (sans l'exécuter)
  • ansible-playbook --check : Exécute un playbook en mode "vérification"
NOTE
Cette vérification ne garantit pas une précision parfaite, étant donné que le playbook peut avoir besoin d'exécuter réellement certaines tâches avant que les tâches ultérieures du playbook ne fonctionnent correctement. Certaines tâches peuvent être marquées avec la directive check_mode: no. Ces tâches s'exécutent même en mode vérification.


NOTE
Il existe d'autres outils. Par exemple :

L'outil ansible-lint analyse un playbook et recherche les problèmes éventuels. Tous les problèmes signalés n'interrompront pas forcément le fonctionnement du playbook, mais les problèmes signalés peuvent indiquer la présence d'une erreur. L'outil yamllint analyse un fichier YAML et tente d'identifier les problèmes liés à la syntaxe YAML. Cet outil n'a pas une connaissance directe d'Ansible, mais il peut intercepter des problèmes potentiels de syntaxe YAML.