Dev'Obs #22 / Bash(ing?)

Télécharger MP3
To Bash or not to Bash.

Bonjour à tous et à toutes et bienvenue dans un nouveau numéro de DevObs. Alors aujourd'hui je suis accompagné par Mathieu. On t'a déjà eu

en podcast, tu nous avais présenté ton offre KaaS

de Kubernetes de service que t'avais chez Exoscale. Aujourd'hui on va parler euh de bâche. Alors Bache euh l'interpréteur de euh de commandes et plus généralement en fait euh des scripts et là pour le coup euh je te laisse te présenter.

Euh ben en effet, j'étais déjà venu dans le podcast, donc merci encore pour euh cette nouvelle invitation. Je m'appelle Mathieu Corbin, j'ai travaillé euh comme administrateur système

et ensuite comme développeur mais appliqué Adnafra

chez Exoscane euh pendant presque 4 ans et c'est là en effet que enfin c'était j'étais encore chez Exosel quand j'étais intervenu la dernière fois maintenant je suis repassé euh SRE donc dans dans qui est une start-up française

Voilà pour les présentations, là j'ai pas grand chose d'autre à dire euh à part que je suis toujours un peu des deux côtés, côté euh

Ma carrière je passe soit hop, soit Dave, selon mes envies on va dire. J'ai un peu le la la double casquette.

C'est c'est cool, enfin c'est voilà donc c'est-à-dire quand même il y a eu du changement depuis la dernière fois où t'es.

C'est ça. C'est ça, avec un poste différent aussi.

Euh je t'invite donc aujourd'hui pour euh parler en fait d'un sujet un peu d'actualité. Alors d'actualité euh c'est un peu bizarre de dire d'actualité quand on parle de bâche

Euh mais euh t'as écrit donc euh il y a de ça déjà presque deux ans je crois, un article sur Bache euh que tu vas pouvoir nous résumer et

il faut dire qu'il a été assez repris dernièrement avec euh des personnes qui l'ont euh commenté et t'as même dû faire

encore une réponse euh par rapport à ça. Euh mais on va en discuter maintenant et euh

et donc le format donc de ce podcast ça va être vraiment d'être euh une réaction

euh par rapport à ce sujet euh de voir peut-être euh donc euh ton opinion, ton avis euh le comprendre peut-être un peu plus et euh et voir après ce qu'on peut en tirer en fait et euh voir euh,

ce que tout le monde euh tout le monde va pouvoir en comprendre. Donc je te laisse peut-être résumer d'ailleurs, à la base, pourquoi t'as créé cet article? Euh il y a il y a de ça euh ces quelques années.

En effet, j'avais fait mon premier article en décembre 2020 et je voulais aussi commencer par ça parce que euh c'est parti d'un constat en fait cet article. Euh moi j'ai commencé ma carrière en grand groupe euh dans des missions en grands groupes donc euh où c'était tout était fait d'ailleurs en KSH

voilà

euh donc avec des scripts de plusieurs milliers, voire dizaines de milliers de lignes où le vraiment tout était fait euh mais quand je dis tout, c'était tout euh mais même il y avait un espèce de système dignite maison en KSH, tous les slips de déploiement étaient en KSH, chez l'accord de la X.

Euh donc voilà c'était un contexte assez compliqué

et euh pour être honnête ben c'était ingérable, c'était vraiment ingérable, intenable euh ça plantait en permanence, c'était des scripts en plus euh non versionnés avec euh un historique euh on va dire écrit en commentaire en début de de de script.

Ça se passait un peu comme ça de personne en personne et euh,

Et et donc dans mon équipe on essayait un peu de se débarrasser de ça et de moderniser vraiment la Stack, on était la première équipe à parler euh, déploiement continu, infrascode ou des choses comme ça.

Parce qu'on avait beaucoup beaucoup beaucoup de problèmes avec le le donc dans cette enfin là je vais dire euh Shell je pense enfin on peut parler de Shell et pas forcément que de bâchement tout ce que je vais dire sur bâche pour moi s'applique également à KSH ou à d'autres euh d'autres chaînes.

Euh mais voilà donc il y a déjà ce constat-là de euh faire de l'infra avec un gros coucou de script, ça marchait pas, c'était pas ma table sur le long terme, on pourra revenir sur

ensuite j'ai évolué, j'ai changé d'entreprise, j'ai travaillé beaucoup sur de l'ACI euh également euh j'ai,

travailler euh en tant que maintenant je travaille en tant que SRE et il y a une quelque chose vraiment constant pour moi que que je vois en permanence c'est quand il y a du,

un peu trop utilisé, c'est-à-dire des scripts trop longs ou avec de la logique. Donc quand la logique ça va être des boucles, des conditions euh de la logique peut-être métier aussi, alors métier euh ça peut être euh même côté euh infra, notre métier c'est de déployer des choses. Donc dès qu'il commence à avoir vraiment de la logique et cetera.

Il y a des erreurs, euh il y a des scripts qui plantent, des euh c'est souvent des scripteux

de qualité avec une gestion d'erreurs difficiles, euh des bugs subtiles, j'en ai encore eu ce un ce matin, bizarrement, euh quelqu'un qui avait euh oublié dans un script de déploiement continu euh des espaces, vous savez, autour des de dans un dans une comparaison bâche

Euh donc autour des de du de l'opérateur égal parce que voilà une comparaison enfin en bâche c'est une fonction,

