Procédure de la construction de l'environnement au test de fonctionnement de testinfra, un outil de test d'environnement de serveur réalisé par Python

Création de l'environnement de la bibliothèque de test d'infrastructure Python Testinfra

Contexte

En interne, les tests de serveur semblent être effectués manuellement, je voudrais donc introduire un mécanisme d'automatisation pour améliorer l'efficacité. Dans mon ancien lieu de travail, j'ai essayé d'utiliser Ruby's Serverspec et Infrataster comme outils de test de serveur, mais je voulais les unifier avec les outils de gestion de la configuration de Python, Ansible et Fabric. Quand je l'ai recherché, j'ai trouvé un outil de test appelé Testinfra. Même sur le site officiel, Testinfra a été écrit comme un outil comme Ruby's Serverspec, alors j'ai essayé de l'utiliser. Cette fois, j'ai décrit la procédure de la partie d'introduction de la construction de l'environnement au test de fonctionnement.

1. Procédure d'installation

1-1. Conditions préalables

L'environnement suivant est créé

  1. pip est installé
  2. Il doit y avoir au moins deux serveurs pouvant être connectés par SSH

1-2. Flux

  1. Installez testinfra
  2. Paramètres de connexion ssh (côté client)
  3. paramètre de connexion ssh (côté serveur)
  4. Créer un code de test
  5. Exécutez le code de test (hôte local)
  6. Exécution du code de test (hôte distant)

2. Procédure

2-1. Installation de testinfra

$ pip install testinfra

2-2. Paramètre de connexion ssh (côté client)

  1. Créez une clé privée et une clé publique
$ cd $HOME/.ssh
$ ssh-keygen -t rsa -f test_server
  1. Transférez la clé publique vers le serveur de destination de la connexion distante avec scp
$ scp test_server.pub [email protected]:/var/tmp/
  1. Après avoir terminé l'étape 2 de "3. Configuration de la connexion ssh (côté serveur)", essayez la connexion ssh pour l'authentification par clé.
$ ssh -i $HOME/.ssh/test_server [email protected]
  1. Créez ssh_config
$ vi $HOME/.ssh/ssh_config

Ici, le nom d'hôte du serveur distant est "redmine"

Host redmine
  HostName     192.168.1.31
  Port         22
  User         permit
  IdentityFile ~/.ssh/test_server

2-3. Paramètre de connexion ssh (côté serveur)

  1. Créez un compte pour la connexion ssh Cette fois, j'ai créé un utilisateur "permit"
$ useradd -m permit -G wheel
$ passwd permit
  1. Écrivez la clé publique du client dans authorised_keys
$ mkdir $HOME/.ssh
$ mv /var/tmp/test_server.pub $HOME/.ssh/
$ cd $HOME/.ssh/
$ cat test_server.pub >> authorized_keys
$ chmod 600 authorized_keys
$ rm test_server.pub

2-4. Création du code de test

  1. Créez un code de test
$ vi test.py

Exemple de code de test

def test_passwd_file(File):
    passwd = File("/etc/passwd")
    assert passwd.contains("root")
    assert passwd.user == "root"
    assert passwd.group == "root"
    assert passwd.mode == 0o644

2-5. Exécution du code de test (hôte local)

  1. Test de l’hôte local
$ testinfra -v test.py
  1. Confirmation du résultat de l'exécution
=================================== test session starts ====================================
platform linux2 -- Python 2.7.9, pytest-3.0.1, py-1.4.31, pluggy-0.3.1 -- /usr/local/bin/python2.7
cachedir: .cache
rootdir: /root, inifile: 
plugins: testinfra-1.4.2, pep8-1.0.6
collected 1 items 

test.py::test_passwd_file[local] PASSED

================================== pytest-warning summary ==================================
WP1 None Modules are already imported so can not be re-written: testinfra
======================= 1 passed, 1 pytest-warnings in 0.03 seconds ========================

2-6. Exécution du code de test (hôte distant)

  1. Test de l’hôte distant
$ testinfra test.py --connection=ssh --hosts=permit@redmine --ssh-config=/root/.ssh/ssh_config
  1. Confirmation du résultat de l'exécution
=================================== test session starts ====================================
platform linux2 -- Python 2.7.9, pytest-3.0.1, py-1.4.31, pluggy-0.3.1 -- /usr/local/bin/python2.7
cachedir: .cache
rootdir: /root, inifile: 
plugins: testinfra-1.4.2, pep8-1.0.6
collected 1 items 

