Category Archive DEVOPS

ByPatrick

Analyse du Script PowerShell pour la Comparaison de Données SQL et l’Envoi d’Emails

Ce script PowerShell est conçu pour se connecter à une base de données SQL, extraire des données, les comparer avec des données antérieures, et envoyer un email avec les modifications trouvées en pièce jointe. Voici une analyse détaillée de chaque section du script :

Configuration des Variables

$File1="C:\SQLData.csv"
$File2="C:\SQLData.old"
$Result="c:\result.txt"

$Database = "XXXXXXX"
$Server = " "

$SMTPServer = "smtp"
  • Description : Cette section configure les chemins des fichiers CSV pour les données actuelles et antérieures, le fichier de résultats, le nom de la base de données, le nom du serveur SQL, et le nom du serveur SMTP pour l’envoi d’emails.

Nettoyage des Fichiers Existants et Renommage

remove-item $File2
remove-item $Result
Rename-Item $File1 $File2
  • Description : Le script commence par supprimer les fichiers $File2 (données antérieures) et $Result (résultat de la comparaison), puis renomme le fichier $File1 (données actuelles) en $File2 pour le considérer comme les données antérieures lors de la prochaine exécution.

Connexion à SQL et Extraction des Données

$SqlQuery = "SELECT filename, file_description FROM dbo.item_table"
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection

$SqlConnection.ConnectionString = "Data Source=$Server;Initial Catalog=$Database;User Id=XXXXXX;Password=XXXXXXX;"

$SqlCmd = New-Object System.Data.SqlClient.SqlCommand

$SqlCmd.CommandText = $SqlQuery

$SqlCmd.Connection = $SqlConnection

$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter

$SqlAdapter.SelectCommand = $SqlCmd

$DataSet = New-Object System.Data.DataSet

$nRecs = $SqlAdapter.Fill($DataSet)
$nRecs | Out-Null
  • Description : Cette partie configure une requête SQL pour sélectionner des colonnes spécifiques d’une table, établit une connexion à la base de données avec une chaîne de connexion, et utilise un SqlDataAdapter pour remplir un DataSet avec les résultats de la requête. Le nombre de lignes affectées est stocké dans $nRecs et ensuite redirigé vers Out-Null pour éviter qu’il soit affiché.

Exportation des Données vers un Fichier CSV et Comparaison

$objTable = $DataSet.Tables[0]
$objTable | Export-CSV $File1
Compare-Object  $(Get-Content($File1))  $(Get-Content($File2)) > $Result
  • Description : Le script extrait la première table du DataSet et l’exporte vers un fichier CSV $File1. Ensuite, il utilise Compare-Object pour comparer le contenu des fichiers CSV actuel et antérieur, et redirige la sortie vers le fichier $Result.

Envoi d’un Email avec les Résultats de la Comparaison

$Mailer = new-object Net.Mail.SMTPclient($SMTPServer)
$From = 
$To = 
$Subject = "Modification"
$Body = "Bonjour, vous trouverez en pièce jointe les modifications apportées"
$Msg = new-object Net.Mail.MailMessage($From,$To,$Subject,$Body)
$Msg.IsBodyHTML = $False
$Attachment = new-object Net.Mail.Attachment($Result)
$Msg.attachments.add($Attachment)
$Mailer.send($Msg)
  • Description : Cette section configure un objet SMTPclient avec le serveur SMTP, définit les détails de l’email (expéditeur, destinataires, sujet, corps), configure le message pour ne pas interpréter le corps comme du HTML, attache le fichier de résultats à l’email, et envoie l’email via le serveur SMTP configuré.

Points à Noter

  • Le script utilise des informations de connexion à la base de données (User Id et Password) qui devraient être sécurisées. Il est recommandé d’utiliser des méthodes plus sécurisées pour stocker et récupérer ces informations, comme les services de secrets ou les variables d’environnement.
  • Le nom du serveur SQL ($Server) est vide et doit être rempli avec le nom du serveur cible.
  • Le script suppose que le serveur SMTP n’exige aucune authentification pour l’envoi d’emails. Si une authentification est nécessaire, le script doit être modifié pour inclure les informations d’identification appropriées.
  • Le script utilise une encodage particulier pour les caractères spéciaux dans le corps de l’email (è au lieu de è, etc.). Cela pourrait être dû à un problème d’encodage lors de la création du script, et il est préférable de corriger ces caractères pour une meilleure lisibilité.

Ce script est un exemple de workflow d’extraction de données, de comparaison, et de notification par email, automatisant le processus de surveillance des modifications dans une base de données SQL.

ByPatrick

Ajout d’un Raspberry P3 dans prometheus

Bonjour,
aujourd’hui, j’ai ajouté mon raspberry PI 3 dans prometheus pour monitorer la température par grafana