ça prend un certain nombre de paramètres et donc si vous collez, si vous enlevez des espaces entre vos une comparaison de chaîne par exemple.

Et le égal ça plante. Euh donc voilà il y a vraiment eu cette consente au au long de ma carrière où à chaque fois qu'il y avait du utilisé euh ça marchait mal.

Donc ouais et euh et d'ailleurs je vais en parler avec beaucoup de gens qui étaient pas forcément d'accord et je me souviens d'ailleurs une réflexion que j'avais fait à quelqu'un une fois je lui ai dit ben je suis sûr prends ton ta collection de script challenge qui était sur Guetub.

Regarde ton historique, je suis sûr que tu vas voir euh et c'était le cas. Je veux dire c'est vraiment euh c'est vraiment quelque chose que j'ai euh que j'ai vu.

Et finalement, avec le temps, je me suis dit, mais euh moi, il y a un truc que je comprends pas.

C'est que aujourd'hui ben finalement nos scripts déjà moi je fais pas vraiment la distraction, ce script des programmes c'est que le script c'est des vrais programmes au final,

ont besoin d'être maintenus ben comme des programmes euh classiques, je fais plus la distinction euh en disant ben voilà ça s'est inscrit, ça c'est un programme et ils vont pas être euh ils vont pas avoir le même cycle de vie ou les mêmes outils euh voilà pour les utiliser. Pour moi les deux c'est des programmes.

Pourquoi ne pas et moi je faisais beaucoup d'aides? Comme j'ai dit, j'ai travaillé aussi également en tant que DF, je me disais mais pourquoi on n'utilise pas les mêmes outils que les développeurs.

Pour euh bah pour faire nos scripts euh pourquoi on s'inspire pas d'eux euh et j'ai l'impression que dans l'administration système il y avait un peu ce cette chose de dire euh.

Les développeurs euh, ils doivent se faire des tests, ils doivent faire des voilà euh, il y en a marre des ça c'est truc classique hein grognon euh, il y en a marre d'Edef qui euh, pousse des bugs et cetera,

Mais par contre alors pour les scripts internes, là c'est open bar, il y a aucun problème à faire euh à y aller en mode Yolo euh euh balancer des scripts faits à l'arrache sur un coin de table,

en prod, là ça posait pas de problème. Donc il y avait aussi un peu ce truc-là qui me gênait et je me disais mais voilà pourquoi euh pourquoi on fait ça? Surtout dans le monde d'aujourd'hui euh on pourra en reparler où finalement euh c'est pas de l'humain qui pilote de la phrase, c'est des programmes.

Et donc j'ai écrit ce premier article où je montrais certains points limitants de bâche.

Selon moi, enfin je dis selon moi mais au final euh il y a des fausses euh enfin c'est c'est de la tech donc c'est difficile de c'est pas du mensonge je veux dire euh on va pouvoir revenir revenir sur ces points euh et en effet l'article est ressorti enfin il ressort de temps en temps en fait et là il ressorti récemment

J'en avais fait un deuxième euh pour clarifier certaines choses. Et voilà mais au final euh cet article à la base c'est là euh par un constat. Enfin deux constats c'est euh.

Dans l'esprit de bâche et mais en fait pourquoi on fait du Bash? Pourquoi on fait pas autre chose? C'est c'est ça fait on fait du Bash? Parce que euh il y a dix ans on faisait du Bash.

Ou il y a 20 ans ou du KSA, je sais pas mais il y a d'autres outils aujourd'hui euh et d'autres philosophies. Aussi de.

Écrire des programmes je pense.

Bah c'est vrai que là euh je te rejoins euh complètement euh il faut voir que euh donc je le précise hein, j'ai fait des invitations un peu euh un peu plus larges pour avoir d'autres avis dessus, donc euh l'ail

Il pourrait y avoir aussi un droit de réponse hein si quelqu'un veut donc là malheureusement on est deux personnes qui avons à peu près le même euh

le même la même opinion puisque moi c'est vrai que dans mon expérience je partage totalement l'expérience euh j'ai déjà été dans des compagnies où euh,

absolument toute la prod tournée avec un seul script euh euh shell.

Puis c'était du bas, je pense que c'est du Bash quand même. Euh toute la prod tournait avec un c'est-à-dire que c'était tous les programmes de la prod qui tournaient en étant préfixés par ce wrapeur. Euh ce il était pas testé, il avait euh euh.

On avait quand même euh on l'avait quand même mis dans un guide. Mais en fait il était dans un guide lié à un,

c'est-à-dire qu'en fait il suivait le cycle de vie d'un coup chef et n'était pas du tout lié avec euh sur sa propre cycle de vie. Donc il était pas testé en fait, il était juste, c'était un asset euh dans le déploiement.

Alors que absolument toute la prod tomberait dessus, on n'avait pas de Linking, on n'avait pas de test dessus, on n'avait absolument rien et euh.

C'est vrai que c'est c'est un point euh c'est un point qui revient assez régulièrement quand on regarde les c'est que.

Ils ont pas une qualité très forte. Et alors quand ils commencent à avoir une qualité très forte, tu as parlé de la gestion d'erreurs, mais euh moi je peux parler aussi de la gestion des entrées, euh des euh du,

toutes les options qu'on peut mettre dedans et cetera, tout est possible de faire, il faut voir que,

Shell euh ou Bache va être un langage teuring complet. Donc globalement on va pouvoir faire à peu près ce qu'on veut avec. Le problème c'est que soit il est simple et il est simpliste, il il ne gère pas tous les cas et il va avoir beaucoup tendance à planter, soit il devient,

