26 avr. 2016

[JSON] correcteur de syntaxe

Comment corriger sa syntaxe ou détecter des erreurs?

il peut arriver que l'on oublie ou laisse une virgule là où il ne faut pas. Qu'une accolade ne soit pas fermée...

Ce site est pas mal pour tester son code json:

https://jsonformatter.curiousconcept.com/

21 avr. 2016

[Ansible] Réaliser une tâche si un fichier existe ou pas

Dans Ansible, si l'on cherche à réaliser une tâche, ou simplement l'ignorer, nous pouvons utiliser la fonction "stat" permettant de "variabiliser" le chemin d'un fichier et vérifier s'il est présent ou non avec "variable.stat.exists".


Plus de détail dans l'article ci-dessous (en anglais) dont voici la source : https://raymii.org/s/tutorials/Ansible_-_Only_if_a_file_exists_or_does_not_exist.html


Ansible - Only if a file exists or does not exist

Table of Contents

This Ansible playbook example helps you execute actions only if a file exists or does not exist. If you for example have a command you need to run to generate a certificate (or Diffie Hellman parameters for nginx) you only want to do that once. The command itself is not convergent so it will run with every ansible run. However, the command creates a file and Ansible is able to check if that file exists. If the file exists, it will not execute the action. The same goes for checking if a file does exist and only executing the action if it exists. (The action you want to do will remove that file).

The below example command will generate Diffi Hellman parameters for NGINX ssl. This command creates the file /etc/ssl/certs/dhparam.pem. It should run only if that file does not exist (because only newly deployed servers will not have the file), if the file exist there is no need to run again.
- command: sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048 creates=/etc/ssl/certs/dhparam.pem
Ansible has the creates option in the command module. Give it a filename (directories will not work) and if it already exists Ansible will skip the action.

The same goes for only executing an action if a file exists. The command you are using will remove that file, so only if the file is there the action should be executed. Just as the creates option, there is the removes option. For the removes option, you need at least Ansible 0.8.

The below example is for a custom piece of software one of my clients uses. If we deploy a new version, we check out the code repository and run a script to install a new version. That script will only run when the configuration file is renamed to software.conf.upgrade. After the upgrade it renamed that config file to the original software.conf and also puts the config in its database. It is sadly proprietary software and the manufacturer has stated they are not changing the behavior to a more sane default. The below example will only run the upgrade script when the file /etc/software/software.conf.upgrade exists. Since the script removes it, the next time Ansible runs it does not try to upgrade the software.
- command: /opt/software/bin/upgrade removes=/etc/software/software.conf.upgrade
Documentation for the Command Module

If you have other commands which do not support the creates option, you need to first use the stat module and register the result of that. This example is for the Shorewall firewall. We first check if the rules file exists:
- stat: path=/etc/shorewall/rules
  register: shorewall_rules
We fill the shorewall_rules variable with the result of this action. The next two actions add a rule to the rules file and restart the firewall, but only if the rules file exists:
- lineinfile: 'dest=/etc/shorewall/rules state=present regexp="^ACCEPT net0:192\.0\.2\.22 \$FW tcp 5666" line="ACCEPT net0:192.0.2.22 $FW tcp 5666"'
  when: shorewall_rules.stat.exists == True

- command: "shorewall restart"
  when: shorewall_rules.stat.exists == True
If you want to do stuff when a file is not present, you can check if the result is False, like so:
- action: example
  when: stat_result.stat.exists == False


[RHEL / CENTOS 7] Créer un service systemd

Créer un fichier nom.service dans /etc/systemd/system/ avec le contenu si dessous :
[Unit]
Description=Nom Service
After=tlp-init.service

[Service]
Type=oneshot
RemainAfterExit=no
ExecStart=/usr/bin/nom-service.ksh

[Install]
WantedBy=multi-user.target
Démarrage du service :
systemctl start nom.service
Activation du service au démarrage :
systemctl enable startup.service

Source : http://www.system-linux.eu/index.php?post/2016/02/26/Cr%C3%A9er-un-service-avec-systemd

[DICO] ETL et ELT

L'ETL (Extract, Transform, Load) est un processus d'intégration des données qui permet de transférer des données brutes d'un système source, de les préparer pour une utilisation en aval et de les envoyer vers une base de données, un entrepôt de données ou un serveur cible. Dans ce processus la transformation des données intervient sur un serveur intermédiaire avant le chargement sur la cible.

Cette fonction s'avère particulièrement utile pour le traitement de vastes ensembles de données hétérogènes dans le cadre de l'analytique du Big Data et de l'informatique décisionnelle.

Une variante est l’ELT (Extract, Load, Transform) qui permet le chargement des données brutes directement sur la cible, où elles seront alors transformées.