test.py::test_passwd_file[ssh://redmine] PASSED

================================== pytest-warning summary ==================================
WP1 None Modules are already imported so can not be re-written: testinfra
======================= 1 passed, 1 pytest-warnings in 0.66 seconds ========================

3. Référence

Recommended Posts

Procédure de la construction de l'environnement au test de fonctionnement de testinfra, un outil de test d'environnement de serveur réalisé par Python
Procédure pour convertir un fichier python en exe à partir de la construction de l'environnement Ubunts
Impressions de toucher Dash, un outil de visualisation de données réalisé par python
Procédure du développement AWS CDK (Python) à la construction de ressources AWS * Pour les débutants
Envoyer un message de Slack à un serveur Python
De 0 à la construction de l'environnement de développement Django à l'exploitation de base
De la construction d'environnement Python à la construction d'environnement virtuel avec anaconda
Je viens de créer un outil pour afficher facilement les données sous forme de graphique par opération GUI
Construction de l'environnement de développement Python 2020 [De l'installation de Python à l'introduction à la poésie]
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Résumé de la construction de Python 3.4. * De la source à la création d'un environnement informatique scientifique
Je veux démarrer beaucoup de processus à partir de python
J'ai créé un outil pour créer un nuage de mots à partir de wikipedia
Procédure de construction de l'environnement python Anaconda3
Procédure de communication Ajax de HTML à JSON sur le serveur API
Comment développer dans un environnement virtuel Python [Memo]
Créer un environnement Python et transférer des données vers le serveur
[Python] Comment créer une table à partir d'une liste (opération de base de création de table / changement de nom de matrice)
Script Python qui peut vérifier l'état du serveur à partir du navigateur
Construction de l'environnement de python2 & 3 (OSX)
Créer et tester un environnement CI pour plusieurs versions de Python
De la création d'un environnement Python pour les personnes inexpérimentées à Hello world
De l'installation d'Ansible à la création d'un environnement Python dans l'environnement virtuel de Vagrant
Préparez un environnement de test de charge distribué avec l'outil de test de charge Python Locust
Passer la liste de Python vers C ++ par référence dans pybind11
Tout, de la création d'un environnement Python à son exécution sous Windows
Construction d'environnement de python et opencv
[Django] Mémorandum de procédure de construction d'environnement
Construire un environnement pour python3.8 sur Mac
De Ubuntu 20.04 introduction à la construction d'environnement
Comportement de python3 par le serveur de Sakura
Configurer un serveur SMTP factice avec Python et vérifier le fonctionnement de l'envoi depuis Action Mailer
Construisez un serveur de messagerie Postfix, démarrez le code Python déclenché par la réception du courrier et envoyez le courrier à Slack (édition de l'environnement local)
J'ai essayé de communiquer avec un serveur distant par communication Socket avec Python.
J'ai créé un outil pour parcourir automatiquement plusieurs sites avec Selenium (Python)
Créez un outil qui secoue automatiquement furigana avec html en utilisant Mecab de Python3
Migration de Python2 vers Python3 (Python2 est reconstruit comme un environnement virtuel et coexiste)
Essayez de mettre en place un environnement de test Vim assez sérieusement (pour Python)
De la construction de ré-environnement de Python au dessin graphique (sur le code Visual Studio)
J'ai fait un programme pour vérifier la taille d'un fichier avec Python
J'ai essayé de vérifier le résultat du test A / B avec le test du chi carré
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
Procédure de construction de l'environnement de développement Python (anaconda) (SpringToolsSuites) _2020.4
Procédure de construction de l'environnement de projet Python (pour Windows)
[Python] Road to snakes (1) Construction de l'environnement
Je veux créer un environnement Python
Procédure de construction de l'environnement: Ubuntu + Apache2 + Python + Pyramid
Procédure de construction du serveur de développement Python (AWS + Anaconda)
Ajouter un environnement virtuel Python à VSCode
Un manuel pour les débutants réalisé par des débutants Python
J'ai fait un outil pour estimer le temps d'exécution de cron (+ débuts de PyPI)
Procédure de construction de l'environnement pour faire fonctionner Chrome sans installer Python sur Windows (en utilisant du sélénium)
J'ai créé une bibliothèque pour faire fonctionner la pile AWS CloudFormation à partir de CUI (Python Fabric)
J'ai créé un outil pour informer Slack des événements Connpass et en ai fait Terraform
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
Connexion SSH au serveur cible à partir de Windows en un clic sur un raccourci
Créez un environnement python pour apprendre la théorie et la mise en œuvre de l'apprentissage profond
J'ai fait un module en langage C qui filtre les images chargées par Python