extrêmement verbeux et il va tester beaucoup de cas et dans ces cas-là il devient absolument illisible et il devient même euh.

Même très compliqué à maintenir, à à à.

Oui à faire à faire évoluer en fait, de manière de manière propre et donc on arrive au constat que t'as dit c'est des un peu tout le temps, un niveau de qualité qui est faible.

Et c'est assez dommage parce que.

Je pense que ça c'est un constat euh qu'on qu'on pourra avoir, c'est que on touche à de la prod. On touche à quelque chose qui doit fonctionner et qui doit même plus fonctionner que euh

un petit script euh qui fait un joli euh un joli Hello World euh sur une euh sur une page web. On on parle pas du même niveau de qualité qu'une euh qu'un script Java Script euh

juste Shiny, on parle vraiment de la prod.

C'est ça.

C'est vraiment dommage euh dommage non non donc là j'ai donné j'étais juste un exemple parce que c'est vraiment celui auquel je pense euh et et donc toi là justement dans l'article qu'est-ce que tu donnais des euh donc là parce qu'on est parti donc du constat.

Dans les faits, est-ce que donc là c'est il y a quoi par exemple comme euh choses qui sont limitantes pour que toi euh quand on parle de bâche et même de toutes les chaînes en règle générale que tu listais.

Ouais

t'en as déjà listé certains finalement enfin certaines euh bah la gestion d'erreurs pour moi c'en est une. Alors bien sûr on peut faire du sept et cetera pour euh stopper un script quand il y a des erreurs, on peut faire euh ben voilà checker des des des statuts codes euh

des commandes qui sont appelées et cetera et cetera mais on est très très loin de euh d'une notion d'erreur dans un dans un programme de,

comme dans un programme de alors désolé, comme dans un langage de programmation, voilà je vais y arriver classique, que ça soit des euh des types

erreur et cetera euh c'est ça n'a rien à voir et d'ailleurs il y a beaucoup de choses qui sont dures à expliquer, je voudrais juste revenir là-dessus dans mes articles, c'est qu'en fait,

Souvent je je parle à des agnistes de ça et d'autres choses que je lui ai mentionné en fait ils me disent oui mais non mais je suis même pas sûr qu'ils comprennent parce qu'en fait euh c'est des concepts souvent de Dave.

C'est-à-dire euh quand je vais parler de voilà je parle de choses parfois des mais sans avoir les notions de développement de base pour comprendre ces choses-là.

C'est compliqué de voir l'intérêt que ça a en fait. Une gestion d'erreurs m'a par exemple typé un type résulte ou euh une gestion euh avec des exceptions, des euh euh et cetera et cetera.

Et et ça c'est euh c'est quelque chose de très commun, c'est-à-dire c'est en fait euh un manque de connaissances pour moi.

Et et c'est dur quand il manque une connaissance de se dire bah qu'est-ce que ça va m'apporter? Parce qu'en fait je je connais déjà pas c'est quoi le truc je veux dire le le concept. Euh donc voilà euh je voulais juste dire ça avant parce que je vais parler de beaucoup de concepts de Dave en effet

ces concepts-là bah voilà si en tant qu'ops on les maîtrise pas, en tant qu'administriste si on s'y maîtrise pas, on peut pas comprendre leur intérêt. Euh et ça c'est un.

C'est vrai que je voulais.

C'est vrai je voulais y aller après justement et ça c'est euh tu tu soulèves le point principal en fait du pourquoi tes articles vont revenir et pourquoi on a cet attachement euh souvent à Bash c'est en effet que c'est,

Très simple à prendre en main.

Mais en même temps va avoir euh énormément de soucis ensuite euh et en effet si jamais on ne connaît pas ce qu'on peut faire d'autre, c'est dur de l'imaginer en fait, on ne sait pas, on ne connaît pas ce qu'on ne sait pas et euh on ne sait pas ce qu'on ne connaît pas et.

On a à peu près le même problème quand on a euh des gens qui font du euh du PHP et du Python euh dans le sens où c'est le premier langage de programmation que les gens vont

accéder. Euh c'est un langage extrêmement simple à prendre en main qui est euh qui euh qui permet de faire beaucoup de choses. Et en fait euh pour quelqu'un qui fait du python,

au quotidien. C'est dur de lui dire que il peut y avoir d'autres langages meilleurs sachant que il est déjà capable de tout faire avec du python,

euh et que ben globalement ça répond à tous ces problèmes actuels. Euh je pense qu'on a à peu près le même problème avec les euh les adminis qui font du bash c'est que quand on a depuis 20 ans on fait du badge qu'on est capable de faire,

absolument tout avec. C'est dur de d'imaginer qu'il puisse y avoir autre chose qui le fait mieux. Soit ça veut dire qu'on s'est trompé depuis vingt ans.

Euh soit ça veut dire que ben au final ça va être shiny et je vais y perdre trop de temps derrière euh à apprendre quelque chose euh d'autre,

Et je vais quasiment avoir un un système de perte irrécupérable, c'est-à-dire si jamais je passe à un nouveau système euh,

À quel point je vais perdre la connaissance que j'ai déjà accumulée avant parce qu'au final il faut voir que ces adminis qui font du Bash, c'est des gens qui connaissent extrêmement bien Bash.

Enfin en tout cas des des petites subtilités du euh du langage de faire des des parcings de lignes de commandes euh avec du bash, avec des ghettos et cetera et cetera, c'est un truc qui