On commence par le raspberry

wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-armv6.tar.gz
tar -xvzf node_exporter-1.1.2.linux-armv6.tar.gz
sudo cp node_exporter-1.1.2.linux-armv6/node_exporter /usr/local/bin
sudo chmod +x /usr/local/bin/node_exporter
sudo useradd -m -s /bin/bash node_exporter
sudo mkdir /var/lib/node_exporter
sudo chown -R node_exporter:node_exporter /var/lib/node_exporter
sudo vi /etc/systemd/system/node_exporter.service
sudo systemctl daemon-reload
sudo systemctl enable node_exporter.service
sudo systemctl start node_exporter.service

Puis je me connecte au container docker

docker exec -it MONCONTAINER sh
vi /etc/prometheus/prometheus.yml

ByPatrick

jenkins docker windows node

Finalement, ça n’a pas été bien compliqué.

D’abord, j’ai construit un container qui partage aussi le port 5000

docker run -d --name jenkins -p 8082:8080 -p 50000:50000 jenkins/jenkins:lts

ensuite, je suis allé dans le container, (après le setup bien sur)

Et j’ai lancé le composant depuis la page web sur un pc sur lequel visual studio était installé.

Bien sur, j’ai eu quelques suprises

  • le port 50000 qui n’était pas accessible sur le container –> recréer le container.
  • sur le pc qui a Visual studio, il ne trouvait pas MSBuild parce que le dossier n’était pas dans le path de windows. –> faire une recherche “dir msbuild.exe /s” et trouver la version qui est dans le dossier de visual studio.
  • même après avoir mis le path correctement, si je démarre en tant que service, il ne trouve quand même pas msbuild. –> j’ai changé l’utilisateur avec lequel le service démarre.
  • Faire en sorte que le build du code .net tourne bien sur le node qui a .net

et dans mon build plan aussi

ByPatrick

docker jenkins

Hier et aujourd’hui, j’ai suivi la formation “getting started with jenkins” de pluralsight

Donc, j’arrive bien à suivre le tuto et builder l’artifact avec le code java avec l’outil de build Maven.

Par contre, je sens que je vais avoir plus de mal à installer .net core SDK dans le container Jenkins pour builder du .net core, mais ça va venir.

ByPatrick

Docker prometheus + raspeberry + windows exporter

Pour pouvoir utiliser au mieux grafana, j’ai commencé par créer un container docker avec prometheus

docker run -p 9090:9090 -v prom/prometheus

Bon, d’accord, c’est pas propre car je ne conserve la configuration que dans le container, du coup je vais la perdre à chaque recréation du container.

je me connecte directement dans le container pour faire la configuration :

docker exec -ti MON_CONTAINER sh

vi /etc/prometheus/prometheus.yml

et évidement après avoir installé

Puis dans grafana, j’importe les dashboards pour linux et windows avec prometheus comme source et tada:

https://grafana.com/grafana/dashboards/1860

C’est autrement plus facile qu’avec Centreon. Mais par contre, je n’ai pas encore trouvé de moyen simple de sécuriser l’accès aux données publiées par les serveurs.

ByPatrick

Découverte de focalboard sous docker

Bonjour à tous et à toutes,

aujourd’hui, j’ajoute une sympathique application à ma liste de container sous docker :

En regardant le post suivant : https://github.com/mattermost/focalboard/issues/91

J’ai lancé les quelques commandes

git clone https://github.com/mattermost/focalboard.git
cd focalboard\docker
docker build . --tag mattermost/focalboard
docker run -p 8000:8000 --restart always mattermost/focalboard

je me connecte sur le port 8000 et je créé un compte 🙂

un grand merci encore à l’équipe qui met cela à disposition et à qui korben me l’a fait découvrir.

Bonne journée

ByPatrick

Livraison continue

Un collègue m’a envoyé ce petit schéma qui résume bien nos objectifs :

ByPatrick

Roadmap Devops

Voici un exemple de roadmap pour l’année à venir

ByPatrick

Test de Taiga

Bonjour,

Nouvelle journée, nouvelle découverte… J’ai voulu essayer Taiga (scrum board) et après avoir suivi ce tuto sur une nouvelle VM chez Linode. C’est à dire :

apt-get -y install docker docker.io
git clone https://github.com/taigaio/taiga-docker.git
cd taiga-docker/
git checkout stable
apt-get -y install docker-compose
./launch-all.sh

Je me suis heurté à ceci :

“Something happened and the Taiga has captured the error to be able to work on it.”

J’ai alors fait un petit “vi docker-compose.yml” et modifié les valeurs du host pour correspondre à l’ip publique de ma VM

Comme le login admin n’acceptait pas mon mot de passe, j’ai lancé la commande : ./taiga-manage.sh createsuperuser

et là tada, ça a fonctionné