L'un des principaux attraits de l'ELT tient à la réduction des délais de chargement par rapport au modèle ETL. En effet, tirer parti de la capacité de traitement intégrée à l'infrastructure d'un entrepôt de données permet souvent de diminuer le temps nécessaire au transfert des données et peut se révèler plus économique.



Source: http://www.lemagit.fr/definition/ETL-et-ELT

13 avr. 2016

Un shell Unix sur Windows 10?

Quand j'ai entendu parler de cette histoire de Shell sous Windows, je dois avoué que je pensais à un poisson d'avril, mais apparemment ça serait vrai! Lire l'article de developpez.net : http://www.developpez.com/actu/97678/Windows-10-la-premiere-build-avec-le-support-du-Shell-Unix-Bash-est-disponible-pour-les-testeurs-du-programme-Windows-Insider/

Windows 10 : la première build avec le support du Shell Unix Bash est disponible

Pour les testeurs du programme Windows Insider


Build 2016, la conférence annuelle de Microsoft dédiée aux développeurs s’est déroulée la semaine dernière et a livré une série d’annonces intéressantes. Parmi celles-ci, le support de Bash dans Windows 10 était l’une des plus surprenantes, mais également des plus appréciées par les développeurs. Pour rappel, Bash (l’acronyme de Bourne Again Shell) est un interpréteur de ligne de commande de type script et le Shell Unix du projet GNU.

Comme Microsoft l’a expliqué, il ne s’agit ni d’une compilation croisée ni d’une machine virtuelle qui permettra d’exécuter l’interpréteur de ligne de commande sous Windows 10. L’exécution de Bash sous Windows 10 sera native, et cela grâce à un partenariat avec Canonical qui a permis la création d'un sous-système dédié, Windows Subsystem for Linux (WSL), capable d’exécuter des binaires Linux. WSL a été discrètement débarqué dans la build 14251 de Windows 10. « La résultante est qu’il vous est désormais possible d’exécuter du Bash natif Ubuntu sur Windows », a annoncé Microsoft lors de sa conférence.

À peine une semaine après l’annonce, les développeurs membres du programme Windows Insider pourront déjà commencer à tester l’interpréteur de ligne de commande, dont le support vient de débarquer dans une nouvelle build de l’OS. En effet, dans un billet de blog dédié à la sortie de la build 14316, Microsoft a annoncé hier que « vous pouvez exécuter Bash en mode natif sous Windows comme annoncé la semaine dernière à la Build 2016 ». La société fournit également les instructions pour installer l’interpréteur de ligne commande sous Windows 10.

Toutefois, avant de se lancer, il est important de rappeler quelques précisions fournies la semaine dernière par Mike Harsh de Microsoft :
  •     tout d’abord, c’est la première fois que cet outil est proposé (et est catégorisé « bêta » pour cette raison) : nous savons qu’il y aura des choses qui ne fonctionneront pas comme vous vous y attendiez. N’espérez pas voir des scripts Bash qui vont fonctionner à la perfection. Mais essayer cette fonctionnalité nous permet de savoir ce sur quoi nous avons besoin de travailler afin de l’améliorer ;
  •     ensuite, bien que vous serez en mesure d’exécuter du Bash en natif ainsi que plusieurs lignes de commande Linux sur Windows, il est important de garder à l’esprit que c’est une boîte à outils développeurs qui a été pensée pour vous aider à écrire et concevoir vos codes pour vos scénarios et plateformes. Il ne s’agit pas là d’une plateforme serveur sur laquelle vous pourrez héberger vos sites, exécuter des infrastructures serveur, etc. ;
  •     enfin, rappelez-vous que Bash et les outils Linux ne peuvent pas interagir avec les applications et outils Windows. Alors vous ne serez pas en mesure de lancer Notepad depuis Bash ou de lancer Ruby sur Bash depuis PowerShell.
Si le Shell Bash ne sera pour l'instant disponible que pour les Windows Insiders, la nouvelle fonctionnalité pourrait débarquer chez tout le monde l’été prochain, avec la mise à jour anniversaire de Windows 10.

Source : Microsoft

12 avr. 2016

[ANSIBLE] fatal: [host1] => Missing become password

En lançant un playbook j'ai obtenu le message d'erreur suivant:
fatal: [host1] => Missing become password
 Mon playbook comportant un :
  sudo: true
et sudo ayant besoin d'un mot de passe que l'on ne peut pas taper, la solution est d'éditer ansible.cfg à la racine de votre répertoire ansible et ajouter :

ask_sudo_pass = yes
Source de la solution :  http://serverfault.com/questions/690644/what-does-localhost-failed-missing-become-password-mean-how-do-i-get-pas

8 avr. 2016

[LINUX]Comment trouver un uuid pour rajouter un disque dans /etc/ftab ?

Je voulais faire un article là dessus et finalement j'ai trouver tout ici : http://www.marmottux.org/index.php/post/2010/10/03/Comment-trouver-un-uuid-pour-rajouter-un-disque-dans-/etc/ftab