immonde mais vraiment immonde mais quand on le connaît sans doute que ça va vite, en tout cas on le voit vite, on a et on a même aussi souvent ce problématique euh,

Régulièrement qui est.

Si j'ai besoin de bâche une fois pourquoi j'aurais à apprendre un autre langage alors que il faut que j'uniformise, que je standardise et donc bah si je fais du bashing une fois ben je dois faire du bash tout le temps.

Ça on le retrouve aussi euh dans le dans dans d'autres écosystèmes.

Et je dirais aussi un truc, c'est que aujourd'hui ça va très vite, c'est-à-dire qu'il y a un peu aussi un truc dans le l'administration système que j'ai vu au cours de ma carrière et très souvent sur les réseaux sociaux, c'est-à-dire que plus on utilise des trucs un peu bas niveaux et cetera, plus on est hard-core un peu.

Ouais moi je suis tout en bas, je suis euh euh ou limite euh voilà et je connais très bien le carnet euh je suis euh voilà c'est moi le c'est moi le big post parce que voilà je fais des trucs euh super low level ou super euh,

typé adminis et dès qu'on commence à parler un peu de choses un peu haut niveau, d'abstraction, de langage et de de concept de programmation, de développeur,

ben là on est vu comme euh voilà un ingénieur Yamel, enfin moi je bon je comprends euh régulièrement des comme ça, des euh je sais pas euh enfin voilà c'est

En gros on a pas de connaissances voilà parce que on est pas assez bas niveau en fait pour euh

Ça y est on est passé côté d'Eve, on est on est limite chez l'ennemi, c'est-à-dire euh c'est un peu ça hein au final euh le le truc euh c'est euh,

maintenant t'es t'es tu fais du dev euh t'es plus un vrai admin, tu fais plus du Bash, attention euh

il y a un peu cette culture dans l'administration système que j'ai du mal à comprendre de euh, c'est moi le plus euh, le plus hard-core et c'est moi avec mes scripts euh, et cetera qui euh, un peu en mode héros sauveur voilà boum je sauve la prod avec mon petit script euh, écrit sur un coin d'une table,

c'est pas du tout ma vision en fait de l'administration système aujourd'hui. Mais vraiment pas. Euh et voilà. Euh mais bon. Mais pour revenir sur la question.

Peut-être voilà, voilà, reviens peut-être euh, justement parce que j'allais te revenir là-dessus justement peut-être pour enlever ça, pour bien montrer que quand on parle de bâche, on le connaît également et que c'est pas parce qu'on fait du dev qu'on connaît plus oh euh,

prémisses euh de d'un d'infrastructures. Qu'est-ce que toi tu vois comme problématique euh comme problème avec bah.

Ouais.

Alors la gestion d'erreurs, j'en ai parlé, c'est euh ça a rien à voir avec une vraie gestion d'erreurs typées et cetera, avec des avec euh des erreurs euh qui peuvent se gérer et même euh être détectés on va dire.

D'oublier de gérer une erreur peut détecter à la compilation ou des choses comme ça ou via des euh donc ça c'est une première chose, ça va très vite de se tirer une balle dans le pied en bas sur ça je trouve. Euh on a on peut également euh parler de la

la gestion on va dire de tout le cycle de vie du programme, gestion de dépendance, de modularisation, de création de librairie, enfin de bibliothèque et de partage de ces bibliothèques,

via euh des enfin voilà des outils euh comme euh je sais pas ma vanne en Java enfin chaque langage a finalement son outil de partage euh de librairie

en gros euh bon en gros euh ça va être mais bon voilà euh généralement la gestion des des des dépendances en gros c'est pas euh on va dire extra mais bon c'est toujours mieux que match mais je veux dire il y a ces notions vraiment de partage et de

qui est beaucoup plus simple à faire on va dire dans un langage de programmation voilà comme n'importe lequel

pour moi ou en bâche pour partager quelque chose généralement c'est euh j'ai eu des bibliothèques de fonction et je fais du source ou des choses comme ça mais on est pas du tout sur euh pour moi une vraie gestion de dépendance.

Ça ça va être également un point.

Euh ça va être aussi euh sur euh un point important, ça va être ben le typage, c'est un point important. Euh ça limite limite quand même beaucoup d'erreurs et c'est très intéressant d'avoir du typage dans un programme. Et pour aller plus loin et sur les structures de données également

euh notre quotidien c'est quand même de travailler avec des des systèmes externes, des API, donc envoyer des requêtes,

généralement et recevoir des réponses, euh travailler avec des fichiers de configuration, travailler avec euh de la donnée. En fait, c'est ça, un point important, c'est on travaille vraiment avec de la donné.

Pour représenter toutes sortes de choses. Et donc euh dans des langages de programmation, on va utiliser quoi pour représenter ces données, on va utiliser des classes.

Ou des structes, ça dépend du langage, c'est c'est pas les mêmes concepts à chaque fois. Mais euh on a des représentations pour euh enfin des des outils pour représenter de la donnée de manière euh fiable on va dire euh pouvoir euh,

gérer son cycle de vie on va dire. Voir attacher les fonctions à cette donnée pour pouvoir la la modifier euh et ça en fait Bache est très mauvais à ça.

Le chêne en général je veux dire euh les structures de données faire voilà euh faire un tableau en bâche c'est déjà affreux alors un tableau en deux dimensions j'en parle pas mais là je veux même pas parler de structure de données comme des mais juste.

Une voilà représenter mettons un de racket HTP avec euh.

Euh un useur mettons on doit créer un un utilisateur dans une et il a quoi comme euh c'est quoi son c'est euh.

Par exemple enfin voilà nom, prénom, adresse, adresse qui est elle-même une structure de données avec euh ville, rue et cetera et cetera bah représentez ce genre de choses,

Dans le langage, c'est très compliqué,

en bâche. Euh alors que dans d'autres langages, c'est beaucoup plus simple. Et de manière, et ça se fait de manière beaucoup plus plus fiable, donc la céréalisation des céréalisations, que ce soit en Jason, en Yamel ou autre, se fait de manière euh beaucoup plus simple, enfin bref, on a beaucoup de choses qui arrivent euh qui est

qui sont euh qui sont amenés grâce à ça et pour moi baf aujourd'hui ben sur les systèmes actuels où finalement on traite beaucoup de données.

C'est pas du tout du tout pertinent. Et même voilà, dès qu'on doit interagir avec une,

faire de la validation d'input et cetera t'en parler c'est euh la galère en bas je crois surtout le le fait que ce soit pas typé ça n'aide pas non plus. Euh donc voilà euh j'ai d'autres points mais je sais pas si tu veux réagir là-dessus peut-être euh d'abord ou pas mais.

Ben oui, non mais c'est t'as t'as tout à fait raison, c'est euh le fait que Bache a donc euh il faut un peu rappeler comment ça marche. On on est vraiment dans du euh dans uniquement des des strings, des des des caractères qui sont passés de commande en commande. C'est

Au final, vraiment ça à la base. Alors ça a un énorme intérêt

euh c'est un énorme atout euh au quotidien c'est que euh toutes les commandes parlent à peu près de la même façon et que n'importe quelle commande peut parler avec n'importe.

Ça a un énorme énorme énorme avantage euh là-dedans. Euh on n'a pas de euh de notion compliquée euh d'évolution, tout est string et tout se passe dans des string.

Euh mais en effet après on a le par rapport à ça qui est euh que,

si jamais votre commande euh rajoute une ligne de au milieu d'un d'un string de données,

vous avez pas de moyen de le savoir. Il y a pas il y a pas vraiment de notion euh et en fait vous allez gérer cette ligne-là euh comme n'importe quelle autre,

et donc le problème en fait qu'on va avoir dans Bâche et c'est un peu le contrôle d'erreur que tu faisais ou les et le contrôle de et le contrôle d'erreur en fait les deux en même temps c'est que euh les les.

Problèmes peuvent aller au carré quoi, c'est-à-dire que un problème généré par une commande va se répéter à celle d'ensuite, à celle d'après

et on va avoir un effet d'emballement parce que il n'y a pas vraiment de contrôle par rapport à ça, un contrôle vraiment de est-ce que la donnée que j'ai reçue est logique ou non.

Et ça pour le coup en go on a moins ce problème-là et c'est un truc qui a été euh sans doute mis dès le début euh qui est que quasiment toutes les commandes renvoient une erreur au bas,

on a vraiment cette notion alors euh des gens qui aiment pas euh qui préféreraient que ce soit euh des enfin des des hum.

Des interruptions euh au niveau de la de la de la fonction. Mais voilà, on a toujours une erreur qui est renvoyée et on doit checker les erreurs en permanence. Et on voit vraiment la différence entre les deux en fait euh. On a vraiment un langage qui a été basé sur le fait qu'il faut checker les erreurs.

Tout le temps, la moitié du programme qu'on fait c'est du d'erreur et de l'autre côté quelque chose qui est juste balance euh balance des euh des euh des streams.

Des strings qui ne représentent rien, c'est-à-dire c'est enfin si ça représente des choses mais c'est euh de la on va dire c'est pas encodé dans le logage voilà c'est il y a pas de truc, il y a pas de classe, il y a pas de c'est voilà c'est géré un peu comme ça. Et en effet go force.

Pour d'ailleurs euh.

Ouais ouais ouais mais c'est c'est là c'est drôle c'est que euh je sais que c'est j'avais discuté avec pas mal de gens qui sont dans l'univers Dotnet et en fait euh Power Shell était un euh enfin et toujours d'ailleurs alors après je connais très mal s'il y a des gens euh fans de Power Shell qui connaissent très bien mais,

normalement le but de Power Shell c'est que justement toutes les commandes renvoient des objets et donc tu peux avoir un mapping des objets et donc des commandes qui vont chercher euh euh seulement un bout. Enfin c'est vraiment en fait quelque chose où

entre deux euh commandes c'est un objet qui est renvoyé et puis uniquement une string.

Alors qu'en bas je suis en gros le la gestion d'objets c'est GQ quoi. Ça ça va.

Oui voilà c'est c'.

Ça euh c'est.

Mais en fait après le problème c'est en fait il faut donc que la commande gère Diesel en fait ça veut dire que vraiment euh la seule façon d'envoyer un objet complexe entre deux commandes c'est d'envoyer du Jason sauf que.

En plus c'est drôle, c'est que la plupart du temps les gens vont détester Jason ou Yamel pour cette même euh problématique-là en fait euh qui est euh ah oui mais c'est pas géré partout et cetera

Euh je rebondis également sur la gestion de dépendance que dont t'as parlé euh il faut voir que donc il y a la gestion de dépendance du code donc euh une librairie, une fonction Bash