Vous avez rajouté un disque dans votre machine et vous souhaitez le rajouter dans /etc/fstab, comment procéder ?

Identifiez le disque :

Avec un disque de 1.5 To ;
dmesg |grep 1.5
3.641155 sd 2:0:0:0: sdb 2930277168 512-byte logical blocks: (1.50 TB/1.36 TiB)
Quelle partition ?
fdisk /dev/sdb
touche p
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1 1 182401 1465136001 83 Linux
quitter touche q
Trouver le uuid
ls -l /dev/disk/by-uuid/
lrwxrwxrwx 1 root root 10 oct.   3 19:14 4a21e0cc-d99d-4203-a6c7-b9fc4ddf4571 -> ../../sdb1
Editer fstab :

Créer le répertoire :
mkdir /mnt/disque
vi /etc/fstab
Rajouter une ligne :
UUID=4a21e0cc-d99d-4203-a6c7-b9fc4ddf4571 /mnt/disque               ext4  defaults        0       1
enregistrer le fichier
:wq
montez le système de fichier :
mount -a
Tapez mount :
/dev/sdb1 on /mnt/disque type ext4 (rw)
Votre système de fichier est monté et prêt à être utilisé

NB : Faites attention aux droits d'accès

1 avr. 2016

[XML] Diviser (ou éclater) un fichier XML

J'avais affaire à un fichier XML assez volumineux (~800Mo).

Pour le traiter j'avais besoin d'un outil pour éclater le fichier (split en anglais) en plusieurs petits fichiers...

J'ai donc installer l'outils xml_split à travers l'outils perl XML Twig (article lié : http://astunix.blogspot.fr/2016/03/centos-rhel-trouver-le-package-lie-une.html)
$ sudo yum install perl-XML-Twig-3.44-2.el7.noarch
Ensuite pour l'utiliser, c'est assez simple, il suffit de tapper :
xml_split fichier.xml
ou utiliser l'option de niveau si le résultat n'est pas intéressant :
xml_split -l 2 fichier.xml


Plus d'information :

xml_split(1) - Linux man page
Name

xml_split - cut a big XML file into smaller chunks

Description

"xml_split" takes a (presumably big) XML file and split it in several smaller files. The memory used is the memory needed for the biggest chunk (ie memory is reused for each new chunk).

It can split at a given level in the tree (the default, splits children of the root), or on a condition (using the subset of XPath understood by XML::Twig, so "section" or "/doc/section").

Each generated file is replaced by a processing instruction that will allow "xml_merge" to rebuild the original document. The processing instruction format is " ?>"

File names are -.xml, with -00.xml holding the main document.
Options

-l

    level to cut at: 1 generates a file for each child of the root, 2 for each grand child

    defaults to 1
-c
    generate a file for each element that passes the condition

    xml_split -c
will put each "section" element in its own file (nested sections are handled too)

    Note that at the moment this option is a lot slower than using "-l"
-s
    generates files of (approximately) . The content of each file is enclosed in a new element ("xml_split::root"), so it's well-formed XML . The size can be given in bytes, Kb, Mb or Gb.
-g
    groups elements in a single file. The content of each file is enclosed in a new element ("xml_split::root"), so it's well-formed XML .
-b
    base name for the output, files will be named -<.ext>

    is a sequence number, see below "--nb_digits" is an extension, see below "--extension"

    defaults to the original file name (if available) or "out" (if input comes from the standard input)
-n
    number of digits in the sequence number for each file

    if more digits than are needed, then they are used: if "--nb_digits 2" is used and 112 files are generated they will be named "-01.xml" to "-112.xml"

    defaults to 2
-e
    extension to use for generated files

    defaults to the original file extension or ".xml"
-i

use XInclude elements instead of Processing Instructions to mark where sub files need to be included

-v

verbose output
Note that this option can slow down processing considerably (by an order of magnitude) when generating lots of small documents
-V

outputs version and exit

-h

short help

-m

man (requires pod2text to be in the path)

Examples

xml_split foo.xml             # split at level 1
xml_split -l 2 foo.xml        # split at level 2
xml_split -c section foo.xml  # a file is generated for each section element
                              # nested sections are split properly

See Also

XML::Twig, xml_merge
Todo

optimize the code

    any idea welcome! I have already implemented most of what I thought would improve performances.
provide other methods that PIs to keep merge information
    XInclude is a good candidate (alpha support added in 0.04).

    using entities, which would seem the natural way to do it, doesn't work, as they make it impossible to have both the main document and the sub docs to be well-formed if the sub docs include sub-sub docs (you can't have entity declarations in an entity)

Author

Michel Rodriguez
License

This tool is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Source : http://search.cpan.org/dist/XML-Twig/tools/xml_split/xml_split