Mais ce qu'il faut pas oublier également, et c'est un point euh essentiel, c'est que la plupart des programmes bâchent, appellent des fonctions.

Qui sont elles-mêmes des dépendances externes, qui sont liées euh à la distribution Linux, en tout cas à l'écosystème dans lequel tourne le script. Si jamais vous appelez un cut, que vous appelez un.

Euh enfin je sais pas quelle commande en fait, n'importe quelle commande euh qui est appelée. La plupart du temps, ça va être une commande qui est liée à l'écosystème,

Et en fait en fonction de là où vous vous trouvez, vous aurez pas forcément le même comportement. On a très souvent le problème pour les gens qui font du euh du McOS

parce que euh les commandes McCOS n'ont pas exactement le même comportement, euh je crois que c'est les grippes qui ont pas exactement le même enfin la même comportement, enfin des fonctions quand même assez.

De base de corps utiles qui sont pas exactement pareils. Et alors après ça va être pareil si on va sur des distributions avec euh des euh.

Des euh typiquement de l'embarquer ou des choses comme ça où on va avoir un.

Certaines commandes qui ont vraiment un comportement extrêmement différent. Et le problème c'est que bâche masque ça, c'est-à-dire que la commande va se lancer, elle va tourner.

Mais en fait le comportement attendu sera pas le bon et

Comme encore une fois on n'a pas de gestion d'erreur, pas de gestion de de eh ben le lien entre plusieurs euh fonctions n'est pas checké, on peut avoir un truc qui explose euh qui explose assez facilement,

Que vraiment la commande renverra pas une erreur, elle ne renverra pas un code d'erreur donc même si on a mis un sept mois X qu'on a décidé de bloquer euh de bloquer l'exécution, la commande peut très bien dire non non mais moi c'est okay mais elle n'aura pas le même comportement.

Et d'ailleurs sur ça ben ça me rappelle vraiment l'époque où j'ai l'impression que mes quatre premières années euh de travail en tant qu'administre je passais ma vie à corriger des.

Parce que c'était euh ben c'était l'enfer hein c'est voilà c'était euh c'était

Et euh en effet chaque distributeur travaille sur plusieurs distributions et chaque distribution ou des gens en interne avaient construit leur fameux vous savez pour stocker les PID dans des fichiers euh gérer les accès concurrents, c'est ces trucs-là enfin

c'était mais l'enfer, l'enfer, l'enfer euh et en effet c'était pas la même chose entre un et euh mettons un ou je sais pas quoi.

Toutes ces fonctions-là pour on va dire gérer le site de vie du programme et savoir est-ce que enfin et moi j'avais accueilli le système D comme une libération quoi clairement à l'époque je m'étais dit mais putain c'est.

Trop bien quoi je veux dire on a on a pu galérer euh enfin le nombre d'erreurs en prod avec des moisies c'était un truc mais euh.

Arriver mais tout le temps enfin bref c'est un c'est un autre sujet les systèmes mais bon euh voilà c'est un peu en lien aussi.

Avant tout était en bâche, non? Mais vas-y, continue, je te laisse continuer maintenant sur les autres points euh.

Sur les autres points, ben on parlait un peu d'outillage, mais c'est aussi euh

chose que tu avais mentionné, les linters, les euh, l'analyse statique de code, même dans les idées et cetera et l'outillage est aussi fourni grâce notamment au typage hein dans des langages fortement typés euh, on peut faire d'outillages euh, intéressants parce qu'on a des types.

Donc euh même le compilateur ou des choses comme ça enfin le fait de pouvoir vérifier des choses statiquement,

ça c'est super intéressant et là on est vraiment ça peut être aussi des des tests et cetera parce que souvent on me dit on peut faire des tests en bas, je suis mieux, on peut faire des tests en bâche mais euh ben les concepts de programmation comme euh.

Bah les interfaces en go ou euh les génériques enfin je vais dire dans tout le langage mais maintenant c'est Dango aussi où euh le typage statique on va dire euh.

Le type esthétique de manière générale ou même dans les langages dynamiques, on on peut vraiment créer des jeux tests avec des c'est-à-dire moquer des composants, dire des clients par exemple euh de manière assez simple et claire.

Cette notion de voilà de comment je vais tester mon programme, comment je vais moquer des appels externes, comment je vais euh en faisant différentes euh une implémentation pour on va dire euh le le vrai code et une implémentation pour le test même si des cacher d'ailleurs une interface

toute cette logique-là, c'est des choses qu'on va pas trouver, on va dire en bâche.

Donc voilà, il y a l'outillage, il y a aussi la façon de s'en servir, notamment lors des tests. Enfin je veux dire, c'est c'est dur de parler de ça, en fait, ça a peut-être un peu confus, parce qu'en fait.

Il y a tellement de choses qui manquent euh d'embâche sur euh sur des concepts, c'est-à-dire de développement comme j'ai dit, lié au que c'est un peu voilà je m'embrouille un peu.

Et quel serait l'intérêt de ces euh de ces interfaces-là justement donc quand tu parles de quel est l'intérêt quand ton développeur.

Ouais, j'ai récemment dû écrire un script, ce qui interagit avec Cubanatis.

Donc euh on doit, c'était un truc qui devait modifier des ressources en cube, donc faire des appels à PI au final. J'ai utilisé un client mais bon voilà, l'idée c'est ça, on fait des des aillots.

Et donc il y avait des aillots avec une petite logique.

Et euh et donc je veux pouvoir tester ce froid mais moi j'ai pas envie en local d'avoir à démarrer un cluster cube euh pour euh juste faire un un.

Ce que j'ai fait c'est que j'ai euh utilisé donc le client cube euh standard hein le enfin le le client dynamique de la librairie officielle euh go pour Cumanatis. Dans mon code et dans mes tests,

eh ben euh j'ai euh écrit un moque de ce client parce que ce client-là en gros c'est il est d'ailleurs une interface.

Donc c'est euh une interface comme une liste de fonctions attachées à une structure et donc euh j'ai écrit euh une structure de moque,

le où j'ai surchargé ses fonctions dans mon test pour euh pouvoir envoyer certaines données euh,

en fonction de certaines conditions. Donc comme ça je peux vraiment lancer mes tests sans avoir à démarrer tout un environnement local,

travaille vraiment en isolation euh et et ça ça a quelque chose qui est super difficile, je sais même pas si c'est possible en bas, je veux dire de faire des parce que il y a pas des notions on va dire de euh de programmation orientée objet ou de il y a pas de notion vraiment de typage ou d'interface ou de.

De protocoles comme dans comment ça s'appelle dans certains langages, il manque tous ces concepts-là en fait qui nous aident au quotidien à faire au le design de programme. Ça c'est vrai que c'est euh c'est quelque chose qui est que j'ai pas mentionné mais de l'architecture logicielle.

Ça se fait pas euh comme ça, il faut des outils pour le faire.

Il faut il y a des concepts derrière, c'est pas euh qu'il y a pas en bâche, c'est-à-dire c'est un un logiciel s'appuie sur euh ben voilà sur des pratiques.

Et sur des sur des outils et donc euh sur euh je pourrais parler de plein de choses. Programmation fonctionnelle euh de gestion de des euh des de l'état d'une d'une muabilité ou non la euh enfin il y a plein de trucs qu'on pourrait dire qui sont pas d'embâche.

Et euh et c'est des choses qui aident au quotidien pour tout. Notamment pour.

Alors justement je sais euh je vais essayer de me faire un peu l'avocat du diable, c'est,

on l'a pas euh c'est disponible dans d'autres langages, mais est-ce qu'on en a besoin en fait? Est-ce que euh est-ce que vraiment euh ces concepts-là qui existent, qui sont très bien, est-ce que quand on fait de l'administration de système, est-ce qu'on en a besoin.

C'est ce que je disais un peu au début, c'est est-ce qu'on fait de la qualité? En fait pour moi c'est ça le point. C'est-à-dire c'est euh.

Pour moi oui on en a besoin parce que comme je l'ai dit nos scripts c'est des programmes et on veut que nos programmes soient de qualité euh tout simplement pour moi c'est vraiment un affaire de qualité je veux que mes programmes soient euh enfin mes scripts.

Soit modularisé, c'est-à-dire par exemple moi quand j'écris un script euh mettons euh je dois faire euh un appel à Cubanatis.

Par exemple, je vais faire un vrai client cubanatiste dans un module,

qui va surgir de faire ça, que je vais pouvoir moquer, que je vais pouvoir euh utiliser dans différents contextes. Si je dois faire un script qui fait du slack pareil, je vais créer un module avec un client slack, avec des actions un peu haut niveau. Chaque module va avoir des métriques,

quelque chose qui est important aussi donc euh si je fais des aillots euh je vais avoir de du monitoring, je vais avoir des logs

avec un logeur que je vais pouvoir passer entre mes composants, mon logeur va me permettre de facilement euh, savoir si quelqu'un de niveau de verbosité je veux dans l'ensemble de mon programme, le format de sortie euh, donc Jason euh, ou du du texte brut classique et cetera

Bref, c'est finalement euh c'est c'est si on veut faire de la qualité, il faut faire du ben il faut utiliser des méthodes modernes de développement. En fait c'est ça mon point.

Et Bash n'est pas du tout dans ce mode-là. C'est-à-dire c'est euh il y a pas les outils dans le langage pour faire ça. C'est c'est des concepts qui sont complètement manquants mais.

Et c'est d'ailleurs pour ça qu'on va pas euh aucun développeur dans son quotidien ne va faire du Bash, personne ne fait du Bash pour faire euh euh des des programmes on va dire euh classiques.

Le Bash n'est utilisé que généralement que dans l'administration système.

On pourra parler euh plus tard de quand est-ce que moi j'utilise Bash, mais dès qu'on a un programme un peu sérieux avec de la logique et euh vraiment euh une envie de faire de la qualité.

Ben là euh Bache ne peut juste pas fonctionner, parce que il y a il y a pas ces concepts on peut pas faire du vrai développement en bâche, tout simplement. Il y a pas les outils.

Alors et donc là tu parlais donc de réutilisation de modules et cetera. Euh si jamais on fait justement un peu du one shot euh donc,

En fait, je veux aller un peu plus loin de de ce que tu disais, c'était que euh,

On a des concepts en Basht euh donc euh on a pas ces notions de tests et cetera euh ces notions de tests on les a pour le cycle de vie de de notre applicatif. C'est-à-dire que si jamais demain on rajoute des fonctionnalités, qu'on corrige un bug, on veut être sûr qu'on en rajoute pas à un autre,

Donc en fait cette notion de test qu'on rajoute euh tu parles de qualité,

euh, la qualité elle s'améliore parce que euh, notre logiciel on va pouvoir être sûr de son fonctionnement en permanence. On est sûr que quand on a fixé quelque chose

on a pas un problème euh un problème qui est réapparu. Euh,

Et c'est ça en fait le point le point essentiel euh quand on fait des programmes euh de prod on veut être sûr que ce programme continue de fonctionner sans avoir besoin d'avoir une connaissance profonde,

de ce script,

C'est le problème euh qui vient euh qui vient souvent ensuite euh après c'est que les ne se ressemblent pas, les uns avec les autres, on a en fait énormément de méthodes différentes euh pour pouvoir les écrire. Euh,

Exemple la précis mais euh la manière de pouvoir traiter des lignes de commande et de pouvoir faire des enfin de pouvoir changer euh des des strings.

C'est entre euh connaître la synthèse du Hok, connaître euh la synthèse du euh utiliser des fonctions natives de bâche,

euh déjà on a des des des façons différentes de le faire. C'est pas vraiment que.

Dans les autres langages on a pas ça, c'est que au moins on peut s'assurer que la sortie sera toujours la même,

on peut s'assurer que si jamais demain quelqu'un refactorise une fonction on va avoir toujours le même résultat. Alors oui il il existe du bats, il utilise des choses pour pouvoir le faire.

Voilà, il utilise il existe des choses pour pouvoir le faire euh dans dans du Bash. Mais en fait, c'est la notion d'écosystème dont tu parlais, c'est que en fait, quand on regarde Bash.

En fait l'écosystème est très très faible. Alors euh si jamais on faire du linter, il y en a qu'un seul, c'est euh si tu veux faire du du test c'est bath,

et puis c'est à peu près tout quoi. Là où dans tous les autres langages on a eu une évolution rapide des usages, pourquoi? Parce que c'est beaucoup utilisé. Donc on a eu plein de freins morts de tests qui sont apparus, qui se sont remplacés, qui ont été euh qui ont été refaits.

Là où dans Bache ben c'est c'est très pauvre en fait euh dans

d'où le fait que on va avoir après ce niveau de qualité euh c'est pas qu'on peut pas avoir un niveau de qualité élevé avec Bache, c'est juste que ça va être beaucoup plus compliqué. Et donc toi dans ton cas, c'est à quel moment que tu vas utiliser du badge? Parce que là on a dit donc on avait de la réutilisation

Est-ce que si tu fais des euh des des one shot est-ce que tu vas utiliser du Bash?

One shot et généralement c'est pour récupérer de l'information. C'est-à-dire c'est pas pour faire des actions

pour récupérer de la donnée. Euh si j'ai besoin euh ça m'arrive par exemple de ben de devoir récupérer des ressources d'encube très rapidement pour vous un truc. Là je vais faire enfin je vais même pas faire du bas, je vais faire un one-liner euh ou peut-être quelques lignes avec un

enfin je sais pas des trucs comme ça euh voilà donc pour récupérer de la donnée et très rapidement voilà avec un petit coup de

et cetera euh on va dire euh sortir quelque chose ça marche assez bien mais c'est voilà c'est du one shot,

C'est pas des choses que je vais utiliser euh tous les jours. C'est-à-dire que si je dois l'utiliser tous les jours, je vais tendance à le je pense que je vais le mettre dans un script, dans un autre langage. Et euh et aussi c'est des choses que je ne peux pas partager. Du moment que je veux partager quelque chose,

vais pas le faire en bâche. Tu parlais d'écosystème, c'est quelque chose qui est très important pour moi euh dans une dans deux entreprises mais même au niveau de l'open source.

Comme je l'ai dit au début euh le la majorité des langages ont des euh systèmes de gestion de dépendance.

Et donc moi finalement quand tous mes clients, tous mes euh toutes les choses comme ça et cetera ben j'essaie de les partager. Si j'écris un client pour faire du SLC.

Je vais me dire bah tiens il y a peut-être quelqu'un qui aura le même besoin un jour euh dans dans l'entreprise eh ben donc je vais faire euh je vais le mettre euh je vais faire une au final.

Je vais partager cette euh cette chose-là euh au sein de l'entreprise ou le mettre en open source et cetera et on construit comme ça un écosystème. Euh de la même manière j'ai connu euh on a tous connu je pense euh des entreprises.

Où euh les scripts euh shell. Chacun a sa petite collection de street challenge en local. Non partagé euh et donc euh parce que il y a eu un besoin un jour.

Et euh ça a pas été mis en commun et pas de bol euh trois mois après il y a un autre collègue qui avait ce besoin-là.

Eh ben euh malheureusement euh le ah oui je me rappelle que Mathieu il avait cité ce truc avec un script challenge il y a trois mois, apparemment là il est en vacances, bon ben voilà, tant pis. Euh donc il y a aussi cette notion de d'écosystème d'entreprise qui est important pour moi et ça passe par des modules

Délib euh voilà on appelle ça comme on veut euh pour avoir des composants au niveau que je peux ensuite euh ben euh consommer euh en tant que que personne qui va devoir développer des scripts

et ces modules peuvent être et vraiment de qualité, c'est ça ça permet ça aussi c'est on peut se dire euh bah chaque module va avoir euh des loges, des métriques

00:34:44.859 --> 00:34:54.743

Créateurs et invités

Mathieu Corbin
Invité
Mathieu Corbin
Pupitreur YAML.Président du collectif "Pour l'interdiction du shell dans l'administration système".
Dev'Obs #22 / Bash(ing?)
Diffusé par